Page MenuHomeHEPForge

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
Index: 95/branches/golem95_without_olo_cmake/autogen.sh
===================================================================
--- 95/branches/golem95_without_olo_cmake/autogen.sh (revision 0)
+++ 95/branches/golem95_without_olo_cmake/autogen.sh (revision 119)
@@ -0,0 +1,6 @@
+#!/bin/sh -e
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+
+autoreconf --force --install --verbose "$srcdir"
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
Property changes on: 95/branches/golem95_without_olo_cmake/autogen.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 95/branches/golem95_without_olo_cmake/NEWS
===================================================================
Property changes on: 95/branches/golem95_without_olo_cmake/NEWS
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/tool/test.res
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/test.res (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/test.res (revision 119)
@@ -0,0 +1,15 @@
+case(1)
+c_temp_d1 = -1/6
+c_temp_d1_rat = -1/6
+c_temp = 1/6*z_log(m3_sq)-1/18*(3*s13^2*he_c(2,s13,-m3_sq)-6*he_c(1,s13,-m3_sq)*s13*m3_sq-3*s13+11*m3_sq)/m3_sq
+c_temp_rat = -1/18*(8*s13+11*m3_sq)/(s13+m3_sq)
+case(2)
+c_temp_d1 = -1/6
+c_temp_d1_rat = -1/6
+c_temp = 1/6*z_log(m3_sq)-11/18+1/6*he_c(1,s13,-m3_sq)*s13
+c_temp_rat = -11/18
+case(3)
+c_temp_d1 = -1/6
+c_temp_d1_rat = -1/6
+c_temp = 1/6*z_log(m3_sq)+1/18*(3*s13^2*he_c(2,s13,-m3_sq)-3*s13-5*m3_sq)/m3_sq
+c_temp_rat = -1/18*(8*s13+5*m3_sq)/(s13+m3_sq)
Index: 95/branches/golem95_without_olo_cmake/tool/transf_resu.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/transf_resu.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/transf_resu.txt (revision 119)
@@ -0,0 +1,34 @@
+case(1)
+!
+c_temp_d1=-1._ki/6._ki
+!
+c_temp_d1_rat=-1._ki/6._ki
+!
+c_temp=1._ki/6._ki*z_log(m3_sq,-1._ki)-1._ki/18._ki*(3._ki*s13**2&
+ &*he_c(2,s13,-m3_sq)-6._ki*he_c(1,s13,-m3_sq)*s13*m3_sq-3._ki*s1&
+ &3+11._ki*m3_sq)/m3_sq
+!
+c_temp_rat=-1._ki/18._ki*(8._ki*s13+11._ki*m3_sq)/(s13+m3_sq)
+!
+case(2)
+!
+c_temp_d1=-1._ki/6._ki
+!
+c_temp_d1_rat=-1._ki/6._ki
+!
+c_temp=1._ki/6._ki*z_log(m3_sq,-1._ki)-11._ki/18._ki+1._ki/6._ki*&
+ &he_c(1,s13,-m3_sq)*s13
+!
+c_temp_rat=-11._ki/18._ki
+!
+case(3)
+!
+c_temp_d1=-1._ki/6._ki
+!
+c_temp_d1_rat=-1._ki/6._ki
+!
+c_temp=1._ki/6._ki*z_log(m3_sq,-1._ki)+1._ki/18._ki*(3._ki*s13**2&
+ &*he_c(2,s13,-m3_sq)-3._ki*s13-5._ki*m3_sq)/m3_sq
+!
+c_temp_rat=-1._ki/18._ki*(8._ki*s13+5._ki*m3_sq)/(s13+m3_sq)
+!
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r0.m (revision 119)
@@ -0,0 +1,91 @@
+I6_4p1m := x/(A+B*y);
+#
+I6_4p1m:= applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p1m));
+I6_4p1m:= applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p1m);
+#
+I6_4p1m:= I6_4p1m;
+# I6_4p1m := algsubs(A+B=C+D*x,I6_4p1m,exact);
+I6_4p1m := algsubs(A+B=C*(1-x),I6_4p1m,exact);
+I6_4p1m := subs(A=C+F*x,B=x*G,I6_4p1m);
+I6_4p1m := expand(I6_4p1m);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -(1-z)*s13
+I6_4p1m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p1m);
+I6_4p1m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p1m);
+I6_4p1m := expand(int(I6_4p1m,x=0..1));
+I6_4p1m := I6_4p1m;
+#
+reste := I6_4p1m:
+result := 0;
+set_ln := indets(I6_4p1m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p1m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p1m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = (1-z)*s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+truc1:=subs(ln(C) = ln(1-z)+z_log(s13),C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+truc1:=factor(truc1):
+fprintf(fd,"fg = %a\n",truc1);
+#
+quit
+# pole pour F=0
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c1 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z), coeff(expr,F,0));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d1):
+ dtot := factor(subs(z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+# res_fin := -dresult;
+ res_fin := dresult/t2;
+ res_fin := subs(ln=z_log,res_fin);
+ fprintf(fd,"temp0 = %a\n",res_fin);
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/testa.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/testa.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/testa.m (revision 119)
@@ -0,0 +1,8 @@
+lamb := (s12*s34**2-s34*s13*s24-s23*s13*s24+s24*s34*s23
+ -s12*s34*s23+s24**2*s13-s12*s34*s24+s24*s13**2
+ -s12*s34*s13+s12**2*s34-s24*s13*s12+s23*s13*s12);
+t1 := (s13-s34)*(s24-s12);
+t2 := (s24+s13-s12-s34);
+t3 := (s13*s24-s12*s34);
+lumb := t1*s23 - t2*t3;
+verif := factor(lamb+lumb);
Index: 95/branches/golem95_without_olo_cmake/tool/integ1D_f4p2m_opp.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ1D_f4p2m_opp.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ1D_f4p2m_opp.m (revision 119)
@@ -0,0 +1,904 @@
+########################################################################
+#
+# initialisation
+#
+########################################################################
+S:=table(symmetric,[seq((i,i)=0,i=1..4),(2,3)=0,(1,4)=0]);
+N := 4;
+#
+S_i:={1,2,3,4};
+LCor:=[q1,q2,q3,q4];
+#
+#
+$include "procedure.m"
+########################################################################
+with(linalg);
+Sa:=matrix(4,4,[
+0,S[1,2],S[1,3],0,
+S[1,2],0,0,S[2,4],
+S[1,3],0,0,S[3,4],
+0,S[2,4],S[3,4],0] );
+set6 := {1,2,3,4};
+#
+# on calcule les b4
+Un4:=vector([1,1,1,1]);
+B4M:=linsolve(Sa,Un4);
+InvSa:=inverse(Sa);
+Determi4 := det(Sa);
+for i from 1 to 4 do
+ b4(i,{}) := B4M[i];
+end do;
+for i from 1 to 4 do
+ for j from 1 to 4 do
+ InvS4(i,j,{}) := InvSa[i,j];
+ end do:
+end do:
+#
+SumB4:=proc(Se::set)
+ local set4,res,vk,k;
+ set4:=Compl(Se,S_i);
+ res:=0;
+ for k from 1 to 4 do
+ vk:=set4[k];
+ res:=res+b4(vk,Se);
+ end do;
+ RETURN(res);
+end proc;
+########################################################################
+$include "I4Result.m"
+$include "I3Result.m"
+#
+# on definit :
+# ie(n,z1,z3) = \frac{1}{z_1^n \, z_3} \; \int^1_0 dy \frac{\ln(y)}{(y-1/z_1)^n \, (y-1/z_3)}
+# je(n,z1) = \frac{1}{z_1^n} \; \int^1_0 dy \frac{\ln(y)}{(y-1/z_1)^n}
+# he(n,z1,z3) = \int^1_0 dy frac{y^(n-1)}{ (z1*y+z3*(1-y)) }
+# hem(n,m,z1,z3,z2,z4) = \int^1_0 dy frac{y^(n-1)}{ (z1*y+z3*(1-y))^m (z2*y+z4*(1-y)) }
+#
+############################ dimension n+2 #################################
+t_rang1 := table();
+rang := 1;
+for l1 from 1 to 4 do
+ Diag:=IScaZ(n+2,4,l1,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+ #
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[3,4]*S[1,2]/S[2,4]/S[1,3])-ln(-S[3,4])
+ +ln(-S[2,4])+ln(-S[1,3]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),
+ ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),cm0):
+#
+# z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]) = z2 - lambda*S[1,2]/(S[1,3]*S[2,4])
+# z2 = (1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]))
+# z3 = (S[1,2]-S[1,3])/S[2,4] = z5 - lambda/S[2,4]
+# z4 = (S[1,2]-S[2,4])/S[1,3] = z6 - lambda/S[1,3]
+# z5 = 1-S[3,4]/S[2,4]
+# z6 = 1-S[3,4]/S[1,3]
+#
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,S[1,2],0,S[3,4]) =
+ 1/S[2,4]*ie(1,z5,z3)+1/S[1,3]*ie(1,z6,z4)
+ -S[1,2]/(S[2,4]*S[1,3])*ie(1,z2,z1),
+ ln(S[3,4]/S[1,3]) = z6*je(2,z6),
+ ln(S[3,4]/S[2,4]) = z5*je(2,z5),
+ ln(S[3,4]*S[1,2]/S[2,4]/S[1,3]) = z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(1,z5,z3) = (z5-z3)*ke(2,1,z5,z3)+je(2,z5),
+ ie(1,z6,z4) = (z6-z4)*ke(2,1,z6,z4)+je(2,z6),
+ ie(1,z2,z1) = (z2-z1)*ke(2,1,z2,z1)+je(2,z2),
+ cm0):
+#
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ restant := factor(restant):
+ cm0:=res+restant;
+ t_rang1[l1] := cm0;
+end do:
+# pour faire le programme Fortran
+for l1 from 1 to 4 do
+ rt1 := t_rang1[l1];
+ if ((l1 = 4) or (l1 = 1)) then
+ rt1 := subs(
+ je(2,z2) = S[2,4]*S[1,3]/(S[2,4]*S[1,3]-S[1,2]*S[3,4])
+ *(ln(S[3,4]/S[1,3])+ln(S[1,2]/S[2,4])),
+ je(2,z5) = S[2,4]/(S[2,4]-S[3,4])*ln(S[3,4]/S[2,4]),
+ je(2,z6) = S[1,3]/(S[1,3]-S[3,4])*ln(S[3,4]/S[1,3]),rt1);
+ elif ((l1 = 3) or (l1 = 2)) then
+ rt1 := subs(
+ je(2,z2) = S[2,4]*S[1,3]/(S[2,4]*S[1,3]-S[1,2]*S[3,4])
+ *(ln(S[3,4]/S[2,4])+ln(S[1,2]/S[1,3])),
+ je(2,z5) = S[2,4]/(S[2,4]-S[3,4])*ln(S[3,4]/S[2,4]),
+ je(2,z6) = S[1,3]/(S[1,3]-S[3,4])*ln(S[3,4]/S[1,3]),rt1);
+ end if;
+ rt1 := applyrule(ln(S2::indexed/S1::indexed) = -he(1,S1,S2)*(S1-S2),rt1);
+ rt1 := factor(rt1);
+ set_func:=indets(rt1,function);
+ restant:=rt1;
+ res:=0;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ restant := subs(func=0,restant);
+ res := res+temp*func;
+ end do;
+ restant := factor(restant);
+ rt1:=res+restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang1_he[l1]:=factor(res);
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1;
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang1_re[l1]:=restant;
+ r_rang1_ke[l1]:=factor(res);
+ r_rang1_he[l1] := subs(he(1,S[2,4],S[1,2])=S[1,3]*he(1,S[1,3],S[3,4])/S[1,2]
+ +(S[1,2]*S[3,4]-S[1,3]*S[2,4])*hem(2,1,S[2,4],S[1,2],S[3,4],S[1,3])/S[1,2],
+ r_rang1_he[l1]);
+ r_rang1_he[l1] := subs(he(1,S[1,3],S[1,2])=S[2,4]*he(1,S[2,4],S[3,4])/S[1,2]
+ +(S[1,2]*S[3,4]-S[1,3]*S[2,4])*hem(2,1,S[1,3],S[1,2],S[3,4],S[2,4])/S[1,2],
+ r_rang1_he[l1]);
+ r_rang1_he[l1] := factor(r_rang1_he[l1]);
+#
+end do;
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"res_he = %a\n",r_rang1_he[l1]);
+ fprintf(fd,"res_ke = %a\n",r_rang1_ke[l1]);
+ if (l1 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+fclose(fd);
+t_rang2 := table(symmetric);
+rang := 2;
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+ Diag:=IScaZ(n+2,4,l1,l2,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[3,4]*S[1,2]/S[2,4]/S[1,3])-ln(-S[3,4])
+ +ln(-S[2,4])+ln(-S[1,3]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),
+ ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,S[1,2],0,S[3,4]) =
+ 1/S[2,4]*ie(1,z5,z3)+1/S[1,3]*ie(1,z6,z4)
+ -S[1,2]/(S[2,4]*S[1,3])*ie(1,z2,z1),
+ ln(S[3,4]/S[1,3]) = z6*je(2,z6),
+ ln(S[3,4]/S[2,4]) = z5*je(2,z5),
+ ln(S[3,4]*S[1,2]/S[2,4]/S[1,3]) = z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(1,z5,z3) = (z5-z3)^2*ke(3,2,z5,z3)+(z5-z3)/z5*je(3,z5)
+ +(2*z5-z3)/z5*je(2,z5),
+ ie(1,z6,z4) = (z6-z4)^2*ke(3,2,z6,z4)+(z6-z4)/z6*je(3,z6)
+ +(2*z6-z4)/z6*je(2,z6),
+ ie(1,z2,z1) = (z2-z1)^2*ke(3,2,z2,z1)+(z2-z1)/z2*je(3,z2)
+ +(2*z2-z1)/z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ke(2,1,z5,z3) = (z5-z3)*ke(3,2,z5,z3)+1/z5*je(3,z5)+1/z5*je(2,z5),
+ ke(2,1,z6,z4) = (z6-z4)*ke(3,2,z6,z4)+1/z6*je(3,z6)+1/z6*je(2,z6),
+ ke(2,1,z2,z1) = (z2-z1)*ke(3,2,z2,z1)+1/z2*je(3,z2)+1/z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ je(2,z5) = -2*je(3,z5) + 1/(1-z5),
+ je(2,z6) = -2*je(3,z6) + 1/(1-z6),
+ je(2,z2) = -2*je(3,z2) + 1/(1-z2),
+ cm0):
+#
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ restant);
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang2[l1,l2] := cm0;
+end do:
+end do:
+# for l1 from 1 to 4 do
+# for l2 from 1 to 4 do
+# printf("t_rang2(%d,%d) = %a\n",l1,l2,t_rang2[l1,l2]);
+# end do:
+# end do:
+# quit;
+# pour faire le programme Fortran
+r_rang2_ke := table(symmetric);
+r_rang2_he := table(symmetric);
+r_rang2_re := table(symmetric);
+r_rang2 := table(symmetric);
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+ rt1 := t_rang2[l1,l2];
+ rt1 := subs(
+ je(3,z2) = 1/2*S[2,4]*S[1,3]/S[1,2]/S[3,4]
+ *(2-(S[2,4]*S[1,3]-S[1,2]*S[3,4])
+ *he(2,S[2,4]*S[1,3],S[1,2]*S[3,4])),
+ je(3,z5) = 1/2*S[2,4]/S[3,4]
+ *(2-(S[2,4]-S[3,4])*he(2,S[2,4],S[3,4])),
+ je(3,z6) = 1/2*S[1,3]/S[3,4]
+ *(2-(S[1,3]-S[3,4])*he(2,S[1,3],S[3,4])),
+ rt1);
+#
+ set_func:=indets(rt1,function);
+ res:=0;
+ restant:=rt1;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ restant := subs(func=0,restant);
+ res := res+temp*func;
+ end do;
+ res;
+ restant := factor(restant);
+ rt1:=res+restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang2_he[l1,l2]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang2_re[l1,l2]:=factor(restant);
+ r_rang2_ke[l1,l2]:=factor(res);
+#
+ eq_ori1 := he(2,C,D) = ( (A*D-B*C)*hem(3,1,A,B,C,D)
+ +B*he(2,A,B) )/D;
+ eq_ori2 := he(2,A,B) = ( (A*D-B*C)*hem(3,2,A,B,C,D)
+ -(D-C)*hem(3,1,A,B,C,D)
+ +1/A )/2;
+ if ( ((l1 = 1) and (l2 = 1)) or ((l1 = 4) and (l2 = 4))
+ or ((l1 = 1) and (l2 = 4)) ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori1);
+ r_rang2_he[l1,l2] := subs(eq1,r_rang2_he[l1,l2]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori2);
+ elif ( ((l1 = 2) and (l2 = 2)) or ((l1 = 3) and (l2 = 3))
+ or ((l1 = 2) and (l2 = 3)) or ((l1 = 1) and (l2 = 3)) ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori1);
+ r_rang2_he[l1,l2] := subs(eq1,r_rang2_he[l1,l2]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori2);
+ elif ( ((l1 = 1) and (l2 = 2)) or ((l1 = 2) and (l2 = 4))
+ or ((l1 = 3) and (l2 = 4)) ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori1);
+ r_rang2_he[l1,l2] := subs(eq1,r_rang2_he[l1,l2]):
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori1);
+ r_rang2_he[l1,l2] := subs(eq1,r_rang2_he[l1,l2]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori2);
+ end if;
+ r_rang2_he[l1,l2] := factor(r_rang2_he[l1,l2]);
+ r_rang2_he[l1,l2] := subs(eq2,r_rang2_he[l1,l2]):
+ r_rang2_he[l1,l2] := factor(r_rang2_he[l1,l2]);
+ set_he:=indets(r_rang2_he[l1,l2],function);
+ restant:=r_rang2_he[l1,l2];
+ res:=0;
+ for func in set_he do
+ temp:=coeff(r_rang2_he[l1,l2],func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang2_he[l1,l2]:=res;
+ r_rang2_re[l1,l2]:=factor(r_rang2_re[l1,l2]+restant);
+ r_rang2_ke[l1,l2]:=r_rang2_ke[l1,l2];
+end do;
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ for l2 from l1 to 4 do
+ if (l2 = l1) then
+ fprintf(fd,"select case(par4)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"res_ke = %a\n",r_rang2_ke[l1,l2]);
+ fprintf(fd,"res_he = %a\n",r_rang2_he[l1,l2]);
+ fprintf(fd,"res_cst = %a\n",r_rang2_re[l1,l2]);
+ if (l2 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+ end do;
+end do;
+fclose(fd);
+rang := 3;
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+ Diag:=IScaZ(n+2,4,l1,l2,l3,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[3,4]*S[1,2]/S[2,4]/S[1,3])-ln(-S[3,4])
+ +ln(-S[2,4])+ln(-S[1,3]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),
+ ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,S[1,2],0,S[3,4]) =
+ 1/S[2,4]*ie(1,z5,z3)+1/S[1,3]*ie(1,z6,z4)
+ -S[1,2]/(S[2,4]*S[1,3])*ie(1,z2,z1),
+ ln(S[3,4]/S[1,3]) = z6*je(2,z6),
+ ln(S[3,4]/S[2,4]) = z5*je(2,z5),
+ ln(S[3,4]*S[1,2]/S[2,4]/S[1,3]) = z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(1,z5,z3) = (z5-z3)^2*ke(3,2,z5,z3)+(z5-z3)/z5*je(3,z5)
+ +(2*z5-z3)/z5*je(2,z5),
+ ie(1,z6,z4) = (z6-z4)^2*ke(3,2,z6,z4)+(z6-z4)/z6*je(3,z6)
+ +(2*z6-z4)/z6*je(2,z6),
+ ie(1,z2,z1) = (z2-z1)^2*ke(3,2,z2,z1)+(z2-z1)/z2*je(3,z2)
+ +(2*z2-z1)/z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ke(2,1,z5,z3) = (z5-z3)*ke(3,2,z5,z3)+1/z5*je(3,z5)+1/z5*je(2,z5),
+ ke(2,1,z6,z4) = (z6-z4)*ke(3,2,z6,z4)+1/z6*je(3,z6)+1/z6*je(2,z6),
+ ke(2,1,z2,z1) = (z2-z1)*ke(3,2,z2,z1)+1/z2*je(3,z2)+1/z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ke(3,2,z5,z3) = (z5-z3)*ke(4,3,z5,z3)
+ +1/z5^2*(je(4,z5)+2*je(3,z5)+je(2,z5)),
+ ke(3,2,z6,z4) = (z6-z4)*ke(4,3,z6,z4)
+ +1/z6^2*(je(4,z6)+2*je(3,z6)+je(2,z6)),
+ ke(3,2,z2,z1) = (z2-z1)*ke(4,3,z2,z1)
+ +1/z2^2*(je(4,z2)+2*je(3,z2)+je(2,z2)),
+ cm0):
+ cm0:=subs(
+ je(2,z5) = -2*je(3,z5) + 1/(1-z5),
+ je(2,z6) = -2*je(3,z6) + 1/(1-z6),
+ je(2,z2) = -2*je(3,z2) + 1/(1-z2),
+ cm0):
+ cm0:=subs(
+ je(3,z5) = -3/2*je(4,z5) + (z5-2)/(1-z5)^2/4,
+ je(3,z6) = -3/2*je(4,z6) + (z6-2)/(1-z6)^2/4,
+ je(3,z2) = -3/2*je(4,z2) + (z2-2)/(1-z2)^2/4,
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ restant);
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang3[l1,l2,l3] := cm0;
+end do;
+end do;
+end do;
+t_rang3[l1,l2,l3];
+# pour faire le programme Fortran
+r_rang3_ke := table(symmetric);
+r_rang3_he := table(symmetric);
+r_rang3_re := table(symmetric);
+r_rang3 := table(symmetric);
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+ rt1 := t_rang3[l1,l2,l3];
+ rt1 := subs(
+ je(4,z2)=(S[2,4]*S[1,3])/3*( -(S[2,4]*S[1,3]-S[1,2]*S[3,4])^2
+ /(S[1,2]*S[3,4])^2*he(3,S[2,4]*S[1,3],S[1,2]*S[3,4])
+ -3/(S[1,2]*S[3,4]) ),
+ je(4,z5)=S[2,4]/3*( -(S[2,4]-S[3,4])^2/S[3,4]^2*he(3,S[2,4],S[3,4])
+ -3/S[3,4] ),
+ je(4,z6)=S[1,3]/3*( -(S[1,3]-S[3,4])^2/S[3,4]^2*he(3,S[1,3],S[3,4])
+ -3/S[3,4] ),
+ rt1);
+ rt1 := factor(rt1);
+ set_func:=indets(rt1,function);
+ res:=0;
+ restant:=rt1;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ restant := subs(func=0,restant);
+ res := res+temp*func;
+ end do;
+ res;
+ restant := factor(restant);
+ rt1:=res+restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang3_he[l1,l2,l3]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang3_re[l1,l2,l3]:=factor(restant);
+ r_rang3_ke[l1,l2,l3]:=factor(res);
+#
+ eq_ori1 := he(3,C,D) = ( (A*D-B*C)*hem(4,1,A,B,C,D)
+ +B*he(3,A,B) )/D;
+#
+ eq_ori2 := he(3,A,B)
+ = ( 1 + (2*B*C+A*C-3*A*D)*hem(4,1,A,B,C,D) +
+ (A*D-B*C)*(3*D*hem(3,2,C,D,A,B)+(2*C-3*D)*hem(4,2,C,D,A,B))
+ )/(3*A);
+#
+ eq_ori3 := hem(3,2,C,D,A,B)
+ = (1-2*A*(C-2*D)*hem(4,1,A,B,C,D)-2*A*D*(2*C-3*D)*hem(4,2,C,D,A,B)
+ +2*(A*D-B*C)*(
+ 3*D^2*hem(3,3,C,D,A,B) + D*(3*C-8*D)* hem(4,3,C,D,A,B)
+ -(C-2*D)*hem(5,2,C,D,A,B)
+ +(C^2-5*C*D+5*D^2)*hem(5,3,C,D,A,B) ) )/(6*A*D^2);
+#
+ eq_ori5 := hem(4,2,C,D,A,B)
+ = (C-D)*hem(5,3,C,D,A,B)+D*hem(4,3,C,D,A,B);
+ if (
+ ((l1 = 1) and (l2 = 1) and (l3 = 1)) or
+ ((l1 = 4) and (l2 = 4) and (l3 = 4)) or
+ ((l1 = 1) and (l2 = 4) and (l3 = 4)) or
+ ((l1 = 1) and (l2 = 1) and (l3 = 4))
+ ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori1);
+ r_rang3_he[l1,l2,l3] := subs(eq1,r_rang3_he[l1,l2,l3]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori2);
+ r_rang3_he[l1,l2,l3] := subs(eq2,r_rang3_he[l1,l2,l3]):
+ eq3 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori3);
+ r_rang3_he[l1,l2,l3] := subs(eq3,r_rang3_he[l1,l2,l3]):
+ eq4 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori4);
+ r_rang3_he[l1,l2,l3] := subs(eq4,r_rang3_he[l1,l2,l3]):
+ eq5 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori5);
+ r_rang3_he[l1,l2,l3] := subs(eq5,r_rang3_he[l1,l2,l3]):
+ elif (
+ ((l1 = 2) and (l2 = 2) and (l3 = 2)) or
+ ((l1 = 3) and (l2 = 3) and (l3 = 3)) or
+ ((l1 = 2) and (l2 = 3) and (l3 = 3)) or
+ ((l1 = 2) and (l2 = 2) and (l3 = 3))
+ ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori1);
+ r_rang3_he[l1,l2,l3] := subs(eq1,r_rang3_he[l1,l2,l3]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori2);
+ r_rang3_he[l1,l2,l3] := subs(eq2,r_rang3_he[l1,l2,l3]):
+ eq3 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori3);
+ r_rang3_he[l1,l2,l3] := subs(eq3,r_rang3_he[l1,l2,l3]):
+ eq4 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori4);
+ r_rang3_he[l1,l2,l3] := subs(eq4,r_rang3_he[l1,l2,l3]):
+ eq5 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori5);
+ r_rang3_he[l1,l2,l3] := subs(eq5,r_rang3_he[l1,l2,l3]):
+ elif (
+ ((l1 = 1) and (l2 = 1) and (l3 = 2)) or
+ ((l1 = 1) and (l2 = 1) and (l3 = 3)) or
+ ((l1 = 1) and (l2 = 2) and (l3 = 4)) or
+ ((l1 = 1) and (l2 = 3) and (l3 = 4)) or
+ ((l1 = 2) and (l2 = 4) and (l3 = 4)) or
+ ((l1 = 3) and (l2 = 4) and (l3 = 4))
+ ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori1);
+ r_rang3_he[l1,l2,l3] := subs(eq1,r_rang3_he[l1,l2,l3]):
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori1);
+ r_rang3_he[l1,l2,l3] := subs(eq1,r_rang3_he[l1,l2,l3]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori2);
+ r_rang3_he[l1,l2,l3] := subs(eq2,r_rang3_he[l1,l2,l3]):
+ elif (
+ ((l1 = 1) and (l2 = 2) and (l3 = 2)) or
+ ((l1 = 1) and (l2 = 2) and (l3 = 3)) or
+ ((l1 = 1) and (l2 = 3) and (l3 = 3)) or
+ ((l1 = 2) and (l2 = 2) and (l3 = 4)) or
+ ((l1 = 2) and (l2 = 3) and (l3 = 4)) or
+ ((l1 = 3) and (l2 = 3) and (l3 = 4))
+ ) then
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[1,3],D=S[3,4],eq_ori1);
+ r_rang3_he[l1,l2,l3] := subs(eq1,r_rang3_he[l1,l2,l3]):
+ eq1 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori1);
+ r_rang3_he[l1,l2,l3] := subs(eq1,r_rang3_he[l1,l2,l3]):
+ eq2 := subs(A=S[2,4]*S[1,3],B=S[1,2]*S[3,4],C=S[2,4],D=S[3,4],eq_ori2);
+ r_rang3_he[l1,l2,l3] := subs(eq2,r_rang3_he[l1,l2,l3]):
+ end if;
+ r_rang3_he[l1,l2,l3] := factor(r_rang3_he[l1,l2,l3]):
+ set_he:=indets(r_rang3_he[l1,l2,l3],function);
+ restant:=r_rang3_he[l1,l2,l3]:
+ res:=0;
+ for func in set_he do
+ temp:=coeff(r_rang3_he[l1,l2,l3],func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang3_he[l1,l2,l3]:=res;
+ r_rang3_re[l1,l2,l3]:=factor(r_rang3_re[l1,l2,l3]+restant);
+ r_rang3_ke[l1,l2,l3]:=r_rang3_ke[l1,l2,l3];
+end do;
+end do;
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+for l2 from l1 to 4 do
+ if (l2 = l1) then
+ fprintf(fd,"select case(par3)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l2);
+for l3 from l2 to 4 do
+ if (l3 = l2) then
+ fprintf(fd,"select case(par4)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l3);
+ fprintf(fd,"res_ke = %a\n",r_rang3_ke[l1,l2,l3]);
+ fprintf(fd,"res_he = %a\n",r_rang3_he[l1,l2,l3]);
+ fprintf(fd,"res_cst = %a\n",r_rang3_re[l1,l2,l3]);
+ if (l3 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+ if (l2 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+end do;
+fclose(fd);
+# quit;
+############################ dimension n+4 #################################
+rang := 0;
+Diag:=IScaZ(n+4,4,q1,q2,q3,q4);
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+Diag := subs(epsilon=-epsilonUv,Diag);
+Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+cm2:=factor(coeff(Diag,epsilonUv,-2));
+cm1:=factor(coeff(Diag,epsilonUv,-1));
+cm0:=factor(coeff(Diag,epsilonUv,0));
+cm0:=subs(ln(-S[1,2]) = ln(S[3,4]*S[1,2]/S[2,4]/S[1,3])-ln(-S[3,4])
+ +ln(-S[2,4])+ln(-S[1,3]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),
+ ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),cm0):
+cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,S[1,2],0,S[3,4]) =
+ 1/S[2,4]*ie(1,z5,z3)+1/S[1,3]*ie(1,z6,z4)
+ -S[1,2]/(S[2,4]*S[1,3])*ie(1,z2,z1),
+ ln(S[3,4]/S[1,3]) = z6*je(2,z6),
+ ln(S[3,4]/S[2,4]) = z5*je(2,z5),
+ ln(S[3,4]*S[1,2]/S[2,4]/S[1,3]) = z2*je(2,z2),
+ cm0):
+cm0:=subs(
+ ie(1,z5,z3) = (z5-z3)*ke(2,1,z5,z3)+je(2,z5),
+ ie(1,z6,z4) = (z6-z4)*ke(2,1,z6,z4)+je(2,z6),
+ ie(1,z2,z1) = (z2-z1)*ke(2,1,z2,z1)+je(2,z2),
+cm0):
+cm0:=subs(
+ie(1,z1,z3) = (z1-z3)/z3*ie(2,z1,z3)+z1/z3*je(2,z1),
+ie(1,z2,z4) = (z2-z4)/z4*ie(2,z2,z4)+z2/z4*je(2,z2),
+cm0):
+set_func:=indets(cm0,function);
+res:=0;
+restant:=cm0;
+for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do:
+restant := factor(restant):
+cm0:=res+restant;
+# pour faire le programme Fortran
+rt1 := cm0;
+rt1 := subs(
+ je(2,z5) = S[2,4]/(S[2,4]-S[3,4])*ln(S[3,4]/S[2,4]),
+ je(2,z6) = S[1,3]/(S[1,3]-S[3,4])*ln(S[3,4]/S[1,3]),rt1);
+rt1 := applyrule(ln(S2::indexed/S1::indexed) = -he(1,S1,S2)*(S1-S2),rt1);
+rt1 := factor(rt1);
+set_func:=indets(rt1,function);
+res:=0;
+for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ res := res+temp*func;
+end do;
+restant := factor(restant);
+rt1:=res+restant;
+set_ke:=indets(rt1,specfunc(anything,ke)):
+restant:=rt1;
+res:=0;
+for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do;
+r_rang0_ke:=factor(res);
+r_rang0_he:=restant;
+set_he:=indets(r_rang0_he,specfunc(anything,he)):
+restant:=r_rang0_he;
+res:=0;
+for func in set_he do
+ temp:=coeff(r_rang0_he,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do;
+r_rang0_he:=factor(res);
+r_rang0_re:=restant;
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"res_he = %a\n",r_rang0_he);
+fprintf(fd,"res_ke = %a\n",r_rang0_ke);
+fprintf(fd,"res_cst = %a\n",r_rang0_re);
+fclose(fd);
+t_rang1 := table();
+rang := 1;
+for l1 from 1 to 4 do
+ Diag:=IScaZ(n+4,4,l1,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[3,4]*S[1,2]/S[2,4]/S[1,3])-ln(-S[3,4])
+ +ln(-S[2,4])+ln(-S[1,3]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),
+ ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,S[1,2],0,S[3,4]) =
+ 1/S[2,4]*ie(1,z5,z3)+1/S[1,3]*ie(1,z6,z4)
+ -S[1,2]/(S[2,4]*S[1,3])*ie(1,z2,z1),
+ ln(S[3,4]/S[1,3]) = z6*je(2,z6),
+ ln(S[3,4]/S[2,4]) = z5*je(2,z5),
+ ln(S[3,4]*S[1,2]/S[2,4]/S[1,3]) = z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(1,z5,z3) = (z5-z3)^2*ke(3,2,z5,z3)+(z5-z3)/z5*je(3,z5)
+ +(2*z5-z3)/z5*je(2,z5),
+ ie(1,z6,z4) = (z6-z4)^2*ke(3,2,z6,z4)+(z6-z4)/z6*je(3,z6)
+ +(2*z6-z4)/z6*je(2,z6),
+ ie(1,z2,z1) = (z2-z1)^2*ke(3,2,z2,z1)+(z2-z1)/z2*je(3,z2)
+ +(2*z2-z1)/z2*je(2,z2),
+ cm0):
+#
+ cm0:=subs(
+ ke(2,1,z5,z3) = (z5-z3)*ke(3,2,z5,z3)+1/z5*je(3,z5)+1/z5*je(2,z5),
+ ke(2,1,z6,z4) = (z6-z4)*ke(3,2,z6,z4)+1/z6*je(3,z6)+1/z6*je(2,z6),
+ ke(2,1,z2,z1) = (z2-z1)*ke(3,2,z2,z1)+1/z2*je(3,z2)+1/z2*je(2,z2),
+ cm0):
+ cm0:=subs(
+ je(2,z5) = -2*je(3,z5) + 1/(1-z5),
+ je(2,z6) = -2*je(3,z6) + 1/(1-z6),
+ je(2,z2) = -2*je(3,z2) + 1/(1-z2),
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1 = (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]),
+ z2 = 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]),
+ z3 = (S[1,2]-S[1,3])/S[2,4],
+ z4 = (S[1,2]-S[2,4])/S[1,3],
+ z5 = 1-S[3,4]/S[2,4],
+ z6 = 1-S[3,4]/S[1,3],
+ restant);
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang1[l1] := cm0;
+end do:
+for l1 from 1 to 4 do
+ t_rang1[l1];
+end do;
+# pour faire le programme Fortran
+r_rang1_ke := table();
+r_rang1_he := table();
+r_rang1_re := table();
+for l1 from 1 to 4 do
+ rt1 := t_rang1[l1];
+ rt1 := subs(
+ je(3,z2) = 1/2*S[2,4]*S[1,3]/S[1,2]/S[3,4]
+ *(2-(S[2,4]*S[1,3]-S[1,2]*S[3,4])
+ *he(2,S[2,4]*S[1,3],S[1,2]*S[3,4])),
+ je(3,z5) = 1/2*S[2,4]/S[3,4]
+ *(2-(S[2,4]-S[3,4])*he(2,S[2,4],S[3,4])),
+ je(3,z6) = 1/2*S[1,3]/S[3,4]
+ *(2-(S[1,3]-S[3,4])*he(2,S[1,3],S[3,4])),
+ rt1);
+ set_func:=indets(rt1,function);
+ res:=0;
+ restant:=rt1;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ restant := subs(func=0,restant);
+ res := res+temp*func;
+ end do;
+ res;
+ restant := factor(restant);
+ rt1:=res+restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_he[l1]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_re[l1]:=factor(restant);
+ r_rang1_ke[l1]:=factor(res);
+#
+ eq_ori1 := he(2,C,D) = ( (A*D-B*C)*hem(3,1,A,B,C,D)
+ +B*he(2,A,B) )/D;
+ if ( (l1 = 1) or (l1 = 4) ) then
+ eq1 := subs(C=S[2,4]*S[1,3],D=S[1,2]*S[3,4],A=S[1,3],B=S[3,4],eq_ori1);
+ r_rang1_he[l1] := subs(eq1,r_rang1_he[l1]):
+ elif ( (l1 = 2) or (l1 = 3) ) then
+ eq1 := subs(C=S[2,4]*S[1,3],D=S[1,2]*S[3,4],A=S[2,4],B=S[3,4],eq_ori1);
+ r_rang1_he[l1] := subs(eq1,r_rang1_he[l1]):
+ end if;
+ r_rang1_he[l1] := factor(r_rang1_he[l1]);
+ r_rang1_he[l1] := subs(eq2,r_rang1_he[l1]):
+ r_rang1_he[l1] := factor(r_rang1_he[l1]);
+ set_he:=indets(r_rang1_he[l1],function);
+ restant:=r_rang1_he[l1];
+ res:=0;
+ for func in set_he do
+ temp:=coeff(r_rang1_he[l1],func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_he[l1]:=res;
+ r_rang1_re[l1]:=factor(r_rang1_re[l1]+restant);
+ r_rang1_ke[l1]:=r_rang1_ke[l1];
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"res_ke = %a\n",r_rang1_ke[l1]);
+ fprintf(fd,"res_he = %a\n",r_rang1_he[l1]);
+ fprintf(fd,"res_cst = %a\n",r_rang1_re[l1]);
+end do;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/permute.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/permute.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/permute.m (revision 119)
@@ -0,0 +1,55 @@
+with(combinat);
+list1 := permute([p2,p3,p4,p5,p6]);
+tal :=add(a_6psca(p1,op(op(l1,list1))),l1=1..nops(list1));
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"total = %a\n",tal);
+close(fd);
+quit;
+list1 := permute([p1,p3,p5]);
+list2 := permute([p2,p4,p6]);
+# list_tot := [ seq( seq([op(op(l1,list1)),op(op(l2,list2))],l1=1..nops(list1)),
+# l2=1..nops(list2)) ];
+list_tot := [ seq( seq([op(1,op(l1,list1)),op(1,op(l2,list2)),
+ op(2,op(l1,list1)),op(2,op(l2,list2)),
+ op(3,op(l1,list1)),op(3,op(l2,list2))],l1=1..nops(list1)),
+ l2=1..nops(list2)) ];
+tal :=add(a_3m3p_tho(op(op(l1,list_tot))),l1=1..nops(list_tot));
+# lprint(tal);
+# list1 := permute([p1,p2,p3,p4,p5]);
+# tal :=add(tot(op(op(l1,list1)),p6),l1=1..nops(list1));
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"total = %a\n",tal);
+close(fd);
+quit;
+list1 := permute([p3,p4,p5,p6]);
+tal :=add(tot(p1,p2,op(op(l1,list1))),l1=1..nops(list1));
+# lprint(tal);
+# list1 := permute([p1,p2,p3,p4,p5]);
+# tal :=add(tot(op(op(l1,list1)),p6),l1=1..nops(list1));
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"total = %a\n",tal);
+close(fd);
+list1 := permute([p1,p2]);
+list2 := permute([p3,p4,p5,p6]);
+list_tot := [ seq( seq([op(op(l1,list1)),op(op(l2,list2))],l1=1..nops(list1)),
+ l2=1..nops(list2)) ];
+tal :=add(a_2m4p_qed(op(op(l1,list_tot))),l1=1..nops(list_tot));
+# lprint(tal);
+# list1 := permute([p1,p2,p3,p4,p5]);
+# tal :=add(tot(op(op(l1,list1)),p6),l1=1..nops(list1));
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"total = %a\n",tal);
+close(fd);
+quit;
+list1 := permute([p1,p2,p3]);
+list2 := permute([p4,p5,p6]);
+list_tot := [ seq( seq([op(op(l1,list1)),op(op(l2,list2))],l1=1..nops(list1)),
+ l2=1..nops(list2)) ];
+tal :=add(a_3m3p_qed(op(op(l1,list_tot))),l1=1..nops(list_tot));
+# lprint(tal);
+# list1 := permute([p1,p2,p3,p4,p5]);
+# tal :=add(tot(op(op(l1,list1)),p6),l1=1..nops(list1));
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"total = %a\n",tal);
+close(fd);
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r2.m (revision 119)
@@ -0,0 +1,155 @@
+#
+# rang 2
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+I6_4p1m := x/(A+B*y)*L_z[l1]*L_z[l2];
+#
+I6_4p1m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p1m));
+I6_4p1m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p1m);
+#
+I6_4p1m := I6_4p1m;
+# I6_4p1m := algsubs(A+B=C+D*x,I6_4p1m,exact);
+I6_4p1m := algsubs(A+B=C*(1-x),I6_4p1m,exact);
+I6_4p1m := subs(A=C+F*x,B=x*G,I6_4p1m);
+I6_4p1m := expand(I6_4p1m);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -(1-z)*s13
+I6_4p1m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p1m);
+I6_4p1m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p1m);
+I6_4p1m := expand(int(I6_4p1m,x=0..1));
+I6_4p1m := I6_4p1m;
+#
+reste := I6_4p1m:
+result := 0;
+set_ln := indets(I6_4p1m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p1m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p1m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2] := result;
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = (1-z)*s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par4)\n");
+for l2 from l1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l2);
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),C = c_var,F = f_var,
+ E = e_var,-result1[l1,l2]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+quit;
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(par3_glob)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par4_glob)\n");
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+ expr := result1[l1,l2];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+# d5 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d5));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+# d4 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d4));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ res_fin[l1,l2] := (dresult+dreste)/t2;
+ res_fin[l1,l2] := subs(ln=z_log,res_fin[l1,l2]);
+ fprintf(fd,"case(%d)\n",l2);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2]));
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_8d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_8d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_8d_r0.m (revision 119)
@@ -0,0 +1,116 @@
+########################## I_4^8 #############################################
+l1 := 0;
+I8_4p1m := x^2*y*(ln(x)+ln(y)+ln(A+B*y));
+# I8_4p1m := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p1m := x^2*y*(ln(x)+ln(y));
+# I8_4p1m := x^2*y*(ln(A+B*y));
+I8_4p1m:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p1m));
+I8_4p1m:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p1m);
+I8_4p1m:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p1m);
+I8_4p1m:=applyrule(ln(y)='I_log(0,0,1)',I8_4p1m);
+I8_4p1m := expand(int(I8_4p1m,y=0..1));
+#
+# I8_4p1m := algsubs(A+B=C+D*x,I8_4p1m,exact);
+I8_4p1m := algsubs(A+B=C*(1-x),I8_4p1m,exact);
+I8_4p1m := subs(A=C+F*x,B=x*G,I8_4p1m);
+I8_4p1m := expand(I8_4p1m);
+# C = (1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -(1-z)*s13
+I8_4p1m:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p1m);
+I8_4p1m:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p1m);
+I8_4p1m:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p1m);
+I8_4p1m:=applyrule(ln(x)='I_log(0,0,1)',I8_4p1m);
+I8_4p1m := expand(int(I8_4p1m,x=0..1));
+I8_4p1m := I8_4p1m;
+# quit;
+I8_4p1m := subs(C=-C,F=-F,G=-G,D=-D,I8_4p1m);
+#
+reste := I8_4p1m:
+result := 0;
+set_ln := indets(I8_4p1m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p1m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p1m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+truc1:=subs(ln(-C) = ln(1-z)+z_log(-s13),C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+truc1:=factor(truc1):
+fprintf(fd,"fg = %a\n",truc1);
+#
+quit
+# pole pour F=0
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ res_fin[l1] := (dresult+dreste)/t2;
+ res_fin[l1] := subs(ln=z_log,res_fin[l1]);
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+ close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r0.m (revision 119)
@@ -0,0 +1,88 @@
+I4_3p3m := 1/(A+B*y);
+#
+I4_3p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I4_3p3m));
+I4_3p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I4_3p3m);
+#
+I4_3p3m := I4_3p3m;
+I4_3p3m := algsubs(A+B=H,I4_3p3m,exact);
+I4_3p3m := subs(A=C,B=D,I4_3p3m);
+I4_3p3m := expand(I4_3p3m);
+# C = z*s13+(1-z)*s23
+# D = z*(1-z)*s12-z*s13-(1-z)*s23
+# H = z*(1-z)*s12
+#
+reste := I4_3p3m:
+result := 0;
+set_ln := indets(I4_3p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ elif (func = ln(H)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I4_3p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+#
+# separation
+result1[l1] := result;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s13+(1-z)*s23\n");
+fprintf(fd,"d_var = z*(1-z)*s12-z*s13-(1-z)*s23\n");
+fprintf(fd,"h_var = z*(1-z)*s12\n");
+truc1:=subs(C = c_var,D = d_var,
+ ln(H) = ln(z)+ln(1-z)+z_log(s12),
+ H = h_var,result1[l1]):
+truc1:=factor(truc1):
+fprintf(fd,"fg = %a\n",truc1);
+#
+quit;
+# pole pour F=0
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d1):
+ dtot := factor(subs(z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ res_fin := w12*z_log(t1*s23/t2^2)
+ - tq1*q(1,(t2*t3-t1*s23)/t2/t3,sign_arg);
+ res_fin := res_fin/t2;
+# fprintf(fd,"residue1 = %a\n",res_fin);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin));
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r1.m (revision 119)
@@ -0,0 +1,196 @@
+# z1
+# I6_4p3m := x*(1-x)/(A+B*y);
+# z2
+# I6_4p3m := x^2*y*z/(A+B*y);
+# z3
+# I6_4p3m := x^2*y*(1-z)/(A+B*y);
+# z4
+# I6_4p3m := x^2*(1-y)/(A+B*y);
+# z1^3
+# I6_4p3m := x*(1-x)^3/(A+B*y);
+# z2^3
+# I6_4p3m := x*(x*y*z)^3/(A+B*y);
+# z1*z2*z3
+# I6_4p3m := x*(1-x)*x*y*z*x*y*(1-z)/(A+B*y);
+#
+#
+# rang 1
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 1;
+I6_4p3m := x/(A+B*y)*L_z[l1];
+#
+I6_4p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p3m));
+I6_4p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p3m);
+#
+I6_4p3m := I6_4p3m;
+I6_4p3m := algsubs(A+B=C+D*x,I6_4p3m,exact);
+I6_4p3m := subs(A=C+F*x,B=x*G,I6_4p3m);
+I6_4p3m := expand(I6_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p3m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p3m);
+I6_4p3m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p3m);
+I6_4p3m := expand(int(I6_4p3m,x=0..1));
+I6_4p3m := I6_4p3m;
+#
+reste := I6_4p3m:
+result := 0;
+set_ln := indets(I6_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+end do:
+# test1:=factor(test1);
+# wreste := test1;
+# wresult := 0;
+# set_ln := indets(test1,'specfunc(anything,ln)');
+# for func in set_ln do
+# if (func = ln(C)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# elif (func = ln(H)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=H-G-F,F=D-G,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# elif (func = ln(E)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=E-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# else
+# ctemp := factor(coeff(test1,func,1));
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=H-G-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# end if;
+# wresult := wresult + ctemp*func;
+# end do;
+# wreste := subs(C=H-G-F,numer(wreste))/denom(wreste);
+# wreste := factor(wreste);
+# wreste;
+# wresult;
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-result1[l1]):
+ truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-(result2[l1]+reste_f[l1])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+fprintf(fd,"select case(glob_par4)\n");
+for l1 from 1 to 4 do
+# l1 := 4;
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c3 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3));
+ c2 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2));
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ tq2 :=factor(tq1+dreste);
+ qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+ *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2;
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_6d_r0.m (revision 119)
@@ -0,0 +1,122 @@
+########################## I_4^8 #############################################
+l1 := 0;
+I6_3p3m := y*(ln(y)+ln(A+B*y));
+# I6_3p3m := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I6_3p3m := x^2*y*(ln(x)+ln(y));
+# I6_3p3m := x^2*y*(ln(A+B*y));
+I6_3p3m:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I6_3p3m));
+I6_3p3m:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I6_3p3m);
+I6_3p3m:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I6_3p3m);
+I6_3p3m:=applyrule(ln(y)='I_log(0,0,1)',I6_3p3m);
+I6_3p3m := expand(int(I6_3p3m,y=0..1));
+#
+I6_3p3m := algsubs(A+B=H,I6_3p3m,exact);
+I6_3p3m := subs(A=C,B=D,I6_3p3m);
+I6_3p3m := expand(I6_3p3m);
+# C = z*s13+(1-z)*s23
+# D = z*(1-z)*s12-z*s13-(1-z)*s23
+# H = z*(1-z)*s12
+#
+I6_3p3m := subs(C=-C,H=-H,D=-D,I6_3p3m);
+reste := I6_3p3m:
+result := 0;
+set_ln := indets(I6_3p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I6_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ elif (func = ln(-H)) then
+ ctemp := coeff(I6_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_3p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s13+(1-z)*s23\n");
+fprintf(fd,"d_var = z*(1-z)*s12-z*s13-(1-z)*s23\n");
+fprintf(fd,"h_var = z*(1-z)*s12\n");
+truc1:=subs(C = c_var,D = d_var,
+ ln(-H) = ln(z)+ln(1-z)+z_log(-s12),
+ H = h_var,result1[l1]):
+truc1:=factor(truc1):
+fprintf(fd,"fg = %a\n",truc1);
+#
+quit;
+# pole pour F=0
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(-t3/t2),1);
+ w2 := coeff(dresult,ln(-t1*s23/t2^2),1);
+# factor(subs(s23=0,dreste));
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ tq2 := factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := w12*z_log(-t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+ *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2;
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+ close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r2.m (revision 119)
@@ -0,0 +1,163 @@
+#
+# rang 2
+L_z := [z*y,y*(1-z),(1-y)];
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+# l1 := 3;
+# l2 := 3;
+I4_3p3m := 1/(A+B*y)*L_z[l1]*L_z[l2];
+#
+I4_3p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I4_3p3m));
+I4_3p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I4_3p3m);
+#
+I4_3p3m := I4_3p3m;
+I4_3p3m := algsubs(A+B=H,I4_3p3m,exact);
+I4_3p3m := subs(A=C,B=D,I4_3p3m);
+I4_3p3m := expand(I4_3p3m);
+# C = z*s13+(1-z)*s23
+# D = z*(1-z)*s12-z*s13-(1-z)*s23
+# H = z*(1-z)*s12
+#
+reste := I4_3p3m:
+result := 0;
+set_ln := indets(I4_3p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ elif (func = ln(H)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I4_3p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2] := result;
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s13+(1-z)*s23\n");
+fprintf(fd,"d_var = z*(1-z)*s12-z*s13-(1-z)*s23\n");
+fprintf(fd,"h_var = z*(1-z)*s12\n");
+fprintf(fd,"select case(par2)\n");
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3)\n");
+for l2 from l1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l2);
+ truc1:=subs(C = c_var,D = d_var,
+ ln(H) = ln(z)+ln(1-z)+z_log(s12),
+ H = h_var,result1[l1,l2]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+quit;
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(glob_par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(glob_par4)\n");
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+ expr := result1[l1,l2];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+# d5 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d5));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+# d4 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d4));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(2*(t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2));
+ tq2 :=factor(tq1/2+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1,l2] := (w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^3/t2^3/t3^3)
+ *q(3,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2)/t2;
+ fprintf(fd,"case(%d)\n",l2);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2]));
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_8d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_8d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_8d_r1.m (revision 119)
@@ -0,0 +1,189 @@
+########################## I_4^8 #############################################
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 2;
+#
+I8_4p3m := x^2*y*(ln(x)+ln(y)+ln(A+B*y))*L_z[l1];
+# I8_4p3m := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p3m := x^2*y*(ln(x)+ln(y));
+# I8_4p3m := x^2*y*(ln(A+B*y));
+I8_4p3m:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p3m));
+I8_4p3m:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p3m);
+I8_4p3m:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p3m);
+I8_4p3m:=applyrule(ln(y)='I_log(0,0,1)',I8_4p3m);
+I8_4p3m := expand(int(I8_4p3m,y=0..1));
+#
+I8_4p3m := algsubs(A+B=C+D*x,I8_4p3m,exact);
+I8_4p3m := subs(A=C+F*x,B=x*G,I8_4p3m);
+I8_4p3m := expand(I8_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I8_4p3m:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p3m);
+I8_4p3m:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p3m);
+I8_4p3m:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p3m);
+I8_4p3m:=applyrule(ln(x)='I_log(0,0,1)',I8_4p3m);
+I8_4p3m := expand(int(I8_4p3m,x=0..1));
+I8_4p3m := I8_4p3m;
+# qw1 := x^2*y*(ln(x)+ln(y)+ln(C+F*x+x*G*y));
+# qw2 := int(qw1,y=0..1);
+# verif := int(qw2,x=0..1);
+# verif := algsubs(F+G=D,verif,exact);
+# verif := factor(I8_4p3m-verif);
+# quit;
+# I8_4p3m := subs(ln(C)=ln(TC)-ln(C+D),ln(C+F)=ln(TCF)-ln(C+D),I8_4p3m);
+I8_4p3m := subs(C=-C,F=-F,G=-G,D=-D,I8_4p3m);
+#
+reste := I8_4p3m:
+result := 0;
+set_ln := indets(I8_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(-C-D)) then
+ ctemp := coeff(I8_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,D,-3)/D^3+coeff(result,D,-2)/D^2
+ +coeff(result,D,-1)/D;
+result2[l1] := coeff(result,G,-3)/G^3+coeff(result,G,-2)/G^2
+ +coeff(result,G,-1)/G;
+# result1[l1] := coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+# result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+result1[l1] := collect(subs(G=D-F,result1[l1]),[ln(-C),ln(-H),ln(-E)],factor);
+result2[l1] := result2[l1]+reste_f[l1];
+result2[l1] := collect(subs(D=G+F,result2[l1]),[ln(-C),ln(-H),ln(-E)],factor);
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+ H = h_var,-result1[l1]):
+ truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+ H = h_var,-(result2[l1])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(glob_par4)\n");
+for l1 from 1 to 4 do
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+# dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(-t3/t2),1);
+ w2 := coeff(dresult,ln(-t1*s23/t2^2),1);
+# factor(subs(s23=0,dreste));
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(2*(t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2));
+ tq2 :=factor(tq1/2+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := (w12*z_log(-t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^3/t2^3/t3^3)
+ *q(3,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2);
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"temp0 = %a\n",subs(s23=glob_s23,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r3.m (revision 119)
@@ -0,0 +1,310 @@
+result1 := table(symmetric);
+result2 := table(symmetric);
+reste_f := table(symmetric);
+#
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+I6_4p3m := x/(A+B*y)*L_z[l1]*L_z[l2]*L_z[l3];
+#
+I6_4p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p3m));
+I6_4p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p3m);
+#
+I6_4p3m := I6_4p3m;
+I6_4p3m := algsubs(A+B=C+D*x,I6_4p3m,exact);
+I6_4p3m := subs(A=C+F*x,B=x*G,I6_4p3m);
+I6_4p3m := expand(I6_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p3m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p3m);
+I6_4p3m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p3m);
+I6_4p3m := expand(int(I6_4p3m,x=0..1));
+I6_4p3m := I6_4p3m;
+#
+reste := I6_4p3m:
+result := 0;
+set_ln := indets(I6_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+factor(subs(z=1,reste));
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2,l3] := coeff(result,D,-4)/D^4+coeff(result,D,-3)/D^3
+ +coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+result2[l1,l2,l3] := coeff(result,G,-4)/G^4+coeff(result,G,-3)/G^3
+ +coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+reste_f[l1,l2,l3] := factor(result-result1[l1,l2,l3]-result2[l1,l2,l3]);
+result1[l1,l2,l3] := collect(subs(G=D-F,result1[l1,l2,l3]),[ln(C),ln(H),ln(E)],factor);
+result2[l1,l2,l3] := result2[l1,l2,l3]+reste_f[l1,l2,l3];
+result2[l1,l2,l3] := collect(subs(D=G+F,result2[l1,l2,l3]),[ln(C),ln(H),ln(E)],factor);
+# reste_f[l1,l2,l3] := collect(reste_f[l1,l2,l3],[ln(C),ln(H),ln(E)],factor);
+end do:
+end do:
+end do:
+# quit;
+# l1:=1;
+# l2:=1;
+# result1[2,1,1];
+# result1[1,1,2];
+# qw1 := add(result1[l1,l2,l3]+result2[l1,l2,l3],l3=1..4):
+# # factor(qw1);
+# collect(qw1,[ln(C),ln(H),ln(E)],factor);
+# reste := qw1:
+# result := 0;
+# set_ln := indets(qw1,'specfunc(anything,ln)');
+# for func in set_ln do
+# if (func = ln(C)) then
+# ctemp := coeff(I6_4p3m,func,1);
+# reste := factor(reste-ctemp*func);
+# ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# elif (func = ln(E)) then
+# ctemp := coeff(I6_4p3m,func,1);
+# reste := factor(reste-ctemp*func);
+# ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# elif (func = ln(H)) then
+# else
+# ctemp := factor(coeff(I6_4p3m,func,1));
+# reste := factor(reste-ctemp*func);
+# end if;
+# result := result + ctemp*func;
+# end do:
+# for l3 from 1 to 4 do
+# l1:=1;
+# l2:=1;
+# # l3:=2;
+# r1:=result1[l1,l2,l3];
+# r2:=result2[l1,l2,l3];
+# r3:=reste_f[l1,l2,l3];
+# l2:=2;
+# r1:=result1[l1,l2,l3];
+# r2:=result2[l1,l2,l3];
+# r3:=reste_f[l1,l2,l3];
+# l2:=3;
+# r1:=result1[l1,l2,l3];
+# r2:=result2[l1,l2,l3];
+# r3:=reste_f[l1,l2,l3];
+# l2:=4;
+# r1:=result1[l1,l2,l3];
+# r2:=result2[l1,l2,l3];
+# r3:=reste_f[l1,l2,l3];
+# end do;
+# quit;
+# test1:=factor(test1);
+# wreste := test1;
+# wresult := 0;
+# set_ln := indets(test1,'specfunc(anything,ln)');
+# for func in set_ln do
+# if (func = ln(C)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# elif (func = ln(H)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=H-G-F,F=D-G,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# elif (func = ln(E)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=E-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# else
+# ctemp := factor(coeff(test1,func,1));
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=H-G-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# end if;
+# wresult := wresult + ctemp*func;
+# end do;
+# wreste := subs(C=H-G-F,numer(wreste))/denom(wreste);
+# wreste := factor(wreste);
+# wreste;
+# wresult;
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l3);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-result1[l1,l2,l3]):
+# truc2:=subs(C = c_var,F = f_var,
+# G = g_var,D = d_var,
+# E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+# H = h_var,-(result2[l1,l2,l3]+reste_f[l1,l2,l3])):
+ truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-result2[l1,l2,l3]):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+# quit;
+#
+fd:=fopen("test.res",APPEND);
+# pole pour F=0
+fprintf(fd,"select case(glob_par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(glob_par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(glob_par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+ expr := result1[l1,l2,l3];
+ deg := -ldegree(expr,F);
+ c7 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-7)));
+ c6 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-6)));
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d7 := subs(diff(Cf(z),z,z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z,z)=0,diff(c7,z,z,z,z,z,z));
+ d6 := subs(diff(Cf(z),z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z)=0,diff(c6,z,z,z,z,z));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d7/720/Fprime^6+d6/120/Fprime^5+d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*((t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2/2+((t2*t3-t1*s23)/t2/t3)^3/3));
+ tq2 :=factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1,l2,l3] := (w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^4/t2^4/t3^4)
+ *q(4,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2)/t2;
+#
+# CodeGeneration[Fortran](tq2);
+ fprintf(fd,"case(%d)\n",l3);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2,l3]));
+close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2,l3]),filename="test.res");
+# # codegen[fortran](tq2,filename="test_for.res");
+fd:=fopen("test.res",APPEND);
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r0.m (revision 119)
@@ -0,0 +1,37 @@
+#
+# rang 0
+#
+#
+#
+F := (x,y) -> 1;
+result := Beta_x(1,1)*Beta_y(1,1);
+result := expand(result);
+result_dv2 := coeff(result,epsilon,-2);
+result_dv1 := coeff(result,epsilon,-1);
+result_fin := factor(result-result_dv1/epsilon-result_dv2/epsilon^2);
+result_div2 := -result_dv2/m3s;
+result_div1 := -(result_dv1 + result_dv2*ln(m3s))/m3s;
+I4_3p1m_1mi := -( result_fin + result_dv1*ln(m3s) + result_dv2*ln(m3s)^2/2);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2 := I4_3p1m_1mi/m3s;
+#
+# quit;
+#
+#
+fd:=fopen("test.res",WRITE);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_6d_r0.m (revision 119)
@@ -0,0 +1,39 @@
+#
+# rang 0
+#
+div := expand(subs(y=1,1));
+F := (x,y) -> 1;
+result_dv1 := -y*F(x,y);
+result_dv1 := int(result_dv1,x=0..1);
+result_dv1 := int(result_dv1,y=0..1);
+result_div1 := collect(result_dv1,[Li2,ln],factor);
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+term1 := -2*y*F(x,y)*ln(x) ;
+term2 := -2*y*F(x,y)*ln(y) ;
+term3 := -y*F(x,y)*ln(m3s);
+I4_3p1m_1mi := -(term1 + term2 + term3);
+I4_3p1m_1mi := applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := int(I4_3p1m_1mi,y=0..1);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2 := I4_3p1m_1mi;
+#
+# quit;
+#
+#
+fd:=fopen("test.res",WRITE);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r2.m (revision 119)
@@ -0,0 +1,60 @@
+#
+# rang 1
+#
+# L_z := [x*y,(1-x)*y,1-y];
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+# l1 := 2;
+# l2 := 2;
+F := unapply(L_z[l1]*L_z[l2],x,y);
+result := F(x,y);
+# on introduit deux variables mux = 1-x et umy = 1-y
+result := algsubs(1-x=umx,result,exact);
+result := algsubs(1-y=umy,result,exact);
+# puis om multiplie par x*umx*y*umy
+result := result*x*umx*y*umy;
+result := applyrule(y^n::integer*umy^m::integer='Beta_y(n,m)',
+ result);
+result := applyrule(x^n::integer*umx^m::integer='Beta_x(n,m)',
+ result);
+result := expand(result);
+result_dv2 := coeff(result,epsilon,-2);
+result_dv1 := coeff(result,epsilon,-1);
+result_fin := factor(result-result_dv1/epsilon-result_dv2/epsilon^2);
+result_fin := factor(subs(epsilon=0,result_fin));
+result_div2[l1,l2] := -result_dv2/m3s;
+result_div1[l1,l2] := -(result_dv1 + result_dv2*ln(m3s))/m3s;
+I4_3p1m_1mi := -( result_fin + result_dv1*ln(m3s) + result_dv2*ln(m3s)^2/2);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2[l1,l2] := I4_3p1m_1mi/m3s;
+#
+end do;
+end do;
+# quit;
+#
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+ fprintf(fd,"case(%d,%d)\n",l1,l2);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1,l2]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2[l1,l2]):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1,l2]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
+end do;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r1.m (revision 119)
@@ -0,0 +1,113 @@
+#
+# rang 1
+L_z := [x*y,(1-x)*y,1-y];
+#
+# A = m3^2
+# B = - m3^2 - Ap
+for l1 from 1 to 3 do
+# l1 := 2;
+#
+div := expand(subs(y=1,L_z[l1]));
+c := coeffs(div,x,'t');
+L_c := [c];
+L_t := [t];
+tot_div := 0;
+tot_ndiv := 0;
+for i from 1 to nops(L_t) do
+tot_div := tot_div - he(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+tot_ndiv := tot_ndiv - hf(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+end do;
+result_div[l1] := -tot_div;
+result_ndiv[l1] := -tot_ndiv;
+#
+term := y*L_z[l1]/(A+B*y);
+term0 := subs(y=1,term);
+I4_3p2m_1mi := factor( (term - term0)/(1-y) );
+#
+I4_3p2m_1mi := applyrule(y^n::integer*(A::symbol+B::symbol*y)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,1,A,B)',I4_3p2m_1mi);
+# Ap = C*x + D*(1-x) - m3^2
+# B = - m3^2- Ap
+# C = p1^2
+# D = p3^2
+I4_3p2m_1mi := algsubs(A+B=-C*x-D*(1-x)+m3s,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(A=m3s,B=-C*x-D*(1-x),I4_3p2m_1mi);
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'ln(anything)',f->ln(collect(op(1,f),x)) );
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'`+`',f->collect(f,x) );
+#
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D-m3s=-D1,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D=-D2,I4_3p2m_1mi,exact);
+result1[l1] := -I4_3p2m_1mi;
+#
+I4_3p2m_1mi := subs(x=(-D2-D)/F,I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(D1=-x*F-D+m3s,D2=-x*F-D,I4_3p2m_1mi);
+I4_3p2m_1mi := algsubs(D-m3s=E,I4_3p2m_1mi,exact);
+#
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='K_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+#
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule((A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='I_sans_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(x^n::posint*(C::anything+D::anything*x)^(m::negint) = 'I_sur_y(n,-m,C,D)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule((C::anything+D::anything*x)^(m::negint) = 'I_sur_y(0,-m,C,D)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := subs(F=C-D,E=D-m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := subs(C=CT+m3s,D=DT+m3s,I4_3p2m_1mi);
+rat_I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result_rat[l1] := -rat_I4_3p2m_1mi;
+ff := (x,n) -> add((x)^i/i,i=1..n-1);
+I4_3p2m_1mi := applyrule(ln(-C::anything)*(C::anything+m3s)^n::negint = ln(m3s)*(C+m3s)^n-C^n*(q(-n,1+m3s/C,-'s||C')-(1+m3s/C)^n*'ff(1+m3s/C,-n)'),I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln,q],factor);
+result2[l1] := -I4_3p2m_1mi;
+#
+# Li2 := x -> polylog(2,x);
+# test := factor(lambda^2*subs(C=D+lambda,I4_3p2m_1mi));
+# t1:=convert(taylor(test,lambda=0,3),polynom);
+# collect(t1,lambda,factor);
+end do;
+#
+result1[3];
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"d1_var=-z*(s13-s23)-s23\n");
+fprintf(fd,"d2_var=-z*(s13-s23)-s23-m3_sq\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(D1 = d1_var, D2 = d2_var,
+ m3s = m3_sq,x = z,result1[l1]):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+#
+# pour le programme fortran
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"sc13=sign(un,s13+m3_sq)\n");
+fprintf(fd,"sc23=sign(un,s23+m3_sq)\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(sCT = sc13,sDT = sc23,CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result2[l1]):
+ trucp1:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_rat[l1]):
+ trucp1:=applyrule(zdilog(A::anything)=0,trucp1):
+ trucp1:=applyrule(z_log(A::anything)=0,trucp1):
+ truc2:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div[l1]):
+ truc3:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_ndiv[l1]):
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+ fprintf(fd,"a3p2m_1mi_div(3:4) = %a\n",truc2);
+# fprintf(fd,"f3p2m_1mi(5:6) = %a + (/ real(c_temp,ki),aimag(c_temp) /)\n",truc3);
+ fprintf(fd,"a3p2m_1mi_div(5:6) = %a \n",truc3);
+end do;
+fprintf(fd,"end select\n");
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_6d_r1.m (revision 119)
@@ -0,0 +1,109 @@
+#
+# rang 1
+#
+L_z := [x*y,(1-x)*y,1-y];
+#
+for l1 from 1 to 3 do
+# l1 := 3;
+#
+num := L_z[l1];
+tot_div := int(y*num,y=0..1);
+tot_div := int(tot_div,x=0..1);
+result_div[l1] := -tot_div;
+result_ndiv[l1] := 0;
+# A = m3^2
+# B = - m3^2 - Ap
+I4_3p2m_1mi := y*(ln(A+B*y)+ln(1-y))*num;
+#
+I4_3p2m_1mi := applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(y^n::integer*ln(1-y)='I_log(n,1,-1)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(ln(1-y)='I_log(0,1,-1)',I4_3p2m_1mi);
+# Ap = C*x + D*(1-x) - m3^2
+# B = - m3^2- Ap
+# C = p1^2
+# D = p2^2
+I4_3p2m_1mi := algsubs(A+B=-C*x-D*(1-x)+m3s,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := subs(A=m3s,B=-C*x-D*(1-x),I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'ln(anything)',f->ln(collect(op(1,f),x)) );
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'`+`',f->collect(f,x) );
+#
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D-m3s=-D1,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D=-D2,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := subs(x=(-D2-D)/(C-D),I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+I4_3p2m_1mi := algsubs(C+D2=F*umx,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(D+D2=-F*x,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := subs(umx=(1-x),I4_3p2m_1mi);
+result1[l1] := I4_3p2m_1mi;
+#
+I4_3p2m_1mi := subs(x=(-D2-D)/F,expand(I4_3p2m_1mi));
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(D1=-x*F-D+m3s,D2=-x*F-D,I4_3p2m_1mi);
+I4_3p2m_1mi := algsubs(D-m3s=E,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(x^n::integer*ln(A::anything+B::anything*x)='I_log(n,A,B)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)='I_log(0,A,B)',I4_3p2m_1mi);
+#
+I4_3p2m_1mi := applyrule(x^n::integer*(A::anything+B::anything*x)^m::negint='I_sur_y(n,-m,A,B)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule((A::anything+B::anything*x)^m::negint='I_sur_y(0,-m,A,B)',I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+#
+I4_3p2m_1mi := subs(F=C-D,E=D-m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := subs(C=CT+m3s,D=DT+m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := int(I4_3p2m_1mi,x=0..1);
+rat_I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result_rat[l1] := rat_I4_3p2m_1mi;
+ff := (x,n) -> add((x)^i/i,i=1..n-1);
+I4_3p2m_1mi := applyrule(ln(-C::anything)*(C::anything+m3s)^n::negint = ln(m3s)*(C+m3s)^n-C^n*(q(-n,1+m3s/C,-'s||C')-(1+m3s/C)^n*'ff(1+m3s/C,-n)'),I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln,q],factor);
+# I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result2[l1] := I4_3p2m_1mi;
+#
+end do;
+# quit;
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"d1_var=-z*(s13-s23)-s23\n");
+fprintf(fd,"d2_var=-z*(s13-s23)-s23-m3_sq\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(D1 = d1_var, D2 = d2_var,
+ m3s = m3_sq,x = z,result1[l1]):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+#
+# pour le programme fortran
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"sc13=sign(un,s13+m3_sq)\n");
+fprintf(fd,"sc23=sign(un,s23+m3_sq)\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(sCT = sc13,sDT = sc23,CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result2[l1]):
+ trucp1:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_rat[l1]):
+ trucp1:=applyrule(zdilog(A::anything)=0,trucp1):
+ trucp1:=applyrule(z_log(A::anything)=0,trucp1):
+ truc2:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div[l1]):
+ truc3:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_ndiv[l1]):
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+ fprintf(fd,"f3p2m_1mi(3:4) = %a\n",truc2);
+# fprintf(fd,"f3p2m_1mi(5:6) = %a + (/ real(c_temp,ki),aimag(c_temp) /)\n",truc3);
+ fprintf(fd,"f3p2m_1mi(5:6) = %a \n",truc3);
+end do;
+fprintf(fd,"end select\n");
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r3.m (revision 119)
@@ -0,0 +1,155 @@
+#
+# rang 1
+# L_z := [1-y,x*y,(1-x)*y];
+L_z := [x*y,(1-x)*y,1-y];
+#
+# A = m3^2
+# B = - m3^2 - Ap
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+# l2 := 1;
+# l3 := 1;
+#
+num := L_z[l1]*L_z[l2]*L_z[l3];
+#
+div := expand(subs(y=1,num));
+c := coeffs(div,x,'t');
+L_c := [c];
+L_t := [t];
+tot_div := 0;
+tot_ndiv := 0;
+for i from 1 to nops(L_t) do
+tot_div := tot_div - he(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+tot_ndiv := tot_ndiv - hf(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+end do;
+result_div[l1,l2,l3] := -tot_div;
+result_ndiv[l1,l2,l3] := -tot_ndiv;
+#
+term := y*num/(A+B*y);
+term0 := subs(y=1,term);
+I4_3p2m_1mi := factor( (term - term0)/(1-y) );
+#
+I4_3p2m_1mi := applyrule(y^n::integer*(A::symbol+B::symbol*y)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,1,A,B)',I4_3p2m_1mi);
+# Ap = C*x + D*(1-x) - m3^2
+# B = - m3^2- Ap
+# C = p1^2
+# D = p3^2
+I4_3p2m_1mi := algsubs(A+B=-C*x-D*(1-x)+m3s,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(A=m3s,B=-C*x-D*(1-x),I4_3p2m_1mi);
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'ln(anything)',f->ln(collect(op(1,f),x)) );
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'`+`',f->collect(f,x) );
+#
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D-m3s=-D1,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D=-D2,I4_3p2m_1mi,exact);
+result1[l1,l2,l3] := -I4_3p2m_1mi;
+#
+I4_3p2m_1mi := subs(x=(-D2-D)/F,I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(D1=-x*F-D+m3s,D2=-x*F-D,I4_3p2m_1mi);
+I4_3p2m_1mi := algsubs(D-m3s=E,I4_3p2m_1mi,exact);
+#
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='K_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+#
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule((A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='I_sans_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(x^n::posint*(C::anything+D::anything*x)^(m::negint) = 'I_sur_y(n,-m,C,D)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule((C::anything+D::anything*x)^(m::negint) = 'I_sur_y(0,-m,C,D)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := subs(F=C-D,E=D-m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := subs(C=CT+m3s,D=DT+m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := int(I4_3p2m_1mi,x=0..1);
+# test1 := -I4_3p2m_1mi;
+rat_I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result_rat[l1,l2,l3] := -rat_I4_3p2m_1mi;
+ff := (x,n) -> add((x)^i/i,i=1..n-1);
+I4_3p2m_1mi := applyrule(ln(-C::anything)*(C::anything+m3s)^n::negint = ln(m3s)*(C+m3s)^n-C^n*(q(-n,1+m3s/C,-'s||C')-(1+m3s/C)^n*'ff(1+m3s/C,-n)'),I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln,q],factor);
+# I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result2[l1,l2,l3] := -I4_3p2m_1mi;
+#
+# q := proc(n,x,s)
+# local r;
+# if (n = 1) then
+# r := ln(1-x)/x;
+# else
+# r := (q(n-1,x,s)+1/(n-1))/x;
+# end if;
+# return(r);
+# end proc;
+# test := result2[l1,l2,l3];
+# test:=subs(ln(-m3s/CT) = ln(m3s)-ln(-CT),ln(-m3s/DT) = ln(m3s)-ln(-DT),test);
+# verif := factor(test1-test);
+# Li2 := x -> polylog(2,x);
+# test := factor(lambda^2*subs(C=D+lambda,I4_3p2m_1mi));
+# t1:=convert(taylor(test,lambda=0,3),polynom);
+# collect(t1,lambda,factor);
+end do;
+end do;
+end do;
+# result_div[l1,l2,l3];
+# result_ndiv[l1,l2,l3];
+# result1[l1,l2,l3];
+# result2[l1,l2,l3];
+# quit;
+#
+# result1[3];
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"d1_var=-z*(s13-s23)-s23\n");
+fprintf(fd,"d2_var=-z*(s13-s23)-s23-m3_sq\n");
+fprintf(fd,"select case(par1)\n");
+for l1 from 1 to 3 do
+fprintf(fd,"case(%d)\n",l1);
+fprintf(fd,"select case(par2)\n");
+for l2 from l1 to 3 do
+fprintf(fd,"case(%d)\n",l2);
+fprintf(fd,"select case(par3)\n");
+for l3 from l2 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l3);
+ truc1:=subs(D1 = d1_var, D2 = d2_var,
+ m3s = m3_sq,x = z,result1[l1,l2,l3]):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+#
+# pour le programme fortran
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"sc13=sign(un,s13+m3_sq)\n");
+fprintf(fd,"sc23=sign(un,s23+m3_sq)\n");
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d,%d,%d)\n",l1,l2,l3);
+ truc1:=subs(sCT = sc13,sDT = sc23,CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result2[l1,l2,l3]):
+ trucp1:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_rat[l1,l2,l3]):
+ trucp1:=applyrule(zdilog(A::anything)=0,trucp1):
+ trucp1:=applyrule(z_log(A::anything)=0,trucp1):
+ truc2:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div[l1,l2,l3]):
+ truc3:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_ndiv[l1,l2,l3]):
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+ fprintf(fd,"a3p2m_1mi_div(3:4) = %a\n",truc2);
+# fprintf(fd,"f3p2m_1mi(5:6) = %a + (/ real(c_temp,ki),aimag(c_temp) /)\n",truc3);
+ fprintf(fd,"a3p2m_1mi_div(5:6) = %a \n",truc3);
+end do;
+end do;
+end do;
+fprintf(fd,"end select\n");
+#
Index: 95/branches/golem95_without_olo_cmake/tool/poid_gauss.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/poid_gauss.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/poid_gauss.m (revision 119)
@@ -0,0 +1,105 @@
+PLog:=proc(n,x)
+ local res;
+ if (n=0) then
+ res := 1
+ elif (n=1) then
+ B := int(-ln(x)*x*PLog(0,x)^2,x=0..1)/int(-ln(x)*PLog(0,x)^2,x=0..1);
+ res := x-B
+ else
+ B := int(-ln(x)*x*PLog(n-1,x)^2,x=0..1)/int(-ln(x)*PLog(n-1,x)^2,x=0..1);
+ C := int(-ln(x)*x*PLog(n-1,x)*PLog(n-2,x),x=0..1)
+ /int(-ln(x)*PLog(n-2,x)^2,x=0..1);
+ res := (x-B)*PLog(n-1,x)-C*PLog(n-2,x);
+ end if;
+ RETURN(res);
+end proc;
+#
+fd := fopen("temp.dat",WRITE);
+# Digits:=16;
+Digits:=50;
+n:=10;
+# 1 Polynome de Legendre
+# 2 Polynome de Chebyshev
+# 3 Polynome de Laguerre
+# 4 Polynome de Othogonaux avec fonction poid (-ln(x))
+Choix := 1;
+#
+if (Choix = 1) then
+ rootP:=[fsolve(orthopoly[P](n,x)=0,x)];
+ set_ini := {seq(i,i=1..nops(rootP))};
+ for i from 1 to nops(set_ini) do
+ set_new := set_ini minus {i};
+ rt := mul((x-rootP[j])/(rootP[i]-rootP[j]),j = set_new);
+ rt2:=evalf(int(rt,x=-1..1));
+ weight[i]:=rt2;
+ end do:
+ str := "leg";
+elif (Choix = 2) then
+ rootP:=[fsolve(orthopoly[T](n,x)=0,x)];
+ set_ini := {seq(i,i=1..nops(rootP))};
+ for i from 1 to nops(set_ini) do
+ weight[i]:=evalf(Pi/n);
+ end do:
+ str := "che";
+elif (Choix = 3) then
+ rootP:=[fsolve(orthopoly[L](n,x)=0,x)];
+ set_ini := {seq(i,i=1..nops(rootP))};
+ for i from 1 to nops(set_ini) do
+ weight[i]:=evalf(rootP[i]/((n+1)^2*orthopoly[L](n+1,rootP[i])^2));
+ end do:
+ str := "lag";
+elif (Choix = 4) then
+ Poly := PLog(n,x);
+ rootP:=[fsolve(Poly=0,x)];
+ set_ini := {seq(i,i=1..nops(rootP))};
+ for i from 1 to nops(set_ini) do
+ set_new := set_ini minus {i};
+ rt := mul((x-rootP[j])/(rootP[i]-rootP[j]),j = set_new);
+ rt2:=evalf(int(-ln(x)*rt,x=0..1));
+ weight[i]:=rt2;
+ end do:
+ str := "log";
+end if;
+step := 2;
+fprintf(fd,"real(ki), dimension(%d) :: zero_%s_%d=(/&\n",n,str,n);
+for i from 1 by step to nops(set_ini) do
+ fprintf(fd," &");
+ k := i-1 mod step;
+ if (k=0) then
+ for l from 0 to (step-1) do
+ if ( (Choix = 1) or (Choix = 2) or (Choix = 4) ) then
+ fprintf(fd,"%.16fd0,",rootP[i+l]);
+ elif (Choix = 3) then
+# fprintf(fd,"%1.15e,",rootP[i+l]);
+ fprintf(fd,"%1.15e,",exp(-rootP[i+l]));
+ end if;
+ end do;
+ end if;
+ fprintf(fd,"&\n");
+end do:
+fprintf(fd," &/)\n");
+fprintf(fd,"real(ki), dimension(%d) :: weight_%s_%d=(/&\n",n,str,n);
+for i from 1 by step to nops(set_ini) do
+ fprintf(fd," &");
+ k := i-1 mod step;
+ if (k=0) then
+ for l from 0 to (step-1) do
+ if ( (Choix = 1) or (Choix = 2) ) then
+ fprintf(fd,"%.16fd0,",weight[i+l]);
+ elif ( (Choix = 3) or (Choix = 4) ) then
+ fprintf(fd,"%1.15e,",weight[i+l]);
+ end if;
+ end do;
+ end if;
+ fprintf(fd,"&\n");
+end do:
+fprintf(fd," &/)\n");
+# fprintf(fd,"zero(%d) = %.16fd0\n",i,rootP[i]);
+# fprintf(fd,"weight(%d) = %.16fd0\n",i,rt2);
+fclose(fd);
+test := 0;
+for i from 1 to nops(set_ini) do
+ test := test+weight[i]*rootP[i];
+end do:
+lprint("test=",test);
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r0.m (revision 119)
@@ -0,0 +1,98 @@
+I6_4p2mopp := x/(A+B*y);
+#
+I6_4p2mopp := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2mopp));
+I6_4p2mopp := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2mopp);
+#
+I6_4p2mopp := I6_4p2mopp;
+# I6_4p2mopp := algsubs(A+B=C+D*x,I6_4p2mopp,exact);
+I6_4p2mopp := algsubs(A+B=C*(1-x),I6_4p2mopp,exact);
+I6_4p2mopp := subs(A=C+F*x,B=x*G,I6_4p2mopp);
+I6_4p2mopp := expand(I6_4p2mopp);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -z*s12-(1-z)*s13
+I6_4p2mopp := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2mopp);
+I6_4p2mopp := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2mopp);
+I6_4p2mopp := expand(int(I6_4p2mopp,x=0..1));
+I6_4p2mopp := I6_4p2mopp;
+#
+reste := I6_4p2mopp:
+result := 0;
+set_ln := indets(I6_4p2mopp,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2mopp,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2mopp,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,ln(C),1)*ln(C);
+result2[l1] := coeff(result,ln(E),1)*ln(E);
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(flag)\n");
+truc1:=subs(C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+truc2:=subs(C = c_var,F = f_var,
+ E = e_var,-(result2[l1]+reste_f[l1])):
+fprintf(fd,"case(%d)\n",1);
+fprintf(fd,"fg = %a\n",truc2);
+fprintf(fd,"case(%d)\n",2);
+fprintf(fd,"fg = %a\n",truc1);
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c1 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z), coeff(expr,F,0));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d1):
+ dtot := factor(subs(z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+# res_fin := -dresult;
+ res_fin := dresult/t2;
+ res_fin := subs(ln=z_log,res_fin);
+ fprintf(fd,"temp0 = %a\n",res_fin);
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/mv.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/mv.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/mv.pl (revision 119)
@@ -0,0 +1,9 @@
+#/usr/bin/perl -w
+# chdir("src/quatre_point");
+chdir("src/trois_point");
+@l_file = glob("*.f90");
+foreach $name (@l_file) {
+ $old_name = $name;
+ $name =~ s/f90/F90/;
+ rename($old_name, $name);
+}
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_8d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_8d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_8d_r0.m (revision 119)
@@ -0,0 +1,124 @@
+########################## I_4^8 #############################################
+l1 := 0;
+I8_4p2mopp := x^2*y*(ln(x)+ln(y)+ln(A+B*y));
+# I8_4p2mopp := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p2mopp := x^2*y*(ln(x)+ln(y));
+# I8_4p2mopp := x^2*y*(ln(A+B*y));
+I8_4p2mopp:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p2mopp));
+I8_4p2mopp:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(ln(y)='I_log(0,0,1)',I8_4p2mopp);
+I8_4p2mopp := expand(int(I8_4p2mopp,y=0..1));
+#
+# I8_4p2mopp := algsubs(A+B=C+D*x,I8_4p2mopp,exact);
+I8_4p2mopp := algsubs(A+B=C*(1-x),I8_4p2mopp,exact);
+I8_4p2mopp := subs(A=C+F*x,B=x*G,I8_4p2mopp);
+I8_4p2mopp := expand(I8_4p2mopp);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -z*s12-(1-z)*s13
+I8_4p2mopp:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(ln(x)='I_log(0,0,1)',I8_4p2mopp);
+I8_4p2mopp := expand(int(I8_4p2mopp,x=0..1));
+I8_4p2mopp := I8_4p2mopp;
+# quit;
+I8_4p2mopp := subs(C=-C,F=-F,G=-G,D=-D,I8_4p2mopp);
+#
+reste := I8_4p2mopp:
+result := 0;
+set_ln := indets(I8_4p2mopp,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p2mopp,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p2mopp,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,ln(-C),1)*ln(-C);
+result2[l1] := coeff(result,ln(-E),1)*ln(-E);
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+# result2[l1] := result2[l1]+reste_f[l1];
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(flag)\n");
+truc1:=subs(C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+truc2:=subs(C = c_var,F = f_var,
+ E = e_var,-(result2[l1]+reste_f[l1])):
+fprintf(fd,"case(%d)\n",1);
+fprintf(fd,"fg = %a\n",truc2);
+fprintf(fd,"case(%d)\n",2);
+fprintf(fd,"fg = %a\n",truc1);
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ res_fin[l1] := (dresult+dreste)/t2;
+ res_fin[l1] := subs(ln=z_log,res_fin[l1]);
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+ close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r2.m (revision 119)
@@ -0,0 +1,163 @@
+#
+# rang 2
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+I6_4p2mopp := x/(A+B*y)*L_z[l1]*L_z[l2];
+#
+I6_4p2mopp := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2mopp));
+I6_4p2mopp := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2mopp);
+#
+I6_4p2mopp := I6_4p2mopp;
+# I6_4p2mopp := algsubs(A+B=C+D*x,I6_4p2mopp,exact);
+I6_4p2mopp := algsubs(A+B=C*(1-x),I6_4p2mopp,exact);
+I6_4p2mopp := subs(A=C+F*x,B=x*G,I6_4p2mopp);
+I6_4p2mopp := expand(I6_4p2mopp);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -z*s12-(1-z)*s13
+I6_4p2mopp := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2mopp);
+I6_4p2mopp := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2mopp);
+I6_4p2mopp := expand(int(I6_4p2mopp,x=0..1));
+I6_4p2mopp := I6_4p2mopp;
+#
+reste := I6_4p2mopp:
+result := 0;
+set_ln := indets(I6_4p2mopp,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2mopp,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2mopp,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2] := coeff(result,ln(C),1)*ln(C);
+result2[l1,l2] := coeff(result,ln(E),1)*ln(E);
+reste_f[l1,l2] := factor(result-result1[l1,l2]-result2[l1,l2]);
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par4)\n");
+for l2 from l1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ E = e_var,-result1[l1,l2]):
+ truc2:=subs(C = c_var,F = f_var,
+ E = e_var,-(result2[l1,l2]+reste_f[l1,l2])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+# quit;
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(par3_glob)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par4_glob)\n");
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+ expr := result1[l1,l2];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+# d5 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d5));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+# d4 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d4));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ res_fin[l1,l2] := (dresult+dreste)/t2;
+ res_fin[l1,l2] := subs(ln=z_log,res_fin[l1,l2]);
+ fprintf(fd,"case(%d)\n",l2);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2]));
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ1D_f4p1m.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ1D_f4p1m.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ1D_f4p1m.m (revision 119)
@@ -0,0 +1,691 @@
+########################################################################
+#
+# initialisation
+#
+########################################################################
+S:=table(symmetric,[seq((i,i)=0,i=1..4),seq((i,i+1)=0,i=1..2),(1,4)=0]);
+N := 4;
+#
+S_i:={1,2,3,4};
+LCor:=[q1,q2,q3,q4];
+#
+#
+$include "procedure.m"
+########################################################################
+with(linalg);
+Sa:=matrix(4,4,[
+0,0,S[1,3],0,
+0,0,0,S[2,4],
+S[1,3],0,0,S[3,4],
+0,S[2,4],S[3,4],0] );
+set6 := {1,2,3,4};
+#
+# on calcule les b4
+Un4:=vector([1,1,1,1]);
+B4M:=linsolve(Sa,Un4);
+InvSa:=inverse(Sa);
+Determi4 := det(Sa);
+for i from 1 to 4 do
+ b4(i,{}) := B4M[i];
+end do;
+for i from 1 to 4 do
+ for j from 1 to 4 do
+ InvS4(i,j,{}) := InvSa[i,j];
+ end do:
+end do:
+#
+SumB4:=proc(Se::set)
+ local set4,res,vk,k;
+ set4:=Compl(Se,S_i);
+ res:=0;
+ for k from 1 to 4 do
+ vk:=set4[k];
+ res:=res+b4(vk,Se);
+ end do;
+ RETURN(res);
+end proc;
+########################################################################
+$include "I4Result.m"
+$include "I3Result.m"
+#
+# on definit :
+# ie(n,z1,z3) = \frac{1}{z_1^n \, z_3} \; \int^1_0 dy \frac{\ln(y)}{(y-1/z_1)^n \, (y-1/z_3)}
+# je(n,z1,z3) = \frac{1}{z_1^n} \; \int^1_0 dy \frac{\ln(y)}{(y-1/z_1)^n}
+#
+############################ dimension n+4 #################################
+rang := 0;
+Diag:=IScaZ(n+4,4,q1,q2,q3,q4);
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+Diag := subs(epsilon=-epsilonUv,Diag);
+Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+cm2:=factor(coeff(Diag,epsilonUv,-2));
+cm1:=factor(coeff(Diag,epsilonUv,-1));
+cm0:=factor(coeff(Diag,epsilonUv,0));
+cm0:=subs(ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),cm0):
+cm0:=subs(
+ISca(n+2,4,S[2,4],S[1,3],0,0,0,S[3,4]) =
+ 1/S[2,4]*ie(1,z1,z3)+1/S[1,3]*ie(1,z2,z4),
+ln(S[3,4]/S[1,3]) = z2*je(2,z2),
+ln(S[3,4]/S[2,4]) = z1*je(2,z1),
+cm0):
+cm0:=subs(
+ie(1,z1,z3) = (z1-z3)/z3*ie(2,z1,z3)+z1/z3*je(2,z1),
+ie(1,z2,z4) = (z2-z4)/z4*ie(2,z2,z4)+z2/z4*je(2,z2),
+cm0):
+set_func:=indets(cm0,function);
+res:=0;
+restant:=cm0;
+for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do:
+restant := factor(restant):
+cm0:=res+restant;
+# pour faire le programme Fortran
+rt1 := cm0;
+rt1 := subs(
+ je(2,z1) = S[2,4]/(S[2,4]-S[3,4])*ln(S[3,4]/S[2,4]),
+ je(2,z2) = S[1,3]/(S[1,3]-S[3,4])*ln(S[3,4]/S[1,3]),rt1);
+rt1 := applyrule(ln(S2::indexed/S1::indexed) = -he(1,S1,S2)*(S1-S2),rt1);
+rt1 := factor(rt1);
+set_func:=indets(rt1,function);
+res:=0;
+for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ res := res+temp*func;
+end do;
+restant := expand(subs(t1=S[2,4]-S[3,4],t2=S[1,3]-S[3,4],rt1-res)):
+restant := factor(restant);
+rt1:=res+restant;
+set_ie:=indets(rt1,specfunc(anything,ie)):
+restant:=rt1;
+res:=0;
+for func in set_ie do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do;
+r_rang0_he:=restant;
+r_rang0_ie:=factor(res);
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"res_he = %a\n",r_rang0_he);
+fprintf(fd,"res_ie = %a\n",r_rang0_ie);
+fclose(fd);
+# quit;
+t_rang1 := table();
+rang := 1;
+for l1 from 1 to 4 do
+ Diag:=IScaZ(n+4,4,l1,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,0,0,S[3,4]) =
+ 1/S[2,4]*ie(1,z1,z3)+1/S[1,3]*ie(1,z2,z4),
+ ln(S[3,4]/S[1,3]) = z2*je(2,z2),
+ ln(S[3,4]/S[2,4]) = z1*je(2,z1),
+ cm0):
+ cm0:=subs(
+ ie(1,z1,z3) = (z1-z3)/z3*ie(2,z1,z3)+z1/z3*je(2,z1),
+ ie(1,z2,z4) = (z2-z4)/z4*ie(2,z2,z4)+z2/z4*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(2,z1,z3) = (z1-z3)/z3*ie(3,z1,z3)+z1/z3*je(3,z1),
+ ie(2,z2,z4) = (z2-z4)/z4*ie(3,z2,z4)+z2/z4*je(3,z2),
+ je(2,z1) = -2*je(3,z1) + 1/(1-z1),
+ je(2,z2) = -2*je(3,z2) + 1/(1-z2),
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],restant):
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang1[l1] := cm0;
+end do:
+for l1 from 1 to 4 do
+ t_rang1[l1];
+end do;
+# quit;
+for l1 from 1 to 4 do
+ rt1 := t_rang1[l1];
+ rt1 := subs(
+ je(3,z1)=1/2*(-(S[2,4]/(S[2,4]-S[3,4]))*ln(S[3,4]/S[2,4])
+ +S[2,4]/S[3,4]),
+ je(3,z2)=1/2*(-(S[1,3]/(S[1,3]-S[3,4]))*ln(S[3,4]/S[1,3])
+ +S[1,3]/S[3,4]),rt1);
+ rt1 := applyrule(
+ ln(S2::indexed/S1::indexed) = -he(1,S1,S2)*(S1-S2),rt1);
+ rt1 := factor(rt1);
+ set_func:=indets(rt1,function);
+ res:=0;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ if (func = he(1,S[2,4],S[3,4]) ) then
+ temp := algsubs(S[2,4]-S[3,4]=t1,temp,exact);
+ end if;
+ if (func = he(1,S[1,3],S[3,4]) ) then
+ temp := algsubs(S[1,3]-S[3,4]=t2,temp,exact);
+ end if;
+ res := res+temp*func;
+ end do;
+ restant := expand(subs(t1=S[2,4]-S[3,4],t2=S[1,3]-S[3,4],rt1-res)):
+ restant := factor(restant);
+# a mettre dans le bon ordre suivant les cas
+ if (l1 <> 2) then
+ restant := algsubs(S[1,3]-S[3,4]=t2,restant,exact);
+ restant := algsubs(S[2,4]-S[3,4]=t1,restant,exact);
+ else
+ restant := algsubs(S[2,4]-S[3,4]=t1,restant,exact);
+ restant := algsubs(S[1,3]-S[3,4]=t2,restant,exact);
+ end if;
+ rt1:=res+restant;
+ c2:=coeff(rt1,t1,-2);
+ c1:=coeff(rt1,t1,-1);
+ cn0:=factor(rt1-c2/t1^2-c1/t1);
+ cp2:=coeff(cn0,t2,-2);
+ cp1:=coeff(cn0,t2,-1);
+ c0:=factor(cn0-cp2/t2^2-cp1/t2);
+ c1:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2-(S1-S2)/S2
+ *he(2,S1,S2),c1);
+ c1:=factor(c1);
+ c1 := algsubs(S[2,4]-S[3,4]=t1,c1,exact);
+ cp1:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2-(S1-S2)/S2
+ *he(2,S1,S2),cp1);
+ cp1:=factor(cp1);
+ cp1 := algsubs(S[1,3]-S[3,4]=t2,cp1,exact);
+ c0:=subs(t2=S[1,3]-S[3,4],t1=S[2,4]-S[3,4],c0);
+ rt1:=c2/t1^2+c1/t1+cp2/t2^2+cp1/t2+c0;
+ set_ie:=indets(rt1,specfunc(anything,ie)):
+ restant:=rt1;
+ res:=0;
+ for func in set_ie do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang1_ie[l1]:=factor(res);
+ rt1:=restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang1_cst[l1]:=factor(restant);
+ r_rang1_he[l1]:=factor(res);
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+# if (l1 = 1) then
+# fprintf(fd,"select case(par4)\n");
+# end if;
+# fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"res_ie = %a\n",r_rang1_ie[l1]);
+ fprintf(fd,"res_he = %a\n",r_rang1_he[l1]);
+ fprintf(fd,"res_cst = %a\n",r_rang1_cst[l1]);
+# if (l2 = 4) then
+# fprintf(fd,"end select\n");
+# end if;
+# end do;
+end do;
+# pour faire le programme Fortran
+quit;
+############################ dimension n+2 #################################
+t_rang1 := table();
+rang := 1;
+for l1 from 1 to 4 do
+ Diag:=IScaZ(n+2,4,l1,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+ #
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,0,0,S[3,4]) =
+ 1/S[2,4]*ie(1,z1,z3)+1/S[1,3]*ie(1,z2,z4),
+ ln(S[3,4]/S[1,3]) = z2*je(2,z2),
+ ln(S[3,4]/S[2,4]) = z1*je(2,z1),
+ cm0):
+ cm0:=subs(
+ ie(1,z1,z3) = (z1-z3)/z3*ie(2,z1,z3)+z1/z3*je(2,z1),
+ ie(1,z2,z4) = (z2-z4)/z4*ie(2,z2,z4)+z2/z4*je(2,z2),
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ restant := factor(restant):
+ cm0:=res+restant;
+ t_rang1[l1] := cm0;
+end do:
+for l1 from 1 to 4 do
+ t_rang1[l1];
+end do;
+# pour faire le programme Fortran
+for l1 from 1 to 4 do
+ rt1 := t_rang1[l1];
+ rt1 := subs(
+ je(2,z1) = S[2,4]/(S[2,4]-S[3,4])*ln(S[3,4]/S[2,4]),
+ je(2,z2) = S[1,3]/(S[1,3]-S[3,4])*ln(S[3,4]/S[1,3]),rt1);
+ rt1 := applyrule(ln(S2::indexed/S1::indexed) = -he(1,S1,S2)*(S1-S2),rt1);
+ rt1 := factor(rt1);
+ set_func:=indets(rt1,function);
+ res:=0;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ res := res+temp*func;
+ end do;
+ restant := expand(subs(t1=S[2,4]-S[3,4],t2=S[1,3]-S[3,4],rt1-res)):
+ restant := factor(restant);
+ rt1:=res+restant;
+ set_ie:=indets(rt1,specfunc(anything,ie)):
+ restant:=rt1;
+ res:=0;
+ for func in set_ie do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang1_he[l1]:=restant;
+ r_rang1_ie[l1]:=factor(res);
+end do;
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"res_he = %a\n",r_rang1_he[l1]);
+ fprintf(fd,"res_ie = %a\n",r_rang1_ie[l1]);
+ if (l1 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+fclose(fd);
+# quit;
+t_rang2 := table(symmetric);
+rang := 2;
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+ Diag:=IScaZ(n+2,4,l1,l2,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ISca(n+2,4,S[2,4],S[1,3],0,0,0,S[3,4]) =
+ 1/S[2,4]*ie(1,z1,z3)+1/S[1,3]*ie(1,z2,z4),
+ ln(S[3,4]/S[1,3]) = z2*je(2,z2),
+ ln(S[3,4]/S[2,4]) = z1*je(2,z1),
+ cm0):
+ cm0:=subs(
+ ie(1,z1,z3) = (z1-z3)/z3*ie(2,z1,z3)+z1/z3*je(2,z1),
+ ie(1,z2,z4) = (z2-z4)/z4*ie(2,z2,z4)+z2/z4*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(2,z1,z3) = (z1-z3)/z3*ie(3,z1,z3)+z1/z3*je(3,z1),
+ ie(2,z2,z4) = (z2-z4)/z4*ie(3,z2,z4)+z2/z4*je(3,z2),
+ je(2,z1) = -2*je(3,z1) + 1/(1-z1),
+ je(2,z2) = -2*je(3,z2) + 1/(1-z2),
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],restant):
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang2[l1,l2] := cm0;
+end do:
+end do:
+# pour faire le programme Fortran
+r_rang2_ie := table(symmetric);
+r_rang2_he := table(symmetric);
+r_rang2_cst := table(symmetric);
+r_rang2 := table(symmetric);
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+ rt1 := t_rang2[l1,l2];
+ rt1 := subs(
+ je(3,z1)=1/2*(-(S[2,4]/(S[2,4]-S[3,4]))*ln(S[3,4]/S[2,4])
+ +S[2,4]/S[3,4]),
+ je(3,z2)=1/2*(-(S[1,3]/(S[1,3]-S[3,4]))*ln(S[3,4]/S[1,3])
+ +S[1,3]/S[3,4]),rt1);
+ rt1 := applyrule(
+ ln(S2::indexed/S1::indexed) = -he(1,S1,S2)*(S1-S2),rt1);
+ rt1 := factor(rt1);
+ set_func:=indets(rt1,function);
+ res:=0;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ if (func = he(1,S[2,4],S[3,4]) ) then
+ temp := algsubs(S[2,4]-S[3,4]=t1,temp,exact);
+ end if;
+ if (func = he(1,S[1,3],S[3,4]) ) then
+ temp := algsubs(S[1,3]-S[3,4]=t2,temp,exact);
+ end if;
+ res := res+temp*func;
+ end do;
+ restant := expand(subs(t1=S[2,4]-S[3,4],t2=S[1,3]-S[3,4],rt1-res)):
+ restant := factor(restant);
+# a mettre dans le bon ordre suivant les cas
+ if (l1 <> 2) then
+ restant := algsubs(S[1,3]-S[3,4]=t2,restant,exact);
+ restant := algsubs(S[2,4]-S[3,4]=t1,restant,exact);
+ else
+ restant := algsubs(S[2,4]-S[3,4]=t1,restant,exact);
+ restant := algsubs(S[1,3]-S[3,4]=t2,restant,exact);
+ end if;
+ rt1:=res+restant;
+ c2:=coeff(rt1,t1,-2);
+ c1:=coeff(rt1,t1,-1);
+ cn0:=factor(rt1-c2/t1^2-c1/t1);
+ cp2:=coeff(cn0,t2,-2);
+ cp1:=coeff(cn0,t2,-1);
+ c0:=factor(cn0-cp2/t2^2-cp1/t2);
+ c1:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2-(S1-S2)/S2
+ *he(2,S1,S2),c1);
+ c1:=factor(c1);
+ c1 := algsubs(S[2,4]-S[3,4]=t1,c1,exact);
+ cp1:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2-(S1-S2)/S2
+ *he(2,S1,S2),cp1);
+ cp1:=factor(cp1);
+ cp1 := algsubs(S[1,3]-S[3,4]=t2,cp1,exact);
+ c0:=subs(t2=S[1,3]-S[3,4],t1=S[2,4]-S[3,4],c0);
+ rt1:=c2/t1^2+c1/t1+cp2/t2^2+cp1/t2+c0;
+ set_ie:=indets(rt1,specfunc(anything,ie)):
+ restant:=rt1;
+ res:=0;
+ for func in set_ie do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang2_ie[l1,l2]:=factor(res);
+ rt1:=restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang2_cst[l1,l2]:=factor(restant);
+ r_rang2_he[l1,l2]:=factor(res);
+end do;
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ for l2 from l1 to 4 do
+ if (l2 = l1) then
+ fprintf(fd,"select case(par4)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"res_ie = %a\n",r_rang2_ie[l1,l2]);
+ fprintf(fd,"res_he = %a\n",r_rang2_he[l1,l2]);
+ fprintf(fd,"res_cst = %a\n",r_rang2_cst[l1,l2]);
+ if (l2 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+ end do;
+end do;
+rang := 3;
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+ Diag:=IScaZ(n+2,4,l1,l2,l3,q1,q2,q3,q4);
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute4p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,3]) = -ln(S[3,4]/S[1,3])+ln(-S[3,4]),
+ ln(-S[2,4]) = -ln(S[3,4]/S[2,4])+ln(-S[3,4]),cm0):
+ cm0:=subs(
+ ln(S[3,4]/S[1,3]) = 3*z2*je(4,z2)
+ - z2*(3*z2-4)/(1-z2)^2/2,
+ ln(S[3,4]/S[2,4]) = 3*z1*je(4,z1)
+ - z1*(3*z1-4)/(1-z1)^2/2,
+ cm0):
+ cm0:=subs(
+ ie(1,z1,z3) = (z1-z3)/z3*ie(2,z1,z3)+z1/z3*je(2,z1),
+ ie(1,z2,z4) = (z2-z4)/z4*ie(2,z2,z4)+z2/z4*je(2,z2),
+ cm0):
+ cm0:=subs(
+ ie(2,z1,z3) = (z1-z3)/z3*ie(3,z1,z3)+z1/z3*je(3,z1),
+ ie(2,z2,z4) = (z2-z4)/z4*ie(3,z2,z4)+z2/z4*je(3,z2),
+ je(2,z1) = -2*je(3,z1) + 1/(1-z1),
+ je(2,z2) = -2*je(3,z2) + 1/(1-z2),
+ cm0):
+ cm0:=subs(
+ ie(3,z1,z3) = (z1-z3)/z3*ie(4,z1,z3)+z1/z3*je(4,z1),
+ ie(3,z2,z4) = (z2-z4)/z4*ie(4,z2,z4)+z2/z4*je(4,z2),
+ je(3,z1) = -3/2*je(4,z1) + (z1-2)/(1-z1)^2/4,
+ je(3,z2) = -3/2*je(4,z2) + (z2-2)/(1-z2)^2/4,
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1=1-S[3,4]/S[2,4],z2=1-S[3,4]/S[1,3],z3=-S[1,3]/S[2,4],
+ z4=-S[2,4]/S[1,3],restant):
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang3[l1,l2,l3] := cm0;
+end do;
+end do;
+end do;
+r_rang3_ie := table(symmetric);
+r_rang3_he := table(symmetric);
+r_rang3_cst := table(symmetric);
+r_rang3 := table(symmetric);
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+ rt1 := t_rang3[l1,l2,l3];
+ rt1 := subs(
+ je(4,z1)=1/3*S[2,4]*( -he(1,S[2,4],S[3,4])
+ - 1/S[3,4]^2*(S[2,4]+3*S[3,4])/2 ),
+ je(4,z2)=1/3*S[1,3]*( -he(1,S[1,3],S[3,4])
+ - 1/S[3,4]^2*(S[1,3]+3*S[3,4])/2 ),
+ rt1);
+ rt1 := factor(rt1);
+ set_func:=indets(rt1,function);
+ res:=0;
+ for func in set_func do
+ temp:=factor(coeff(rt1,func,1));
+ if (func = he(1,S[2,4],S[3,4]) ) then
+ temp := algsubs(S[2,4]-S[3,4]=t1,temp,exact);
+ end if;
+ if (func = he(1,S[1,3],S[3,4]) ) then
+ temp := algsubs(S[1,3]-S[3,4]=t2,temp,exact);
+ end if;
+ res := res+temp*func;
+ end do;
+ restant := expand(subs(t1=S[2,4]-S[3,4],t2=S[1,3]-S[3,4],rt1-res)):
+ restant := factor(restant);
+# a mettre dans le bon ordre suivant les cas
+ if (l1 <> 2) then
+ restant := algsubs(S[1,3]-S[3,4]=t2,restant,exact);
+ restant := algsubs(S[2,4]-S[3,4]=t1,restant,exact);
+ else
+ restant := algsubs(S[2,4]-S[3,4]=t1,restant,exact);
+ restant := algsubs(S[1,3]-S[3,4]=t2,restant,exact);
+ end if;
+ rt1:=res+restant;
+ c2:=coeff(rt1,t1,-2);
+ c1:=coeff(rt1,t1,-1);
+ cn0:=factor(rt1-c2/t1^2-c1/t1);
+ cp2:=coeff(cn0,t2,-2);
+ cp1:=coeff(cn0,t2,-1);
+ c0:=factor(cn0-cp2/t2^2-cp1/t2);
+#
+ c2:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2^2*( (S1-S2)^2
+ *he(3,S1,S2)-(S1-3*S2)/2 ),c2);
+ c2:=factor(subs(t2=S[1,3]-S[3,4],c2));
+ c2 := algsubs(S[2,4]-S[3,4]=t1,c2,exact);
+#
+ c1:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2-(S1-S2)/S2
+ *he(2,S1,S2),c1);
+ c1:=factor(subs(t2=S[1,3]-S[3,4],c1));
+ c1 := algsubs(S[2,4]-S[3,4]=t1,c1,exact);
+#
+ cp2:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2^2*( (S1-S2)^2
+ *he(3,S1,S2)-(S1-3*S2)/2 ),cp2);
+ cp2:=factor(subs(t1=S[2,4]-S[3,4],cp2));
+ cp2 := algsubs(S[1,3]-S[3,4]=t2,cp2,exact);
+#
+ cp1:=applyrule(he(1,S1::indexed,S2::indexed)=1/S2-(S1-S2)/S2
+ *he(2,S1,S2),cp1);
+ cp1:=factor(subs(t1=S[2,4]-S[3,4],cp1));
+ cp1 := algsubs(S[1,3]-S[3,4]=t2,cp1,exact);
+#
+ c0:=subs(t2=S[1,3]-S[3,4],t1=S[2,4]-S[3,4],c0);
+#
+ rt1:=c2/t1^2+c1/t1+cp2/t2^2+cp1/t2+c0;
+ set_ie:=indets(rt1,specfunc(anything,ie)):
+ restant:=rt1;
+ res:=0;
+ for func in set_ie do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang3_ie[l1,l2,l3]:=factor(res);
+ rt1:=restant;
+ set_he:=indets(rt1,specfunc(anything,he)):
+ restant:=rt1;
+ res:=0;
+ for func in set_he do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ r_rang3_cst[l1,l2,l3]:=factor(subs(t2=S[1,3]-S[3,4],t1=S[2,4]-S[3,4],
+ restant));
+ r_rang3_he[l1,l2,l3]:=factor(subs(t2=S[1,3]-S[3,4],t1=S[2,4]-S[3,4],res));
+end do;
+end do;
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+for l2 from l1 to 4 do
+ if (l2 = l1) then
+ fprintf(fd,"select case(par3)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l2);
+for l3 from l2 to 4 do
+ if (l3 = l2) then
+ fprintf(fd,"select case(par4)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l3);
+ fprintf(fd,"res_ie = %a\n",r_rang3_ie[l1,l2,l3]);
+ fprintf(fd,"res_he = %a\n",r_rang3_he[l1,l2,l3]);
+ fprintf(fd,"res_cst = %a\n",r_rang3_cst[l1,l2,l3]);
+ if (l3 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+ if (l2 = 4) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+end do;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/f77tof90.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/f77tof90.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/f77tof90.pl (revision 119)
@@ -0,0 +1,80 @@
+#!/usr/bin/perl -w
+use Getopt::Long;
+GetOptions("input=s" => \$fichier_lecture,
+ "output=s" => \$fichier_ecriture);
+# valeur par defaut des fichiers de parametres
+unless ($fichier_lecture) {
+ $fichier_lecture = "matrix.res";
+}
+unless ($fichier_ecriture) {
+ $fichier_ecriture = "transf_resu.txt";
+}
+$columns = 70;
+# $fichier_lecture = "matrice.res";
+# $fichier_ecriture = "transf_resu.txt";
+open(EREAD,"$fichier_lecture") || die "cannot create $fichier_lecture" ;
+open(EWRITE,">$fichier_ecriture") || die "cannot create $fichier_ecriture" ;
+#
+$egal = 0;
+# $cas4 = 0;
+$cas5 = 1;
+$i = 0;
+@l_temp = ();
+$temp = "";
+while(<EREAD>) {
+ chomp;
+ if (m/=/ && !m/bytes/ && (!m/^>/ && !m/^#/)) {
+ s/^\s+//g;
+ s/\s//g;
+ $l_temp[$i] = $_;
+ $i++;
+ }
+ elsif (!m/Warning/ && !m/bytes/ && (!m/^>/ && !m/^#/) ) {
+ s/^\s+//g;
+ s/\s//g;
+ $l_temp[$i-1] = $l_temp[$i-1].$_;
+ }
+}
+foreach $term (@l_temp) {
+ $term =~ s/#//g;
+ $term =~ s/(\d+)(?=\*)/$1.d0/g;
+ $term =~ s/(?<=\*\*)(\d).d0/$1/g;
+ $term =~ s/(?<=\/)(\d)(?!\.)/$1.d0/g;
+ $term =~ s/(\w)(\d+).d0/$1$2/g;
+ $term =~ s/dble//g;
+ $term =~ s/S/s_mat/g;
+ $term =~ s/dets/det_s/g;
+ if ( ($term=~ m/b4/) || ($term=~ m/invs4/) ) {
+# $cas4 = 1;
+ $cas5 = 0;
+ }
+ @l_car = split("",$term);
+ $count = 0;
+ $s_count = 0;
+ $rest = $#l_car;
+ foreach $car (@l_car) {
+ $count++;
+ $s_count++;
+ $rest--;
+ if ($count == $columns) {
+ if ($rest == -1) {
+ $car = $car."\n!";
+ }
+ else {
+ $car = $car."&\n &";
+ }
+ $count = 2;
+ }
+ #~ print "$s_count ==($#l_car+1)) && $cas5 \n";
+ if ( ($s_count == ($#l_car+1)) && $cas5 ) {
+ #~ print EWRITE "$car/det_s\n!";
+ print EWRITE "$car\n!";
+ }
+ else {
+ print EWRITE "$car";
+ }
+ }
+ print EWRITE "\n";
+}
+close(EWRITE);
+close(EREAD);
Index: 95/branches/golem95_without_olo_cmake/tool/temp_file.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/temp_file.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/temp_file.f90 (revision 119)
@@ -0,0 +1,4 @@
+-1.000000000000000e+03 0.000000000000000e+00 -1.000000000000000e-03 -1.000000000000000e-16 -6.907755278982137e-03 -5.907755278982137e-16 -2.385854149715279e-02 -1.695078621817065e-15
+-5.000000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 -4.000000000000000e-12 -3.218875824868201e-01 -2.437751649736401e-12 -2.590290393980235e-01 1.257170861775932e-12
+5.000000000000000e+00 0.000000000000000e+00 2.000000000000000e-01 -4.000000000000000e-12 3.218875824742537e-01 -6.283185307203964e-01 -7.279314007185708e-01 -1.011239664401376e+00
+1.000000000000000e+03 0.000000000000000e+00 1.000000000000000e-03 -1.000000000000000e-16 6.907755278981823e-03 -3.141592653590384e-03 1.892373929660626e-02 -2.170135323724760e-02
Index: 95/branches/golem95_without_olo_cmake/tool/cal_hem1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/cal_hem1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/cal_hem1.m (revision 119)
@@ -0,0 +1,98 @@
+#
+# hem := (n,m,A,B,C,D) -> Int(y^(n-1)/(A*y+B*(1-y))^m/(C*y+D*(1-y)),y=0..1);
+# he := (n,A,B) -> Int(y^(n-1)/(A*y+B*(1-y)),y=0..1);
+hem := (n,m,A,B,C,D) -> y^(n-1)/(A*y+B*(1-y))^m/(C*y+D*(1-y));
+he := (n,A,B) -> y^(n-1)/(A*y+B*(1-y));
+#
+Digits := 15;
+#
+# S[1,2] := -67.01;
+# S[1,3] := -110;
+# S[2,4] := -200;
+# S[3,4] := (S[2,4]+S[1,3]-S[1,2])+0.1;
+S[1,2] := 2;
+S[1,3] := 1;
+S[2,4] := 5;
+S[3,4] := 4;
+#
+# w2 := ( -2*(S[1,3]-2*S[3,4])*S[1,3]*y^3*(S[1,3]*y+S[3,4]*(1-y))
+# -2*(2*S[1,3]-3*S[3,4])*S[3,4]*S[1,3]*y^3
+# -6*S[3,4]^2*S[1,3]*y^2
+# +(S[1,3]*y+S[3,4]*(1-y))^3 )/(S[1,3]*y+S[3,4]*(1-y))^3;
+w2 := ( -2*S[1,3]*y^2*(S[1,3]*y+S[3,4]*(1-y))^2
+ -2*S[3,4]*S[1,3]*y^2*(1-y)*(S[1,3]*y+S[3,4]*(1-y))
+ -2*S[3,4]^2*S[1,3]*y^2*(1-y)
+ +(S[1,3]*y+S[3,4]*(1-y))^3 )/(S[1,3]*y+S[3,4]*(1-y))^3;
+int(w2,y=0..1);
+quit;
+#
+# partie en A^0
+#
+res[0] := (D-C)*hem(4,1,A,B,C,D)+3*he(3,A,B)-1/A;
+nres[0]:=numer(res[0]);
+nres[0]:=subs(A=B*C/D+Delta/D,nres[0]);
+nres1[0]:=coeff(nres[0],Delta,1);
+nres0[0]:=coeff(nres[0],Delta,0);
+nres[0]:=collect(nres0[0],y,factor);
+dres[0]:=denom(res[0]);
+w0:=((A*D-B*C)*nres1[0]-nres0[0]*y*(A*D-B*C)/B/(C*y+D*(1-y)))/dres[0]:
+factor(w0);
+quit;
+#
+# partie en A^0
+#
+res[0] := NC[1,0]/DC[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +NC[2,0]/DC[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +NC[3,0]/DC[3];
+nres[0]:=numer(res[0]);
+nres[0]:=subs(S[1,2]=S[2,4]+A,nres[0]);
+nres1[0]:=coeff(nres[0],A,1);
+nres0[0]:=coeff(nres[0],A,0);
+nres[0]:=collect(nres0[0],y,factor);
+dres[0]:=denom(res[0]);
+#
+res[1] := NC[1,1]/DC[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +NC[2,1]/DC[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +NC[3,1]/DC[3];
+w0:=((S[1,2]-S[2,4])*nres1[0]+nres0[0]*y*S[1,3]*(S[1,2]-S[2,4])/S[1,2]/(S[1,3]*y+S[3,4]*(1-y)))/dres[0]+res[1]*(S[1,2]-S[2,4]):
+# factor(w0);
+w1:=factor(w0/(S[1,2]-S[2,4]));
+nw1:=subs(S[1,2]=S[2,4]+A,numer(w1));
+dw1:=denom(w1);
+nw12:=coeff(nw1,A,2);
+nw11:=coeff(nw1,A,1);
+nw10:=coeff(nw1,A,0);
+# w1:=collect(numer(w0)/(S[1,2]-S[2,4]),y,factor);
+# w1:=subs(S[1,2]=S[2,4],w1);
+nw12:=collect(numer(nw12),y,factor);
+nw11:=collect(numer(nw11),y,factor);
+nw10:=collect(numer(nw10),y,factor);
+#
+quit;
+res[2] := NC[1,2]/DC[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +NC[2,2]/DC[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +NC[3,2]/DC[3];
+q0:=(nw12*(S[1,2]-S[2,4])^2+nw11*(S[1,2]-S[2,4])+nw10*y*S[1,3]*(S[1,2]-S[2,4])/S[1,2]/(S[1,3]*y+S[3,4]*(1-y)))/dw1+res[2]*(S[1,2]-S[2,4]):
+factor(q0);
+quit;
+w2:=nw10/subs(S[1,2]=S[2,4],dw1);
+u:=numer(w2);
+du:=factor(diff(numer(w2),y));
+collect(du,y,factor);
+dv:=1/denom(w2);
+v:=int(dv,y);
+factor(subs(y=1,u*v)-subs(y=0,u*v));
+# factor(int(du*v,y=0..1));
+#
+Digits := 15;
+#
+# S[1,2] := -67.01;
+# S[1,3] := -110;
+# S[2,4] := -200;
+# S[3,4] := (S[2,4]+S[1,3]-S[1,2])+0.1;
+S[1,2] := 2;
+S[1,3] := 1;
+S[2,4] := 5;
+S[3,4] := 4;
+#
+int(w2,y=0..1);
Index: 95/branches/golem95_without_olo_cmake/tool/residu.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/residu.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/residu.pl (revision 119)
@@ -0,0 +1,23 @@
+#!/usr/bin/perl -w
+use Text::Wrap qw($columns &wrap);
+$n1 = 1;
+$n3 = 2;
+$m = 0;
+open(MAPLE,">temp.m");
+open(EREAD,"residu.m");
+ while(<EREAD>) {
+ chomp;
+ print MAPLE "$_\n";
+ }
+close EREAD;
+print MAPLE "qw1:=residu_z($n1,$n3,$m,a1,a3);\n";
+print MAPLE "qw3:=residu_z($n3,$n1,$m,a3,a1);\n";
+print MAPLE "fd := open(\"temp.res\",WRITE);\n";
+print MAPLE "fprintf(fd,\"res1 = %a\\n\",qw1);\n";
+print MAPLE "fprintf(fd,\"res3 = %a\\n\",qw3);\n";
+print MAPLE "close(fd);\n";
+#
+close MAPLE;
+system("maple < temp.m");
+system("perl maple2f90.pl --input=temp.res --output=temp.f90");
+exit;
Index: 95/branches/golem95_without_olo_cmake/tool/pseudo_inv.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/pseudo_inv.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/pseudo_inv.m (revision 119)
@@ -0,0 +1,69 @@
+with(LinearAlgebra);
+S:=Matrix(3,3,[
+0,0,Y,
+0,0,X,
+Y,X,0] );
+#
+G:=Matrix(3,3,[
+2*Y,X+Y,0,
+X+Y,2*X,0,
+0,0,0] );
+#
+MatrixInverse(S,method='pseudo');
+H:=MatrixInverse(G,method='pseudo');
+simplify(evalm(G&*H));
+simplify(evalm(H&*G));
+quit;
+H:=Matrix(3,3,[
+a,b,c,
+b,d,e,
+c,e,f] );
+#
+# $include "procedure.m"
+#
+# evalm(S&*H);
+R1:=evalm(S&*H&*S-S);
+R2:=evalm(H&*S&*H-H);
+quit;
+# on calcule les b4
+Un4:=vector([1,1,1,1]);
+B4M:=linsolve(Sa,Un4);
+InvSa:=inverse(Sa);
+Determi4 := det(Sa);
+for i from 1 to 4 do
+ b4(i,{}) := B4M[i];
+end do;
+for i from 1 to 4 do
+ for j from 1 to 4 do
+ InvS4(i,j,{}) := factor(InvSa[i,j]*Determi4);
+ end do:
+end do:
+invs4 := evalm(InvSa*Determi4);
+b4 := evalm(B4M*Determi4);
+sumb4 := factor(b4[1]+b4[2]+b4[3]+b4[4]);
+#
+#
+SumB4:=proc(Se::set)
+ local res,vk,k;
+ res:=0;
+ for k from 1 to 4 do
+ vk:=set4[k];
+ res:=res+b4(vk,Se);
+ end do;
+ RETURN(res);
+end proc;
+#
+with(CodeGeneration);
+Fortran(Determi4,resultname="dets");
+Fortran(invs4);
+Fortran(b4);
+Fortran(sumb4);
+# for i from 1 to 4 do
+# for j from 1 to 4 do
+# lprint(i,j);
+# # Fortran([InvS4(i,j,{})],resultname="smat");
+# end do;
+# end do;
+quit;
+
+
Index: 95/branches/golem95_without_olo_cmake/tool/check.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/check.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/check.m (revision 119)
@@ -0,0 +1,116 @@
+#
+Digits := 15;
+#
+S[1,2] := -67.01;
+S[1,3] := -110;
+S[2,4] := -200;
+S[3,4] := (S[2,4]+S[1,3]-S[1,2])+0.1;
+# S[1,2] := 67.01;
+# S[1,3] := 110;
+# S[2,4] := 200;
+# S[3,4] := (S[2,4]+S[1,3]-S[1,2])+0.1;
+#
+z1 := (1-S[1,2]/S[1,3])*(1-S[1,2]/S[2,4]);
+z2 := 1-S[1,2]*S[3,4]/(S[2,4]*S[1,3]);
+z3 := (S[1,2]-S[1,3])/S[2,4];
+z4 := (S[1,2]-S[2,4])/S[1,3];
+z5 := 1-S[3,4]/S[2,4];
+z6 := 1-S[3,4]/S[1,3];
+#
+# ke := (n,m,Z1,Z3) -> int(y^m*ln(y)/(y-1/Z1)^n/(y-1/Z3)/Z1^n/Z3,y=0..1);
+# hem := (n,m,A,B,C,D) -> int(y^(n-1)/(A*y+B*(1-y))^m/(C*y+D*(1-y)),y=0..1);
+ke := (n,m,Z1,Z3) -> Int(y^m*ln(y)/(y-1/Z1)^n/(y-1/Z3)/Z1^n/Z3,y=0..1);
+# hem := (n,m,A,B,C,D) -> Int(y^(n-1)/(A*y+B*(1-y))^m/(C*y+D*(1-y)),y=0..1);
+hem := (n,m,l,A,B,C,D) -> Int(y^(n-1)*(1-y)^(m-1)
+ /(A*y+B*(1-y))^l/(C*y+D*(1-y)),y=0..1);
+je := (n,Z) -> Int(ln(y)/(y-1/Z)^n/Z^n,y=0..1);
+he := (n,A,B) -> Int(y^(n-1)/(A*y+B*(1-y)),y=0..1);
+# #
+# eq_ori1 := he(2,C,D) = ( (A*D-B*C)*hem(3,1,A,B,C,D)
+# +B*he(2,A,B) )/D;
+# eq_ori2 := he(2,A,B) = ( (A*D-B*C)*hem(3,2,A,B,C,D)
+# -(D-C)*hem(3,1,A,B,C,D)
+# +1/A )/2;
+#
+ eq_ori1 := he(2,C,D) = ( (A*D-B*C)*hem(3,1,1,A,B,C,D)
+ +B*he(2,A,B) )/D;
+# eq_ori2 := he(3,C,D) = ( -(A*D-B*C)*hem(3,2,1,A,B,C,D)
+# +A*he(3,A,B) )/C;
+ eq_ori2 := he(3,C,D) = ( -(A*D-B*C)*
+ ( (D-C)*hem(3,3,2,C,D,A,B)
+ + C*hem(3,2,2,C,D,A,B) )
+ +A*he(3,A,B) )/C;
+# eq_ori2 := he(2,A,B) = ( (A*D-B*C)*hem(3,1,2,A,B,C,D)
+# -(D-C)*hem(3,1,1,A,B,C,D)
+# +1/A )/2;
+# eq_ori3 := A*(D-C)*hem(4,1,A,B,C,D)+3*A*he(3,A,B)-1
+# =
+# (A*D-B*C)*(2*hem(3,1,C,D,A,B)-2*hem(4,1,C,D,A,B)
+# +D*(hem(3,2,C,D,A,B)-hem(4,2,C,D,A,B)));
+# eq_ori3 := A*(D-C)*hem(4,1,A,B,C,D)+3*A*he(3,A,B)-1
+# =
+# (A*D-B*C)*(-2*hem(4,1,C,D,A,B)
+# +3*D*hem(3,2,C,D,A,B)+(2*C-3*D)*hem(4,2,C,D,A,B));
+# eq_ori3 := he(3,A,B)
+# = ( 1 - A*(D-C)*hem(4,1,A,B,C,D) +
+# (A*D-B*C)*(-2*hem(4,1,C,D,A,B)
+# +3*D*hem(3,2,C,D,A,B)+(2*C-3*D)*hem(4,2,C,D,A,B))
+# )/(3*A);
+# eq_ori3 := he(3,A,B)
+# = ( 1 + (2*B*C+A*C-3*A*D)*hem(4,1,A,B,C,D) +
+# (A*D-B*C)*(3*D*hem(3,2,C,D,A,B)+(2*C-3*D)*hem(4,2,C,D,A,B))
+# )/(3*A);
+# eq_ori3 := A*(2*he(3,A,B)+D*hem(3,1,1,C,D,A,B))-1
+# = (A*D-B*C)*(2*hem(3,2,1,C,D,A,B)+D*hem(3,2,2,C,D,A,B));
+# eq_ori3 := A*(2*he(3,A,B)+D*hem(3,1,1,C,D,A,B))-1
+# = (A*D-B*C)*(2*(D-C)*hem(3,3,2,C,D,A,B)+(2*C+D)*hem(3,2,2,C,D,A,B));
+ eq_ori3 := he(3,A,B)
+ = (1
+ - A*D*hem(3,1,1,C,D,A,B)
+ + (A*D-B*C)*(
+ 2*(D-C)*hem(3,3,2,C,D,A,B)
+ +(2*C+D)*hem(3,2,2,C,D,A,B))
+ )/(2*A);
+# eq_ori4 := -2*A*(C-2*D)*hem(4,1,C,D,A,B)-2*A*D*(2*C-3*D)*hem(4,2,C,D,A,B)
+# -6*A*D^2*hem(3,2,C,D,A,B)+1
+# = -2*(A*D-B*C)*( hem(3,1,C,D,A,B) - hem(4,1,C,D,A,B)
+# +D*( hem(3,2,C,D,A,B) -2*hem(4,2,C,D,A,B)+hem(5,2,C,D,A,B) )
+# +D^2*( hem(3,3,C,D,A,B) -2*hem(4,3,C,D,A,B)+hem(5,3,C,D,A,B) ) );
+# eq_ori4 := -2*A*(C-2*D)*hem(4,1,C,D,A,B)-2*A*D*(2*C-3*D)*hem(4,2,C,D,A,B)
+# -6*A*D^2*hem(3,2,C,D,A,B)+1
+# = -2*(A*D-B*C)*(
+# 3*D^2*hem(3,3,C,D,A,B) + D*(3*C-8*D)* hem(4,3,C,D,A,B)
+# -(C-2*D)*hem(5,2,C,D,A,B)
+# +(C^2-5*C*D+5*D^2)*hem(5,3,C,D,A,B) );
+# eq_ori4 := hem(3,2,C,D,A,B)
+# = (1-2*A*(C-2*D)*hem(4,1,C,D,A,B)-2*A*D*(2*C-3*D)*hem(4,2,C,D,A,B)
+# +2*(A*D-B*C)*(
+# 3*D^2*hem(3,3,C,D,A,B) + D*(3*C-8*D)* hem(4,3,C,D,A,B)
+# -(C-2*D)*hem(5,2,C,D,A,B)
+# +(C^2-5*C*D+5*D^2)*hem(5,3,C,D,A,B) ) )/(6*A*D^2);
+# eq_ori4 := A*(he(3,A,B)+D*hem(3,2,1,C,D,A,B)+D^2*hem(3,2,2,C,D,A,B))-1/2
+# = (A*D-B*C)*(hem(3,2,1,C,D,A,B)+D*hem(3,3,2,C,D,A,B)
+# +D^2*hem(3,3,3,C,D,A,B));
+ eq_ori4 := hem(3,1,1,C,D,A,B)
+ = (1/2
+ - A*(D-C)*(2*D-C)*hem(3,3,2,C,D,A,B)
+ - A*(D^2+2*C*D-C^2)*hem(3,2,2,C,D,A,B)
+ + (A*D-B*C)*(
+ C*hem(3,2,2,C,D,A,B)
+ +(2*D-C)*hem(3,3,2,C,D,A,B)
+ +D^2*hem(3,3,3,C,D,A,B) ))/(A*C);
+ eq_ori5 := hem(3,2,1,A,B,C,D)
+ = (D-C)*hem(3,3,2,C,D,A,B)+C*hem(3,2,2,C,D,A,B);
+evalf(subs(A=2,B=15,C=9,D=12,lhs(eq_ori3)));
+evalf(subs(A=2,B=15,C=9,D=12,rhs(eq_ori3)));
+quit;
+#
+res_ke := -1/3*(S[1,2]-S[2,4])^2*(S[1,2]^3*ke(3,2,z2,z1)-ke(3,2,z6,z4)*S[2,4]^3-ke(3,2,z5,z3)*S[1,3]^3)/S[1,3]^3/S[2,4]^3;
+res_he := 1/6*(S[1,2]-2*S[2,4])*S[1,2]*S[2,4]/S[3,4]*hem(3,1,S[2,4]*S[1,3],S[1,2]*S[3,4],S[2,4],S[3,4])-1/6*S[1,2]^2*S[2,4]^2*hem(3,2,S[2,4]*S[1,3],S[1,2]*S[3,4],S[2,4],S[3,4])-1/6*(-S[2,4]+S[3,4]-S[1,3]+S[1,2])/S[3,4]*he(2,S[1,3],S[3,4]);
+res_cst := 1/6*(S[1,2]-S[1,3])/S[3,4]/S[1,3];
+#
+evalf(res_ke+res_he+res_cst);
+# evalf(res_he);
+# evalf(res_cst);
+# evalf(res_ke+res_he);
+# evalf(test11);
Index: 95/branches/golem95_without_olo_cmake/tool/maple2f90.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/maple2f90.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/maple2f90.pl (revision 119)
@@ -0,0 +1,184 @@
+#!/usr/bin/perl -w
+use Text::Wrap qw($columns &wrap);
+use Getopt::Long;
+GetOptions("input=s" => \$fichier_in,
+ "output=s" => \$fichier_out);
+# valeur par defaut des fichiers de parametres
+unless ($fichier_in) {
+ #~ $fichier_in = "matrix.res";
+ $fichier_in = "test.res";
+}
+unless ($fichier_out) {
+ $fichier_out = "transf_resu.txt";
+}
+#
+print "fichier_in: $fichier_in fichier_out: $fichier_out\n";
+$nb_point = 6;
+open(EWRITE,">$fichier_out") || die "$!";
+open(EREAD,"$fichier_in") || die "$!";
+$ewrite = *EWRITE;
+@l_temp = ();
+# $temp = "";
+$i = 0;
+while(<EREAD>) {
+ chomp;
+ if ( ( m/=/ ) ) {
+ s/^\s+//g;
+ s/\s//g;
+ $l_temp[$i] = $_;
+ $i++;
+ }
+ elsif ( ( m/case/ ) || ( m/select/ ) ) {
+ s/^\s+//g;
+# s/\s//g;
+ $l_temp[$i] = $_;
+ $i++;
+ }
+ else {
+ s/^\s+//g;
+ s/\s//g;
+ $l_temp[$i-1] = $l_temp[$i-1].$_;
+ }
+}
+close(EREAD);
+$cont_line = "&";
+# @temp_real = ();
+# @temp_ar = ();
+# $ii = 0;
+# print EWRITE "real(ki), dimension(6) :: tot\n";
+# for ($i1=1;$i1<=6;$i1++) {
+# for ($i2=$i1;$i2<=6;$i2++) {
+# for ($i3=$i2;$i3<=6;$i3++) {
+# $nom = "t".$i1.$i2.$i3;
+# $temp_real[$ii] = $nom;
+# $temp_ar[$ii] = "ar_".$nom;
+# $ii++;
+# }
+# }
+# }
+# $decl_real = "complex(ki) :: ".join(",",@temp_real);
+# $decl_ar = "real(ki), dimension(6) :: ".join(",",@temp_ar);
+# print_fortran($decl_real,$ewrite);
+# print_fortran($decl_ar,$ewrite);
+foreach $term (@l_temp) {
+ $term = translate($term,$cont_line,$nb_point);
+ print_fortran($term,$ewrite);
+#debugging
+# if($term =~ m/(ar_t\d\d\d)/) {
+# print EWRITE "write (*,*) \'$1:\',$1\n";
+# }
+ print EWRITE "!\n";
+}
+# $tot_ar = "tot = ".join("+",@temp_ar);
+# print_fortran($tot_ar,$ewrite);
+close(EWRITE);
+#
+#
+sub print_fortran {
+ my ($string,$df) = @_;
+ my (@l_car) = split("",$string);
+ my ($count) = 0;
+ my ($s_count) = 0;
+# my ($columns) = 58;
+ my ($columns) = 65;
+ my ($rest) = $#l_car;
+ foreach $car (@l_car) {
+ $count++;
+ $s_count++;
+ $rest--;
+ if ($count == $columns) {
+ if ($rest == -1) {
+ $car = $car."\n!";
+ }
+ else {
+ $car = $car."&\n &";
+ }
+ $count = 2;
+ }
+ print $df "$car";
+ }
+ print $df "\n";
+}
+#
+sub translate {
+ my ($term,$cont_line,$nb_point) = @_;
+ my ($complex) = 0;
+ $term =~ s/$cont_line//g;
+ $term =~ s/#//g;
+ $term =~ s/S\[(\d),(\d)\]/s_mat($1,$2)/g;
+ $term =~ tr/[A-Z]/[a-z]/;
+ $term =~ s/\^/\*\*/g;
+# on transforme les entiers en reels dans le cas ou ceux-ci:
+# 1) ne sont pas precedes par une lettre ou la chaine "**"
+# 2) ne sont pas suivis par les caracteres ",",")","]"
+# $term =~ s/(?<![\w,\*\*])(\d+)(?=\*)/$1.d0/g;
+# $term =~ s/(?<![\w,\*\*])(\d+)(?=\/)/$1.d0/g;
+ $term =~ s/(?<![\w,\*\*])(\d+)(?![\,,\),\],\d,\.:])/$1._ki/g;
+ $term =~ s/(?<=[\+\-])(\d+)(?![\,\],\),\.,\d])/$1._ki/g;
+ $term =~ s/(?<=[\/])(\d+)(?=[\)])/$1._ki/g;
+# $term =~ s/(?<![_,\(,-])s(\d+)/stemp$1/g;
+# $term =~ s/s(\d)(?![\d])/stemp$1/g;
+ $term =~ s/t0(?=[=])/temp0/g;
+ $term =~ s/dble//g;
+ $term =~ s/ln/log/g;
+# $term =~ s/(?<=z_log\()(.+)(?=\))/\1,1.d0/g;
+# $term =~ s/z_log\(s23\)/z_log(s23,1.d0)/g;
+# $term =~ s/z_log\(([\w,\d,\/,\*,\.]+)\)/z_log($1,1.d0)/g;
+ $term =~ s/z_log\(([-\w\d\/\*\.\+]+)\)/z_log($1,-1._ki)/g;
+ $term =~ s/z_log2\(([-\w\d\/\*\.\+]+)\)/z_log2($1,-1._ki)/g;
+ $term =~ s/zdilog\((\([-\w\d\+]+\)\/[-\w\d]+)\)/zdilog($1,-1._ki)/g;
+# $term =~ s/(?<![(])s23/glob_s23/g;
+ $term =~ s/q\((\d).d0,/q($1,/g;
+ $term =~ s/dets/det_s/g;
+ $term =~ s/je\((\d),0,z(\d)\)/je\($1,z$2\)/g;
+ if ($complex) {
+ $term =~ s/je\((\d),z(\d)\)/cje\($1,c$2\)/g;
+ $term =~ s/ie\((\d),z(\d),z(\d)\)/cie\($1,c$2,c$3\)/g;
+ $term =~ s/ke\((\d,\d),z(\d),z(\d)\)/cke\($1,c$2,c$3\)/g;
+ $term =~ s/x(\d)/cx$1/g;
+ $term =~ s/res_(\w)e/ces_$1e/g;
+ }
+ else {
+ $term =~ s/je\((\d),z(\d)\)/je\($1,a$2,b$2\)/g;
+ $term =~ s/ie\((\d),z(\d),z(\d)\)/ie\($1,a$2,b$2,a$3,b$3\)/g;
+ $term =~ s/ke\((\d,\d),z(\d),z(\d)\)/ke\($1,a$2,b$2,a$3,b$3\)/g;
+ $term =~ s/le\((\d,\d,\d),z(\d),z(\d)\)/le\($1,a$2,b$2,a$3,b$3\)/g;
+ }
+ $term =~ s/hem\((\d,\d),s_mat\((\d),(\d)\)\*s_mat\((\d),(\d)\),s_mat\((\d),(\d)\)\*s_mat\((\d),(\d)\),s_mat\((\d),(\d)\),s_mat\((\d),(\d)\)\)/hem\($1,cs$2$3_$4$5,cs$6$7_$8$9,cs$10$11,cs$12$13\)/g;
+ $term =~ s/hem\((\d,\d),s_mat\((\d),(\d)\),s_mat\((\d),(\d)\),s_mat\((\d),(\d)\)\*s_mat\((\d),(\d)\),s_mat\((\d),(\d)\)\*s_mat\((\d),(\d)\)\)/hem\($1,cs$2$3,cs$4$5,cs$6$7_$8$9,cs$10$11_$12$13\)/g;
+ $term =~ s/hem\((\d,\d),s_mat\((\d),(\d)\),s_mat\((\d),(\d)\),s_mat\((\d),(\d)\),s_mat\((\d),(\d)\)\)/hem\($1,cs$2$3,cs$4$5,cs$6$7,cs$8$9\)/g;
+ $term =~ s/ln\(\-s_mat\((\d),(\d)\)\)/z_log(-s_mat\($1,$2\),-1.d0\)/g;
+# $term =~ s/s_mat\(1,3\)/m1/g;
+# $term =~ s/ln\((.*)\)/z_log($1,-1.d0\)/g;
+# cas en partant d'une amplitude a quatre points
+ if ($nb_point == 4) {
+ $term =~ s/GA42\((\d,\d)\)/a42\($1,s_null\)/g;
+ $term =~ s/GB42/b42\(s_null\)/g;
+ $term =~ s/GA44\((\d,\d,\d,\d)\)/a44\($1,s_null\)/g;
+ $term =~ s/GB44\((\d,\d)\)/b44\($1,s_null\)/g;
+ $term =~ s/GC44/c44\(s_null\)/g;
+ $term =~ s/GA40/a40\(s_null\)/g;
+ $term =~ s/GA32\((\d,\d),(\d)\)/a32\($1,\(\/$2\/\)\)/g;
+ $term =~ s/GA30\((\d)\)/a30\(\(\/$1\/\)\)/g;
+ $term =~ s/GB32\((\d)\)/b32\(\(\/$1\/\)\)/g;
+ $term =~ s/GA20\((\d),(\d)\)/a20\(\(\/$1,$2\/\)\)/g;
+ }
+ elsif ($nb_point == 6) {
+ $term =~ s/GC54\((\d)\)/c54\(\{$1\}\)/g;
+ $term =~ s/GB54\((\d,\d),(\d)\)/b54\($1,\{$2\}\)/g;
+ $term =~ s/GB53\((\d),(\d)\)/b53\($1,\{$2\}\)/g;
+ $term =~ s/GB52\((\d)\)/b52\(\{$1\}\)/g;
+ $term =~ s/GA54\((\d,\d,\d,\d),(\d)\)/a54\($1,\{$2\}\)/g;
+ $term =~ s/GA53\((\d,\d,\d),(\d)\)/a53\($1,\{$2\}\)/g;
+ $term =~ s/GA52\((\d,\d),(\d)\)/a52\($1,\{$2\}\)/g;
+ $term =~ s/GA51\((\d),(\d)\)/a51\($1,\{$2\}\)/g;
+ $term =~ s/GA42\((\d,\d),(\d,\d)\)/a42\($1,\{$2\}\)/g;
+ $term =~ s/GB42\((\d,\d)\)/b42\(\{$1\}\)/g;
+ $term =~ s/GA44\((\d,\d,\d,\d),(\d,\d)\)/a44\($1,\{$2\}\)/g;
+ $term =~ s/GB44\((\d,\d),(\d,\d)\)/b44\($1,\{$2\}\)/g;
+ $term =~ s/GC44\((\d,\d)\)/c44\(\{$1\}\)/g;
+ $term =~ s/GA63\((\d,\d,\d)\)/a63\($1,s_null\)/g;
+ }
+ return($term)
+}
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_var.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_var.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_var.m (revision 119)
@@ -0,0 +1,16 @@
+r1 := -(z1*z2*s12+z1*z3*s13+z1*z4*s14+z2*z3*s23+z2*z4*s24+z3*z4*s34);
+r2 := subs(z1=w*(1-y),z2=w*x*y*z,z3=w*x*y*(1-z),z4=w*y*(1-x),r1);
+r2 := subs(z1=u*x*z,z2=ub*x*z,z3=v*xb*z,z4=vb*xb*z,z=1,r1);
+quit;
+
+r2 := factor(subs(w=1,r2/y));
+By := factor(coeff(r2,y,1));
+Ay := factor(coeff(r2,y,0));
+collect(By,[x,z],factor);
+collect(Ay,[x,z],factor);
+collect(Ay+By,[x,z],factor);
+Dz := coeff(By,x,1);
+Ez := coeff(By,x,2);
+Cz := coeff(By,x,0);
+Delta := factor(Dz^2-4*Ez*Cz):
+Delta := collect(Delta,z,factor);
Index: 95/branches/golem95_without_olo_cmake/tool/comp_num_3p2m.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/comp_num_3p2m.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/comp_num_3p2m.m (revision 119)
@@ -0,0 +1,44 @@
+########################################################################
+#
+# initialisation
+#
+########################################################################
+# Digits := 16;
+Digits := 30;
+#
+########################################################################
+########################################################################
+#
+#
+$include "I3Result.m"
+#
+fd := fopen("temp_file.f90",WRITE);
+lambda := 1e-10;
+j := 0;
+#
+# list_x := [-1000,-100,-50,-10,-1,1,10,50,100,1000];
+list_x := [-1000,-5,5,1000];
+imax := 4;
+for ix from 1 to imax do
+X := list_x[ix]+I*lambda;
+# for iy from 1 to imax do
+# if (iy <> ix) then
+j := j + 1;
+# Y := list_x[iy]+I*lambda;
+Y := 0;
+# Diag := Compute3p(ISca(n,3,2,2,2,0,Y,X));
+# Diag := Compute3p(ISca(n,3,2,2,2,0,Y,X));
+Diag := Compute3p(ISca(n,3,0,Y,X));
+Diag := evalf(Diag);
+c2 := coeff(Diag,epsilon,-2);
+c1 := coeff(Diag,epsilon,-1);
+c0 := coeff(Diag,epsilon,0);
+fprintf(fd,"%1.15e %1.15e %1.15e %1.15e %1.15e %1.15e %1.15e %1.15e\n",evalf(Re(X)),evalf(Re(Y)),Re(c2),Im(c2),Re(c1),Im(c1),Re(c0),Im(c0));
+# end if;
+# end do;
+end do;
+#
+fclose(fd);
+quit;
+
+
Index: 95/branches/golem95_without_olo_cmake/tool/test_for.res
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/test_for.res (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/test_for.res (revision 119)
@@ -0,0 +1,330 @@
+ s2 = -t1**2*s23**2*t2**4/3+11.D0/12.D0*t2**2*s23**2*t3**3-s23**2*t
+ #1*t2**3*t3*t4-s23**2*t1*t2*t3*t4*t5**2-s23**2*t2*t3**2*t5*t1/12+5.
+ #D0/4.D0*t2*s23**3*t1*t3**2-t3**2*t2**2*t1*s23**2/12-5.D0/2.D0*s23*
+ #*3*t1*t3**2*t4+11.D0/4.D0*s23**3*t3**2*t2**2*t4-11.D0/2.D0*s23**3*
+ #t2*t4**2*t3**2-s23**2*t1**2*t2*t5**3/3-s23**2*t1**2*t2**3*t5-s23**
+ #2*t1**2*t2**2*t5**2+s23**2*t1*t2**4*t3/2-17.D0/6.D0*s23**2*t2**2*t
+ #3**2*t4**2-17.D0/24.D0*s23**2*t2**3*t3**2*t5+17.D0/6.D0*s23**2*t2*
+ #*3*t4*t3**2+2.D0/3.D0*s23*t1*t3*t2**5-7.D0/12.D0*s23*t3**2*t5*t2**
+ #4-5.D0/6.D0*s23*t3**2*t2**3*t5**2+7.D0/6.D0*s23*t2**2*t3**3*t5
+ s1 = s2+5.D0/3.D0*s23*t2**4*t3**2*t4-11.D0/6.D0*s23**2*t3**3*t2*t4
+ #+s23*t2**3*t3**3/12-67.D0/12.D0*t3**2*t2**4*t5**2-59.D0/12.D0*t2**
+ #5*t3**2*t5-11.D0/24.D0*s23**3*t3**2*t2**3-5.D0/6.D0*s23*t2**5*t3**
+ #2+11.D0/3.D0*s23**3*t3**2*t4**3-11.D0/12.D0*t2**3*t3**2*t5**3-17.D
+ #0/24.D0*s23**2*t3**2*t2**4-2*s23**2*t1*t3*t4*t5*t2**2-17.D0/6.D0*s
+ #23**2*t2*t3**2*t4**2*t5-11.D0/12.D0*t3**2*t2**6+s23**2*t1*t3*t5*t2
+ #**3+s23**2*t1*t2**2*t3*t5**2/2+17.D0/6.D0*s23**2*t3**2*t4*t2**2*t5
+ #+2.D0/3.D0*s23*t1*t3*t2**2*t5**3+2*s23*t1*t3*t2**3*t5**2+2*s23*t1*
+ #t5*t2**4*t3+5.D0/3.D0*s23*t3**2*t2**2*t4*t5**2+7.D0/6.D0*s23*t3**2
+ #*t2**3*t4*t5
+ s2 = 1/t3**2/t2**6
+ t0 = s1*s2
+ s6 = -35.D0/4.D0*t3**5*t2**7*t1**2-152*t4**4*t3**5*t2**7-t1**3*t2*
+ #*11*t3**2/6+18*s23*t1**6*t4**2*t5**3*t2**3+16*t1**5*t3**3*t2**5-5*
+ #t1**5*t5**5*t2**6+91.D0/4.D0*s23**2*t4*t3**3*t2**6*t1**3+4*t1**5*t
+ #3*t2**9-84*t1**5*t4**3*t3**2*t5**2*t2**2-75.D0/2.D0*s23*t1**6*t4*t
+ #5**2*t2**5-152*s23*t4**4*t3**4*t2**6*t1+24*t1**4*t4**5*t5**2*t2**4
+ #*t3-375*s23*t1**5*t5**4*t4**3*t2**3+414*s23**2*t1**3*t3**3*t4**5*t
+ #2**2-220*t1*t3**4*t4**7*t2**3*t5+242*s23*t4**5*t3**4*t2**5*t1-375*
+ #t1**5*t3*t5**4*t2**4*t4-11.D0/2.D0*t1**3*t3**2*t2**9*t4**2
+ s5 = s6-44*t1**3*t4**4*t3**4*t2**3-11*t1**3*t4**4*t3**2*t2**7-4.D0
+ #/3.D0*t1**3*t4**6*t3**2*t2**5+21.D0/2.D0*t1**3*t4**3*t3**2*t2**8+1
+ #05.D0/2.D0*t1**3*t3**5*t4**3*t2**2-110*t1**3*t3**5*t4**2*t2**3-44*
+ #t1**3*t2**5*t3**4*t4**2+45*s23*t1**6*t4**2*t5**2*t2**4+3.D0/4.D0*s
+ #23**2*t3**2*t2**8*t1**3*t5-75*s23**2*t1**7*t3*t5**2*t4-3420*s23*t1
+ #**5*t3*t5**3*t2**3*t4**2+48*s23**2*t1**4*t4**4*t3*t2**5+175.D0/12.
+ #D0*t3**4*t5*t2**8*t1**2-300*t1**5*t3**2*t5**3*t2**4+48*t1**5*t3*t2
+ #**7*t5**2-72*t1**5*t3**2*t5*t2**6-7*t1**5*t4**3*t2**6*t3+84*t1**4*
+ #t4*t3**3*t2**6-36*t1**5*t4**2*t5*t2**6*t3
+ s6 = -7.D0/2.D0*s23*t1**6*t4**3*t5*t2**4-132*s23**2*t1**3*t3**2*t5
+ #*t4**7*t2+84*s23**2*t1**2*t3**3*t4**7*t2**2+36*s23*t1**6*t3**2*t5*
+ #t2**3+30*t1**4*t3**2*t2**8*t5+50*t1**4*t4**3*t3**3*t2**4-114*t1**4
+ #*t4**2*t3**3*t2**5+24*t1**3*t4**5*t3**3*t2**4-88*t1**3*t3**3*t2**7
+ #*t4**2-88*t1**3*t4**4*t3**3*t2**5+126*t1**3*t3**3*t2**6*t4**3-s23*
+ #t3**4*t2**10*t1/6+1200*t1**2*t3**4*t5*t2**4*t4**4-690*t1*t3**4*t4*
+ #*5*t2**5*t5+56*t1**5*t4**3*t5**3*t2**3*t3+750*t1**5*t3**2*t5**3*t4
+ #*t2**3+360*s23*t1**6*t5**3*t4**2*t2*t3-180*s23*t1**6*t5**4*t4**2*t
+ #2**2+165.D0/2.D0*s23**2*t4*t2**6*t3*t1**5
+ s4 = s6+1125.D0/2.D0*t4**4*t5*t3**4*t2**6*t1-63*s23*t1**5*t4*t5**2
+ #*t3*t2**5+1920*s23*t1**3*t3**3*t5*t2**3*t4**4-480*s23*t1**3*t3**4*
+ #t4**4*t2**2+5130*s23*t1**5*t3**2*t5**2*t4**2*t2**2-2250*s23*t1**5*
+ #t3**2*t5**2*t4**3*t2+30*t1**5*t4*t3*t2**7*t5+132*t1**3*t4**4*t3**2
+ #*t2**6*t5+300*s23*t1**4*t3**4*t4*t2**3+210*s23*t1**4*t3**4*t4**3*t
+ #2+40*s23*t1**6*t3**3*t5*t2-720*s23**2*t1**4*t3**3*t4**4*t2-75.D0/2
+ #.D0*s23*t1**5*t3**2*t2**6-15*t1**5*t4*t2**8*t3+18*t1**5*t4**2*t2**
+ #7*t3-20*t1**5*t3**3*t2**4*t4-25.D0/2.D0*s23*t1**6*t4*t3**2*t2**3-1
+ #7.D0/2.D0*s23*t4**2*t3**3*t2**6*t1**3+3.D0/8.D0*s23*t1**5*t2**10+s
+ #5
+ s6 = 8*t1**5*t3**4*t2**3-5.D0/2.D0*t1**4*t3**2*t2**9-760.D0/3.D0*t
+ #2**5*t3**5*t4**6+242*t4**5*t3**5*t2**6+1664.D0/3.D0*s23*t1**2*t3**
+ #3*t4**6*t2**3*t5-12*s23*t1**5*t4**4*t5*t2**5+4*s23*t1**6*t4**4*t5*
+ #*3*t2+165*s23**2*t3*t2**5*t1**5*t5**2+105.D0/4.D0*s23**2*t3**2*t5*
+ #t2**6*t1**4-10*s23*t1**6*t5**3*t2**4*t4+275*t1**3*t3**4*t5*t4**4*t
+ #2**2+44*t1**3*t4**2*t5*t3**3*t2**6-57*t1**4*t4**2*t3**4*t2**3-250*
+ #t1**4*t3**3*t5**2*t2**5+35.D0/2.D0*t1**4*t3**5*t2**2*t4+2*t1**4*t4
+ #**5*t3*t2**6+28*t1**2*t4**5*t3**4*t2**4-40.D0/3.D0*t1**2*t4**6*t3*
+ #*4*t2**3-64*t1**2*t3**3*t2**7*t4**4
+ s5 = s6+8.D0/3.D0*t1**2*t4**7*t3**4*t2**2+16.D0/3.D0*t1**2*t4**7*t
+ #3**3*t2**4+40*t1*t3**4*t4**8*t2**2*t5+600*s23*t4**4*t3**3*t2**5*t1
+ #**2*t5-129.D0/4.D0*s23**2*t4**3*t2**6*t1**4*t3-495.D0/2.D0*s23**2*
+ #t3**2*t5*t2**5*t1**4*t4-1575.D0/2.D0*t1**3*t3**4*t5*t4**3*t2**3-20
+ #0*t1**4*t4**3*t3**3*t5*t2**3-285.D0/4.D0*s23*t1**5*t5**2*t2**6*t4*
+ #*2+300*s23*t1**6*t3**2*t5**2*t2*t4+24*t1**4*t4**5*t5**2*t3**2*t2**
+ #2-1200*s23*t1**4*t3**3*t4*t2**4*t5-1000.D0/3.D0*t1**2*t3**3*t4**6*
+ #t2**3*t5**2-855.D0/4.D0*s23*t1**5*t4**2*t3**2*t2**4+100*t1**5*t3*t
+ #5**4*t2**5-48*t1**5*t3**3*t2**4*t5+5*t1**5*t4*t2**9*t5-7*t1**5*t4*
+ #*3*t5**2*t2**6+2*t1**5*t4**4*t5**2*t2**5
+ s6 = 25*t1**5*t5**5*t2**5*t4+20*t1**5*t5**3*t2**7*t4+35*t1**5*t5**
+ #5*t4**3*t2**3-10*t1**5*t5**5*t4**4*t2**2-120*s23*t3**2*t2**6*t1**4
+ #*t5**2-72*t1**5*t4**2*t5**3*t2**4*t3-126*s23*t1**5*t3**3*t2**3*t4-
+ #250*t1**5*t3**3*t5**2*t4*t2**2+40*s23*t1**3*t3**2*t2**6*t4**4+120*
+ #s23*t1**5*t4**4*t5*t2**3*t3+1155.D0/2.D0*s23**2*t1**5*t5**3*t4**3*
+ #t2**3-64*s23*t1*t2**2*t3**4*t4**8+720*s23*t1**4*t3**2*t5**2*t4**5*
+ #t2+66*s23*t1**4*t4**2*t5*t3**2*t2**5-84*t1**5*t4**3*t5**2*t2**4*t3
+ #-40.D0/3.D0*s23*t1**3*t4**6*t3**3*t2**2+19*t1**4*t5*t2**8*t3*t4**2
+ #+385*s23*t4**3*t3**4*t2**5*t1**2+200*s23*t3**3*t2**5*t1**4*t5-215.
+ #D0/8.D0*s23*t4**3*t2**7*t1**3*t3**2
+ s3 = s6+54*s23*t1**6*t4**2*t3**2*t5*t2-5*s23*t3**2*t2**8*t1**3*t5*
+ #*2+330*s23**2*t1**5*t5**3*t4**5*t2+121*s23**2*t1**5*t4**4*t5*t2**4
+ #-45*s23*t1**6*t4**2*t5*t2**3*t3+30*s23*t1**4*t4*t3**3*t2**5+150*s2
+ #3*t1**6*t5**4*t4*t2**3+2*s23*t3**2*t5*t2**7*t1**4+165.D0/2.D0*s23*
+ #*2*t4*t5**3*t2**5*t1**5-5.D0/3.D0*s23*t3*t5*t2**9*t1**4-25*t1**4*t
+ #4**3*t5*t2**7*t3+120*t1**5*t3**3*t2**3*t4*t5-105*s23*t1**5*t5**4*t
+ #2**5*t4-75.D0/2.D0*s23*t1**5*t4**3*t3*t2**5-33.D0/2.D0*s23**2*t4*t
+ #2**7*t1**5*t5-219.D0/2.D0*s23**2*t4**2*t3**3*t2**5*t1**3-1075*t1**
+ #2*t3**4*t2**5*t4**3*t5+70.D0/3.D0*s23*t3**3*t5*t2**7*t1**3+s4+s5
+ s6 = -14*s23*t1**6*t4**3*t5**3*t2**2+60*s23*t1**4*t4**5*t3*t2**4*t
+ #5-375*s23**2*t1**6*t3*t5**2*t2**3-285.D0/2.D0*s23**2*t1**6*t4**2*t
+ #5*t2**4-11*s23*t1**4*t4**4*t3*t2**6-2520*s23*t1**4*t3**3*t5*t4**3*
+ #t2**2-4275.D0/2.D0*s23**2*t1**6*t3*t5**2*t2*t4**2-114*t1**4*t5**2*
+ #t3*t2**7*t4**2+1875.D0/2.D0*s23**2*t1**6*t3*t5**2*t4**3+t1**4*t5*t
+ #2**10*t3-8*t1**4*t4**4*t3*t2**7+25.D0/2.D0*t1**4*t4**3*t2**8*t3-6*
+ #t1**4*t5**2*t3*t2**9-6*t1**4*t3**2*t5**2*t2**7+25*t1**4*t3**4*t4**
+ #3*t2**2-25.D0/2.D0*t1**4*t5**4*t2**7*t3-19.D0/2.D0*t1**4*t4**2*t2*
+ #*9*t3+42*t1**4*t3**4*t2**4*t4-120*s23*t4*t5**3*t2**6*t1**4*t3
+ s5 = s6-375*s23*t1**5*t4**3*t5*t2**4*t3+144*s23*t1**5*t4**4*t5**2*
+ #t3*t2**2+24*s23*t1**4*t4**5*t3**3*t2-350*t1**4*t3**4*t4*t5*t2**3+5
+ #*s23**2*t1**7*t3*t2**2*t4-75*s23*t1**5*t4**3*t3**3*t2+80*s23*t1**3
+ #*t3**2*t5**2*t4**7*t2+219.D0/4.D0*s23**2*t3**2*t2**6*t1**3*t4**2*t
+ #5+121*s23**2*t4**5*t3**3*t2**4*t1**2+5.D0/4.D0*s23**2*t3**3*t2**8*
+ #t1**2*t4-308*s23*t4**3*t3**3*t2**6*t1**2*t5+2125.D0/4.D0*t4**2*t3*
+ #*4*t2**6*t1**2*t5-108*t1**5*t4**2*t3**2*t2**4*t5-33.D0/4.D0*s23**2
+ #*t3**3*t2**7*t1**2*t4**2+15*t1**3*t2**6*t3**4*t4+12*t1**3*t4**5*t3
+ #**4*t2**2+75*t1**3*t3**5*t4*t2**4-240*t1**2*t2**3*t3**5*t4**4-425.
+ #D0/2.D0*t1**2*t2**5*t3**5*t4**2
+ s6 = 70*t1**2*t2**2*t3**5*t4**5+645.D0/2.D0*t1**2*t2**4*t3**5*t4**
+ #3+63*t1**3*t2**4*t3**4*t4**3+625.D0/2.D0*t1**4*t4**3*t3*t5**4*t2**
+ #4-700*t1**4*t3**2*t5**3*t2**5*t4+16*s23*t1**4*t4**6*t5*t3**2*t2+13
+ #2*s23*t1**4*t4**4*t5*t3**2*t2**3-t3**4*t2**9*t1**2/6+75*s23**2*t1*
+ #*7*t5**3*t2*t4+228*t1**4*t3**3*t5*t2**4*t4**2-65.D0/4.D0*t5*t3**4*
+ #t2**9*t1*t4+375*t3**3*t4*t5**2*t2**6*t1**3+3000*s23*t1**5*t5**3*t4
+ #**3*t2**2*t3-1275.D0/2.D0*s23**2*t1**4*t3**3*t4**2*t2**3+2640*s23*
+ #t1**4*t3**3*t5*t4**2*t2**3+880*s23*t1**4*t3**3*t5*t4**4*t2+90*s23*
+ #t1**6*t3*t5**2*t2**3*t4+88*t1**3*t4**4*t3**3*t2**4*t5+252*s23*t1**
+ #5*t3**2*t5*t2**4*t4
+ s4 = s6+850*s23*t4**2*t3**3*t2**5*t1**3*t5-48*t1**3*t4**5*t3**3*t2
+ #**3*t5-720*s23**2*t1**4*t4**4*t3*t5**2*t2**3+1575*s23**2*t1**6*t3*
+ #t5**2*t2**2*t4+552*s23*t1**2*t3**4*t4**5*t2**3-800*t1**2*t3**3*t4*
+ #*4*t2**5*t5**2+50.D0/3.D0*s23*t1**3*t4**6*t3**2*t2**4+825*t1**3*t3
+ #**4*t5*t4**2*t2**4+315.D0/2.D0*s23*t1**5*t3**2*t2**5*t4+171.D0/4.D
+ #0*s23*t1**5*t4**2*t3*t2**6+375.D0/4.D0*s23*t1**5*t4**3*t5**2*t2**5
+ #+840*s23*t1**3*t3**2*t5**2*t4**5*t2**3+1050*t1**4*t3**3*t4*t2**4*t
+ #5**2-45*s23*t1**5*t3**2*t5*t2**5+1680*s23*t1**5*t3*t5**3*t2**4*t4-
+ #2*s23**2*t3**3*t2**7*t1**3+s23**2*t3*t2**9*t1**4/4-4*s23**2*t1**7*
+ #t3*t2**3-45*s23**2*t1**7*t5**3*t4**2+s5
+ s6 = -30*s23**2*t1**7*t5**3*t2**2+6*s23**2*t1**7*t5*t2**4-2640*s23
+ #*t1**4*t3**2*t5**2*t4**4*t2**2+11.D0/3.D0*t4*t2**10*t1**2*t3**3-17
+ #*t4**2*t2**9*t1**2*t3**3-s23**2*t3**3*t2**9*t1**2/12+9*t1**5*t4**2
+ #*t5**2*t2**7+9*t1**5*t4**2*t3**2*t2**5+7*t1**5*t4**3*t2**7*t5-8*t1
+ #**5*t4**4*t5**3*t2**4-15*t1**5*t3**2*t2**6*t4-8*t1**5*t5**3*t2**6*
+ #t3+216*t1**5*t4**2*t5**2*t2**5*t3+880*s23*t1**4*t4**4*t3*t5**3*t2*
+ #*3+176.D0/3.D0*s23*t1**2*t3**4*t4**7*t2-40.D0/3.D0*s23*t1**4*t4**6
+ #*t5*t3*t2**3+240*s23*t1**5*t5**4*t4**4*t2**2+9*s23*t1**5*t3*t5**2*
+ #t2**6+1425*t1**4*t3**2*t5**3*t2**4*t4**2
+ s5 = s6-210*s23*t1**5*t3*t2**6*t4*t5+450*s23*t1**5*t4**3*t3**2*t5*
+ #t2**2-625*s23**2*t1**6*t5**3*t4**3*t2+55*s23*t3**2*t2**7*t1**3*t4*
+ #t5**2-24*s23*t1**6*t5**2*t3*t2**4+375.D0/4.D0*s23*t1**5*t4**3*t3**
+ #2*t2**3-375*t1**3*t3**4*t4*t2**5*t5+700*t1**2*t3**3*t4**5*t2**4*t5
+ #**2+500.D0/3.D0*t1**2*t3**4*t5*t4**6*t2**2+12*s23*t1**5*t4**4*t3*t
+ #2**4+200.D0/3.D0*t1**2*t3**3*t4**7*t5**2*t2**2+3*s23*t1**5*t4**5*t
+ #5*t2**4-t3**3*t2**11*t1**2/3-175*t1**5*t5**4*t4**3*t3*t2**2+3825.D
+ #0/4.D0*s23**2*t4**2*t3**2*t2**4*t1**4*t5-9.D0/2.D0*s23*t1**6*t4**2
+ #*t3*t2**4+4.D0/3.D0*s23*t3**3*t2**9*t1**2*t5-33.D0/2.D0*s23*t3**4*
+ #t2**8*t1*t4**2-605*s23**2*t1**5*t5**3*t4**4*t2**2
+ s6 = 24*s23**2*t1**3*t3**2*t5*t4**8-450*s23**2*t1**3*t3**3*t2**3*t
+ #4**4-168*t1**4*t3**2*t2**7*t4*t5-15*s23**2*t1**7*t4*t5*t2**3+70*s2
+ #3**2*t1**6*t4*t5*t2**5+1425.D0/2.D0*s23**2*t1**6*t3**2*t5*t4**2-35
+ #0*s23**2*t1**6*t5**3*t4*t2**3+825.D0/4.D0*s23**2*t3**3*t2**4*t1**4
+ #*t4+50*t1**4*t5**4*t4**5*t2**2*t3-1050*s23**2*t1**6*t3**2*t5*t2*t4
+ #-21*s23*t1**5*t4*t3*t2**7-146*s23*t4**2*t3**4*t2**6*t1**2-88*s23*t
+ #1**4*t4**2*t3**3*t2**4+21.D0/4.D0*s23*t1**5*t5*t2**8*t4-60*s23*t1*
+ #*5*t5**4*t4**5*t2-144*s23*t1**5*t4**4*t3**2*t5*t2-36*s23*t1**5*t4*
+ #*5*t5**2*t3*t2-42*s23**2*t1**4*t4**5*t3*t2**4-55*s23*t4**2*t2**7*t
+ #1**4*t3*t5-1425*t1**4*t3**3*t5**2*t4**2*t2**3
+ s2 = s6+85.D0/8.D0*s23*t4**2*t2**8*t1**3*t3**2+16*t1**4*t4**4*t5*t
+ #2**6*t3-36*t1**5*t4**2*t5**3*t2**6-9*t1**5*t4**2*t2**8*t5-5*t1**5*
+ #t5**2*t2**8*t4-8*t1**5*t3*t2**8*t5-25*t1**5*t3**4*t2**2*t5+28*t1**
+ #5*t4**3*t5**3*t2**5-2*t1**5*t4**4*t2**6*t5-45*t1**5*t5**5*t4**2*t2
+ #**4-700*t1**2*t3**4*t5*t4**5*t2**3-52.D0/3.D0*s23*t3**3*t2**8*t1**
+ #2*t4*t5+6*s23*t1**4*t4**5*t3*t2**5-32*s23*t1**3*t4**4*t3**3*t2**4+
+ #8.D0/3.D0*s23*t1**3*t4**7*t3**3*t2-39.D0/4.D0*s23**2*t3**2*t2**7*t
+ #1**3*t4*t5+400*t1**4*t3**2*t5**3*t4**4*t2**2+s3+s4+s5
+ s6 = 693.D0/2.D0*s23**2*t1**5*t3*t2**4*t4**3-t3**5*t2**11/6+900*s2
+ #3*t3**2*t4*t5**2*t2**5*t1**4+43.D0/2.D0*s23*t1**3*t4**3*t3**3*t2**
+ #5+28*s23*t1**3*t4**5*t3**3*t2**3-10.D0/3.D0*s23*t1**3*t4**7*t3**2*
+ #t2**3-275.D0/2.D0*t4*t3**4*t2**7*t1**2*t5+2*t3**2*t5*t2**10*t1**3+
+ #125.D0/2.D0*t3**4*t2**6*t1**3*t5+275.D0/4.D0*t3**5*t2**6*t1**2*t4+
+ #91.D0/4.D0*t4*t3**5*t2**8*t1+25.D0/3.D0*t5**3*t3**2*t2**8*t1**3-24
+ #2*s23**2*t1**5*t3*t2**5*t4**2+43.D0/2.D0*t1**2*t4**3*t3**4*t2**6-5
+ #5.D0/24.D0*s23*t4*t2**9*t1**3*t3**2+320.D0/3.D0*s23*t1**4*t5**3*t4
+ #**6*t2*t3+15*s23*t4*t2**8*t1**4*t3*t5+96*t1**4*t4**4*t3**2*t2**4*t
+ #5-75*t4*t5**3*t2**7*t1**3*t3**2
+ s5 = s6-18*s23*t3**2*t4*t2**6*t1**4*t5-414*s23**2*t1**3*t3**2*t5*t
+ #4**5*t2**3+312*s23**2*t1**3*t3**2*t5*t4**6*t2**2-4*t1**4*t4**5*t5*
+ #t2**5*t3-180*t1**5*t3**2*t5**2*t2**4*t4-72*t1**3*t4**5*t3**2*t2**5
+ #*t5+1075.D0/2.D0*t4**3*t3**3*t2**6*t1**2*t5**2+11.D0/6.D0*s23*t3**
+ #3*t2**7*t1**3*t4+377.D0/6.D0*s23*t3**4*t2**7*t1*t4**3-475.D0/2.D0*
+ #t1**4*t4**2*t3*t5**4*t2**5+10*s23*t1**6*t3**3*t2*t4+15.D0/2.D0*s23
+ #*t1**6*t3*t2**5*t4+91.D0/3.D0*s23*t4*t3**4*t2**7*t1**2+171*s23*t1*
+ #*5*t4**2*t3**3*t2**2+32.D0/3.D0*t1**3*t4**6*t3**3*t2**2*t5-10*t1**
+ #4*t3**4*t2**5+377.D0/6.D0*t3**5*t2**8*t4**3-50.D0/3.D0*t1**3*t3**5
+ #*t2**5+5.D0/2.D0*t3**5*t2**10*t4
+ s6 = 292.D0/3.D0*s23*t3**3*t2**7*t1**2*t4**2*t5-255*s23*t4**2*t3**
+ #2*t2**6*t1**3*t5**2-125.D0/2.D0*s23**2*t1**6*t4**3*t3*t2**2+200.D0
+ #/3.D0*t1**3*t3**2*t5**3*t4**6*t2**2-525*t1**3*t3**2*t5**3*t2**5*t4
+ #**3+60*s23**2*t1**7*t3*t5**2*t2+9*s23**2*t1**7*t4**2*t5*t2**2-35.D
+ #0/2.D0*s23*t1**6*t4**3*t5**2*t2**3-15.D0/2.D0*s23*t1**6*t5*t2**6*t
+ #4+300*t1**3*t3**3*t5**2*t4**5*t2**2-10395.D0/2.D0*s23**2*t1**5*t3*
+ #t5**2*t2**2*t4**3+3630*s23**2*t1**5*t3*t5**2*t4**4*t2+3.D0/2.D0*s2
+ #3*t1**4*t3*t2**9*t4+21.D0/2.D0*s23*t1**4*t3*t2**7*t4**3-2640*s23*t
+ #1**4*t3**2*t5**2*t2**4*t4**2+3780*s23*t1**4*t3**2*t5**2*t2**3*t4**
+ #3-380.D0/3.D0*s23**2*t1**2*t3**3*t4**6*t2**3+168*t2**4*t3**5*t4**7
+ #-88*s23*t1**4*t4**4*t3**3*t2**2
+ s4 = s6-11.D0/2.D0*s23*t1**4*t3*t2**8*t4**2-8*s23*t1**6*t3**3*t2**
+ #2-3*s23*t1**6*t3*t2**6+10*s23*t1**6*t5**2*t2**6+2*s23*t1**6*t5*t2*
+ #*7+2*s23*t1**6*t5**3*t2**5+4.D0/3.D0*t3**3*t5*t2**8*t1**3+10*s23*t
+ #1**6*t3**2*t2**4-35*s23*t1**3*t4**5*t3**2*t2**5-21.D0/8.D0*s23*t1*
+ #*5*t4*t2**9-3.D0/4.D0*s23*t1**5*t5*t2**9+15.D0/4.D0*s23*t1**5*t3*t
+ #2**8-200.D0/3.D0*s23*t1**4*t3**4*t2**4-s23*t1**4*t2**10*t3/6-25.D0
+ #/6.D0*t3**3*t2**9*t1**2*t5**2-219.D0/2.D0*t4**2*t3**5*t2**7*t1+115
+ #5.D0/4.D0*t4**3*t3**5*t2**6*t1+48*t1**5*t3**2*t5**2*t2**5+20*s23**
+ #2*t1**4*t4**6*t3*t2**3+s5
+ s6 = -4*s23**2*t1**4*t4**7*t3*t2**2+75.D0/4.D0*s23*t1**5*t4**3*t5*
+ #t2**6+14*t1**5*t4**3*t5*t2**5*t3-600*s23*t1**5*t3**3*t2**3*t5+75.D
+ #0/2.D0*s23*t1**5*t3*t2**7*t5-704.D0/3.D0*s23*t1**2*t3**3*t4**7*t2*
+ #*2*t5-736*s23*t1**2*t3**3*t4**5*t2**4*t5+285.D0/2.D0*s23**2*t1**6*
+ #t4**2*t3*t2**3+110*s23*t1**4*t3**2*t2**6*t4**2+550.D0/3.D0*s23**2*
+ #t1**5*t3**3*t2**3-1155.D0/2.D0*s23**2*t1**5*t3**3*t4**3+210*s23**2
+ #*t1**4*t3**3*t4**5+44*s23**2*t1**3*t3**3*t4**7+16.D0/3.D0*s23**2*t
+ #1**2*t3**3*t4**9-55.D0/6.D0*s23**2*t5**3*t2**6*t1**5-11*s23**2*t3*
+ #t2**7*t1**5+11.D0/6.D0*s23**2*t2**8*t1**5*t5-105.D0/4.D0*s23**2*t3
+ #**3*t2**5*t1**4-18*t4*t2**9*t1**3*t3**2*t5
+ s5 = s6-12*t3**3*t4*t2**7*t1**3*t5-s23*t1**6*t2**8-4.D0/3.D0*s23*t
+ #1**4*t4**6*t3*t2**4-960*s23*t1**3*t3**2*t5**2*t4**4*t2**4-400*s23*
+ #t1**3*t4**6*t3**2*t5**2*t2**2+630*s23**2*t1**4*t4**5*t3*t5**2*t2**
+ #2-1140*s23*t1**5*t3**3*t4**2*t5*t2-32*t1**2*t4**4*t3**4*t2**5-80.D
+ #0/3.D0*t1**2*t4**6*t3**3*t2**5+56*t1**2*t4**5*t3**3*t2**6+44*t1*t2
+ #**2*t3**5*t4**7-450*t1*t2**5*t3**5*t4**4-208*t1*t2**3*t3**5*t4**6-
+ #4*t1**5*t5**3*t2**8+165.D0/4.D0*s23**2*t3*t2**6*t1**4*t4*t5**2-32*
+ #s23**2*t1**2*t3**3*t4**8*t2+168*s23*t1*t2**3*t3**4*t4**7-760.D0/3.
+ #D0*s23*t1*t2**4*t3**4*t4**6+32.D0/3.D0*s23*t1*t2*t3**4*t4**9
+ s6 = 128.D0/3.D0*s23*t1**2*t3**3*t4**8*t5*t2-30*s23*t1**4*t4**5*t3
+ #**2*t2**3-7*t1**4*t5*t2**9*t3*t4-765.D0/4.D0*s23**2*t4**2*t5**2*t2
+ #**5*t1**4*t3+675.D0/2.D0*s23**2*t4**4*t3**2*t2**4*t1**3*t5+10395.D
+ #0/2.D0*s23**2*t1**5*t3**2*t5*t4**3*t2-300*t1**3*t4**5*t3**2*t5**3*
+ #t2**3+16*t1**3*t4**6*t5*t3**2*t2**4-5445*s23**2*t1**5*t3**2*t5*t4*
+ #*2*t2**2-1260*s23**2*t1**4*t3**2*t5*t4**5*t2-450*t1**5*t3**2*t5**3
+ #*t4**2*t2**2+64*t1**4*t4**4*t3**3*t5*t2**2+t1**5*t5**2*t2**9+44.D0
+ #/3.D0*s23**2*t1**5*t4**6*t5*t2**2-66*s23**2*t1**5*t4**5*t5*t2**3+3
+ #65.D0/4.D0*t3**4*t2**8*t1*t4**2*t5-990*s23**2*t1**5*t3*t5**2*t4**5
+ #+66*t4**2*t2**8*t1**3*t3**2*t5+625*t1**4*t3**3*t5**2*t4**3*t2**2+1
+ #75.D0/2.D0*t1**4*t4*t3*t5**4*t2**6
+ s3 = s6-315.D0/2.D0*s23*t1**4*t3**2*t2**5*t4**3-840*s23*t1**4*t4**
+ #3*t3*t5**3*t2**4-4*t3**3*t2**9*t1**3-t1**5*t2**10*t5-33.D0/2.D0*t3
+ #**5*t2**9*t4**2+105.D0/4.D0*s23*t1**5*t5**2*t2**7*t4+1575*t1**3*t3
+ #**3*t5**2*t2**4*t4**3-84*t1**3*t4**3*t3**3*t2**5*t5+5*s23*t3**2*t2
+ #**8*t1**4-8.D0/3.D0*s23*t3**4*t2**8*t1**2-s23*t3**3*t2**8*t1**3/6-
+ #35.D0/2.D0*s23*t3**4*t2**6*t1**3+5.D0/24.D0*s23*t3**2*t2**10*t1**3
+ #+15.D0/4.D0*s23*t1**6*t4*t2**7-9.D0/2.D0*s23*t1**6*t4**2*t2**6+7.D
+ #0/4.D0*s23*t1**6*t4**3*t2**5-40*s23*t1**6*t5**4*t2**4-108*s23*t1**
+ #6*t4**2*t3*t5**2*t2**2+s4+s5
+ s6 = -1100*t1**3*t3**3*t5**2*t4**4*t2**3+1155.D0/4.D0*s23**2*t4**3
+ #*t3**3*t2**4*t1**3-11.D0/4.D0*s23**2*t4*t2**8*t1**4*t3-1815*s23**2
+ #*t1**5*t3**2*t5*t4**4+121.D0/2.D0*s23**2*t4**2*t2**6*t1**5*t5+275*
+ #t4**2*t5**3*t3**2*t2**6*t1**3+75*s23*t1**6*t4*t3*t2**4*t5+285*s23*
+ #t1**5*t5**4*t2**4*t4**2+855.D0/2.D0*s23*t1**5*t3*t2**5*t4**2*t5-22
+ #0*s23*t4*t3**3*t2**6*t1**3*t5-231.D0/2.D0*s23**2*t1**5*t5*t2**5*t4
+ #**3-693.D0/4.D0*s23**2*t4**3*t3**2*t2**5*t1**3*t5-96*t1**4*t4**4*t
+ #5**2*t2**5*t3+150*t1**4*t4**3*t5**2*t2**6*t3+450*t1**5*t5**4*t4**2
+ #*t2**3*t3-300*s23*t1**5*t3*t5**3*t2**5-10*t1**5*t4*t3**4*t2**2+57.
+ #D0/8.D0*s23*t1**5*t4**2*t2**8-75.D0/8.D0*s23*t1**5*t4**3*t2**7
+ s5 = s6+15*s23*t1**5*t5**4*t2**6+75*s23*t1**5*t3**4*t2**2-15.D0/4.
+ #D0*s23*t1**5*t5**2*t2**8+30*s23*t1**5*t3**3*t2**4+6*s23*t1**5*t4**
+ #4*t2**6-3.D0/2.D0*s23*t1**5*t4**5*t2**5-2475.D0/2.D0*s23**2*t4*t5*
+ #*2*t3*t2**4*t1**5+1935.D0/4.D0*s23**2*t4**3*t5**2*t2**4*t1**4*t3+3
+ #00*s23**2*t1**4*t3**2*t5*t4**6+60*s23**2*t1**4*t3*t5**2*t4**7+550*
+ #t1**3*t4**4*t3**2*t5**3*t2**4-1935*s23**2*t1**4*t3**2*t5*t2**3*t4*
+ #*3-16*t1**5*t4**4*t5**3*t2**2*t3+43*t4**3*t2**8*t1**2*t3**3-50*t3*
+ #*3*t2**7*t1**3*t5**2+30*t4*t2**8*t3**3*t1**3-1250*t1**4*t5**3*t4**
+ #3*t2**3*t3**2+51.D0/4.D0*s23**2*t4**2*t2**7*t1**4*t3-825.D0/2.D0*s
+ #23**2*t3**2*t2**4*t1**5*t5
+ s6 = -64*t2**3*t3**5*t4**8-2*t3**4*t2**7*t1**3+105*s23*t1**4*t5*t3
+ #*t2**6*t4**3-112*t1**4*t3**3*t5*t2**5*t4+s2-57.D0/4.D0*s23*t1**5*t
+ #5*t2**7*t4**2-605.D0/2.D0*s23**2*t4**2*t5**3*t2**4*t1**5-1100*t1**
+ #3*t3**3*t2**5*t4**2*t5**2+32.D0/3.D0*t2**2*t3**5*t4**9+900*s23*t1*
+ #*5*t3**2*t5**2*t2**4-600*s23*t1**6*t3*t5**3*t2**2*t4+1680*s23*t1**
+ #5*t3**3*t2**2*t4*t5+200*t1**5*t3**3*t2**3*t5**2+125*t1**4*t3**4*t2
+ #**4*t5+125*t1**4*t3**2*t5**3*t2**6-57.D0/2.D0*t1**4*t4**2*t3**2*t2
+ #**7-8*t1**4*t4**4*t3**2*t2**5+14*t1**4*t4*t3**2*t2**8+7.D0/2.D0*t1
+ #**4*t4*t2**10*t3
+ s4 = s6+25*t1**4*t4**3*t3**2*t2**6+20*t1**4*t3**3*t5*t2**6-60*s23*
+ #t1**5*t4**4*t5**2*t2**4-240*s23*t1**6*t3**2*t5**2*t2**2+377.D0/12.
+ #D0*s23**2*t3**3*t2**6*t1**2*t4**3+6*t1**5*t3**2*t2**7-300*s23**2*t
+ #1**4*t4**6*t3*t5**2*t2+645*s23*t1**3*t3**4*t4**3*t2**3-832.D0/3.D0
+ #*s23*t1**2*t3**4*t4**6*t2**2+645*s23*t4**3*t3**2*t2**5*t1**3*t5**2
+ #+342*t1**4*t3**2*t2**6*t4**2*t5+42*t1**4*t5**2*t3*t2**8*t4+475.D0/
+ #2.D0*t1**4*t3**4*t4**2*t5*t2**2-15.D0/4.D0*s23**2*t3*t2**7*t1**4*t
+ #5**2+2160*s23**2*t1**4*t3**2*t5*t2**2*t4**4-76*s23**2*t4**4*t3**3*
+ #t2**5*t1**2-25.D0/2.D0*t1**4*t3**5*t2**3+3630*s23**2*t1**5*t3*t5**
+ #2*t2**3*t4**2+2475*s23**2*t1**5*t3**2*t5*t4*t2**3+s5
+ s6 = 171*s23*t1**5*t4**2*t5**2*t3*t2**4-208*s23**2*t1**3*t3**3*t4*
+ #*6*t2-300*t1**4*t4**3*t3**2*t2**5*t5+11.D0/6.D0*t3**4*t2**8*t1**2*
+ #t4+5.D0/4.D0*t5*t3**4*t2**10*t1-17.D0/2.D0*t4**2*t3**4*t2**7*t1**2
+ #+6*t1**3*t4**5*t3**2*t2**6+3.D0/2.D0*t1**3*t3**2*t2**10*t4-105*s23
+ #*t1**5*t3**4*t2*t4+110*s23*t1**4*t4**4*t3**2*t2**4-114*t1**4*t4**2
+ #*t5**2*t3**2*t2**5-425.D0/2.D0*t4**2*t3**3*t2**7*t1**2*t5**2-1155.
+ #D0/4.D0*t4**3*t3**4*t2**7*t1*t5-1120*s23*t1**3*t3**3*t5*t4**5*t2**
+ #2+375*s23**2*t1**6*t3**2*t5*t2**2-960*s23*t1**5*t5**3*t4**4*t2*t3+
+ #42*t1**4*t4*t5**2*t3**2*t2**6-225*s23*t1**5*t4**3*t5**2*t3*t2**3-3
+ #780*s23*t1**5*t3**2*t5**2*t2**3*t4
+ s5 = s6-110*s23*t1**4*t4**4*t3*t2**5*t5-72*s23*t1**4*t4**5*t5*t3**
+ #2*t2**2+520*t1*t3**4*t4**6*t2**4*t5+5.D0/2.D0*s23*t3**4*t2**9*t1*t
+ #4+s3+s4-600*s23*t1**2*t3**4*t2**4*t4**4-440*s23*t1**4*t3**4*t4**2*
+ #t2**2-75.D0/2.D0*s23*t4*t2**7*t3**2*t1**4-90*s23*t1**6*t4*t3**2*t5
+ #*t2**2-96*t1**4*t4**4*t5**2*t3**2*t2**3-126*t1**3*t3**2*t2**7*t4**
+ #3*t5-2*t3**5*t2**9*t1-t1**4*t2**11*t3/2-20*t1**4*t3**3*t2**7+40*t1
+ #**5*t5**3*t2**5*t3*t4+1210*s23**2*t1**5*t3**3*t2*t4**2-15*s23**2*t
+ #1**7*t3**2*t5+25*s23**2*t1**6*t3*t2**5+125.D0/2.D0*s23**2*t1**6*t5
+ #**3*t2**4
+ s6 = s5-125.D0/2.D0*s23**2*t1**6*t3**3*t2+175.D0/2.D0*s23**2*t1**6
+ #*t3**3*t4-25.D0/2.D0*s23**2*t1**6*t5*t2**6+200*s23**2*t1**6*t5**3*
+ #t4**4-220.D0/3.D0*s23**2*t1**5*t5**3*t4**6-4*s23*t3**3*t2**6*t1**4
+ #+1935.D0/2.D0*s23**2*t1**4*t3**3*t4**3*t2**2+275.D0/6.D0*t3**3*t2*
+ #*8*t1**2*t4*t5**2-825*s23**2*t1**5*t3**3*t2**2*t4+66*s23**2*t1**5*
+ #t4**5*t3*t2**2+275.D0/2.D0*s23*t3**4*t2**5*t1**3*t4+42*s23*t1**6*t
+ #4**3*t3*t5**2*t2+150*t1**4*t4**3*t5**2*t3**2*t2**4+1425.D0/2.D0*s2
+ #3**2*t1**6*t5**3*t4**2*t2**2+216*t1**5*t4**2*t3**2*t5**2*t2**3+15*
+ #s23*t1**5*t4**5*t5**2*t2**3+180*t1**5*t3**2*t5*t2**5*t4-126*s23*t1
+ #**4*t4**3*t5*t3**2*t2**4-513*s23*t1**5*t4**2*t3**2*t5*t2**3
+ s1 = s6-40*s23**2*t1**6*t4**4*t5*t2**2-105*s23**2*t1**6*t4*t3*t2**
+ #4-200*t1**4*t4**4*t3*t5**4*t2**3-480*s23*t1**4*t4**5*t3*t5**3*t2**
+ #2+126*s23*t1**4*t4**3*t3**3*t2**3+414*t1*t2**4*t3**5*t4**5+40.D0/3
+ #.D0*s23*t5**3*t3*t2**7*t1**4+9*s23*t1**6*t4**2*t5*t2**5-30*s23*t1*
+ #*6*t3*t2**5*t5-72*t1**5*t4**2*t3**3*t5*t2**2+125*s23**2*t1**6*t4**
+ #3*t5*t2**3+440*s23*t4**2*t5**3*t3*t2**5*t1**4-242*s23**2*t1**5*t4*
+ #*4*t3*t2**3+800.D0/3.D0*s23*t1**3*t3**3*t5*t4**6*t2+70*s23*t1**6*t
+ #5**4*t4**3*t2-180*t1**5*t3*t2**6*t4*t5**2-1720*s23*t1**3*t3**3*t2*
+ #*4*t4**3*t5-425*s23*t1**3*t3**4*t4**2*t2**4+140*s23*t1**3*t3**4*t4
+ #**5*t2+240*s23*t1**6*t3*t5**3*t2**3
+ s2 = s23/t2**12/t1**5
+ t0 = s1*s2
Index: 95/branches/golem95_without_olo_cmake/tool/thomas_i3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/thomas_i3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/thomas_i3.m (revision 119)
@@ -0,0 +1,52 @@
+Digits := 20:
+
+TRId4_nomass := proc( s1,s2,s3 )
+local out,lambda,DSPENCE,CDLOG,ETA,PSQ,P1SQ,P2SQ,
+ A,B,X1,X2,Y1,Y2,SRDELTA,SOS,x1,x2:
+
+
+if ( s1=0 or s2=0 or s3=0 ) then
+ ERROR("This routine designed for all legs off-shell!"):
+end if:
+
+if s1>0 then
+ETA := 10.^(-20):
+else
+ETA := -10.^(-20):
+end if:
+
+DSPENCE := x -> dilog( 1.-x ): # this is Li2(x)
+CDLOG := x -> log( x ):
+
+# lprint( PSQ,P1SQ,P2SQ ):
+#
+# scaled momenta:
+ A := s2/s1:
+ B := s3/s1:
+#
+# the discriminant:
+# SRDELTA := sqrt( 1.0 - 2.0*(A + B) + (A - B)**2 + I*ETA ):
+ SRDELTA := sqrt( 1.0 - 2.0*(A + B) + (A - B)**2 - I*ETA ):
+#
+# the roots:
+ X1 := ( 1.0 + B - A + SRDELTA )/2.0:
+ X2 := ( 1.0 + B - A - SRDELTA )/2.0:
+ Y1 := ( 1.0 + A - B + SRDELTA )/2.0:
+ Y2 := ( 1.0 + A - B - SRDELTA )/2.0:
+#
+# the vertex function:
+#
+ out := 2.0 /s1 /SRDELTA *
+ ( DSPENCE(-X2/Y1) + DSPENCE(-Y2/X1)
+ + ((CDLOG(X2/Y1))^2)/4.0 + ((CDLOG(Y2/X1))^2)/4.0
+ + ((CDLOG(X1/Y1))^2)/4.0 - ((CDLOG(X2/Y2))^2)/4.0
+ + Pi^2/6.0 ):
+#
+RETURN(evalf(out)):
+end:
+
+s1 := -3.0;
+s2 := 0.2;
+s3 := 0.3;
+
+f123 := TRId4_nomass( s1,s2,s3 );
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r0.m (revision 119)
@@ -0,0 +1,54 @@
+#
+# rang 0
+#
+div := expand(subs(y=1,1));
+F := (x,y) -> 1;
+result_div2 := 1/C/2*F(0,0);
+result_dv1a := -ln(-C)/C/2*F(0,0);
+result_dv1b := -1/C*(F(0,y)-F(0,0))/y;
+result_dv1c := 1/2*1/x*(F(x,0)/(-C+B*x)-F(0,0)/(-C));
+result_dv1 := -(result_dv1a + factor(result_dv1b) + factor(result_dv1c) );
+result_dv1 := applyrule(y^n::integer*(A::anything+B::anything*x)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(result_dv1));
+result_dv1 := applyrule(1/(A::anything+B::anything*x)='I_sur_y(0,1,A,B)',result_dv1);
+result_dv1 := int(result_dv1,y=0..1);
+result_dv1 := subs(B=m3s+C,result_dv1);
+result_div1 := collect(result_dv1,[Li2,ln],factor);
+# result_div1 := applyrule(ln(-C)*C^(-1)=h0e(C),expand(result_dv1));
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+terma1 := 1/(2*x)*ln(-C+B*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+terma2 := 1/(2*x)*F(0,0)/(-C)*ln(1-D*x) ;
+termb := ln(x)/(2*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+termc := 2/(-C)*ln(y)/y*(F(0,y)-F(0,0));
+term3 := (F(x,y)/(-C+B*x)-F(x,0)/(-C+B*x)-F(0,y)/(-C)+F(0,0)/(-C))/(x*y);
+term4 := 1/4*F(0,0)*ln(-C)^2/(-C);
+I4_3p1m_1mi := -(factor(terma1) + terma2 + factor(termb) + factor(termc) + factor(term3) + term4);
+I4_3p1m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)*(C::anything+B::anything*x)^(-1)='L_log(0,0,1,C,B)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(1-D::anything*x)*(x)^(-1)=-Li2(D),I4_3p1m_1mi);
+I4_3p1m_1mi := subs(D=(m3s+C)/C,B=m3s+C,I4_3p1m_1mi);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2 := I4_3p1m_1mi;
+#
+# quit;
+#
+#
+fd:=fopen("test.res",WRITE);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_6d_r0.m (revision 119)
@@ -0,0 +1,44 @@
+#
+# rang 0
+#
+div := expand(subs(y=1,1));
+F := (x,y) -> 1;
+result_dv1 := -y*F(x,y);
+result_dv1 := int(result_dv1,x=0..1);
+result_dv1 := int(result_dv1,y=0..1);
+result_div1 := collect(result_dv1,[Li2,ln],factor);
+# result_div1 := applyrule(ln(-C)*C^(-1)=h0e(C),expand(result_dv1));
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+term1 := -y*F(x,y)*ln(x) ;
+term2 := -2*y*F(x,y)*ln(y) ;
+term3 := -y*F(x,y)*ln(-C+B*x);
+I4_3p1m_1mi := -(term1 + term2 + term3);
+I4_3p1m_1mi := applyrule(x^n::integer*ln(A::anything+B::anything*x)='I_log(n,A,B)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule(ln(A::anything+B::anything*x)='I_log(0,A,B)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := int(I4_3p1m_1mi,y=0..1);
+I4_3p1m_1mi := subs(D=(m3s+C)/C,B=m3s+C,I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-1)=he_c(1,C,-m3s)+ln(m3s)/(m3s+C),expand(I4_3p1m_1mi));
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2 := I4_3p1m_1mi;
+#
+# quit;
+#
+#
+fd:=fopen("test.res",WRITE);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r2.m (revision 119)
@@ -0,0 +1,75 @@
+#
+# rang 1
+#
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+# l1 := 2;
+# l2 := 2;
+F := unapply(L_z[l1]*L_z[l2],x,y);
+result_div2[l1,l2] := 1/C/2*F(0,0);
+result_dv1a := -ln(-C)/C/2*F(0,0);
+result_dv1b := -1/C*(F(0,y)-F(0,0))/y;
+result_dv1c := 1/2*1/x*(F(x,0)/(-C+B*x)-F(0,0)/(-C));
+result_dv1 := -(result_dv1a + factor(result_dv1b) + factor(result_dv1c) );
+result_dv1 := applyrule(y^n::integer*(A::anything+B::anything*x)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(result_dv1));
+result_dv1 := applyrule(1/(A::anything+B::anything*x)='I_sur_y(0,1,A,B)',result_dv1);
+result_dv1 := int(result_dv1,y=0..1);
+result_dv1 := subs(B=m3s+C,result_dv1);
+result_div1[l1,l2] := collect(result_dv1,[Li2,ln],factor);
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+terma1 := 1/(2*x)*ln(-C+B*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+terma2 := 1/(2*x)*F(0,0)/(-C)*ln(1-D*x) ;
+termb := ln(x)/(2*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+termc := 2/(-C)*ln(y)/y*(F(0,y)-F(0,0));
+term3 := (F(x,y)/(-C+B*x)-F(x,0)/(-C+B*x)-F(0,y)/(-C)+F(0,0)/(-C))/(x*y);
+term4 := 1/4*F(0,0)*ln(-C)^2/(-C);
+term5 := (F(0,y)-F(0,0))/y*ln(-C)/(-C);
+#
+I4_3p1m_1mi := -(factor(terma1) + terma2 + factor(termb) + factor(termc) + factor(term3) + term4 + factor(term5) );
+I4_3p1m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)*(C::anything+B::anything*x)^(-1)='L_log(0,0,1,C,B)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(1-D::anything*x)*(x)^(-1)=-Li2(D),I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(x^n::integer*(C::anything+D::anything*x)^(m::negint) = 'I_sur_y(n,-m,C,D)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule((C::anything+D::anything*x)^(m::negint) = 'I_sur_y(0,-m,C,D)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := int(I4_3p1m_1mi,y=0..1);
+I4_3p1m_1mi := subs(D=(m3s+C)/C,B=m3s+C,I4_3p1m_1mi);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-2)=(he_c(2,C,-m3s)-1/(m3s+C))/m3s+ln(m3s)/(m3s+C)^2,I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-1)=he_c(1,C,-m3s)+ln(m3s)/(m3s+C),I4_3p1m_1mi);
+result2[l1,l2] := factor(I4_3p1m_1mi);
+#
+end do;
+end do;
+# quit;
+#
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+ fprintf(fd,"case(%d,%d)\n",l1,l2);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1,l2]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2[l1,l2]):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1,l2]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
+end do;
Index: 95/branches/golem95_without_olo_cmake/tool/matrix6.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/matrix6.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/matrix6.m (revision 119)
@@ -0,0 +1,164 @@
+#
+sc2 := proc(p1,p2)
+ local ptot;
+ ptot[1] := p1[1]+p2[1];
+ ptot[2] := p1[2]+p2[2];
+ ptot[3] := p1[3]+p2[3];
+ ptot[4] := p1[4]+p2[4];
+ res := ptot[1]^2-ptot[2]^2-ptot[3]^2-ptot[4]^2;
+ return(res);
+end proc;
+#
+sc3 := proc(p1,p2,p3)
+ local ptot;
+ ptot[1] := p1[1]+p2[1]+p3[1];
+ ptot[2] := p1[2]+p2[2]+p3[2];
+ ptot[3] := p1[3]+p2[3]+p3[3];
+ ptot[4] := p1[4]+p2[4]+p3[4];
+ res := ptot[1]^2-ptot[2]^2-ptot[3]^2-ptot[4]^2;
+ return(res);
+end proc;
+#
+p1 := vector(4,[0.5,0.,0.,0.5]);
+p2 := vector(4,[0.5,0.,0.,-0.5]);
+p3 := vector(4,[-0.2891722574546574,.1500324353828444E-01,-0.,.2887827854370021]);
+p4 := vector(4,[-0.1704749926850763,-0.9206349872587926E-02, -0.,.1702262208151268]);
+p5 := vector(4,[-0.8012922450379105E-01,-0.7998506233736553E-01,-0.,-0.4804416974690721E-02]);
+p6 := vector(4,[-0.4602235253564753,.7418816867166904E-01,-0.,-0.4542045892774381]);
+# S[1,3] := sc2(p2,p3);
+# S[1,4] := sc3(p2,p3,p4);
+# S[1,5] := sc2(p6,p1);
+# S[2,4] := sc2(p3,p4);
+# S[2,5] := sc3(p3,p4,p5);
+# S[2,6] := sc2(p1,p2);
+# S[3,5] := sc2(p4,p5);
+# S[3,6] := sc3(p1,p2,p3);
+# S[4,6] := sc2(p5,p6);
+Digits := 52;
+S[1,3] := evalf(sc2(p2,p3));
+S[1,4] := evalf(sc3(p2,p3,p4));
+S[1,5] := evalf(sc2(p6,p1));
+S[2,4] := evalf(sc2(p3,p4));
+S[2,5] := evalf(sc3(p3,p4,p5));
+S[2,6] := evalf(sc2(p1,p2));
+S[3,5] := evalf(sc2(p4,p5));
+S[3,6] := evalf(sc3(p1,p2,p3));
+S[4,6] := evalf(sc2(p5,p6));
+p1[1]+p2[1]+p3[1]+p4[1]+p5[1]+p6[1];
+p1[2]+p2[2]+p3[2]+p4[2]+p5[2]+p6[2];
+p1[3]+p2[3]+p3[3]+p4[3]+p5[3]+p6[3];
+p1[4]+p2[4]+p3[4]+p4[4]+p5[4]+p6[4];
+p3[2]+p5[2];
+p4[2]+p6[2];
+evalf(sc2(p3,p5));
+evalf(sc2(p3,p6));
+evalf(sc2(p4,p6));
+evalf(sc2(p1,p3));
+evalf(sc2(p1,p4));
+evalf(sc2(p1,p5));
+evalf(sc2(p2,p4));
+evalf(sc2(p2,p5));
+evalf(sc2(p2,p6));
+#
+with(linalg);
+# only with one external mass or zero external mass
+Sa:=matrix(6,6,[
+0,0,S[1,3],S[1,4],S[1,5],0,
+0,0,0,S[2,4],S[2,5],S[2,6],
+S[1,3],0,0,0,S[3,5],S[3,6],
+S[1,4],S[2,4],0,0,0,S[4,6],
+S[1,5],S[2,5],S[3,5],0,0,0,
+0,S[2,6],S[3,6],S[4,6],0,0] );
+set5 := {1,2,3,4,5};
+Ga := matrix(5,5,[
+0,sc2(p1,p2),sc2(p1,p3),sc2(p1,p4),sc2(p1,p5),
+sc2(p2,p1),0,sc2(p2,p3),sc2(p2,p4),sc2(p2,p5),
+sc2(p3,p1),sc2(p3,p2),0,sc2(p3,p4),sc2(p3,p5),
+sc2(p4,p1),sc2(p4,p2),sc2(p4,p3),0,sc2(p4,p5),
+sc2(p5,p1),sc2(p5,p2),sc2(p5,p3),sc2(p5,p4),0] );
+#
+det(Ga);
+quit;
+#
+#
+# on calcule les b6
+Un6:=vector([1,1,1,1,1,1]);
+B6M:=linsolve(Sa,Un6);
+InvSa:=inverse(Sa);
+Determi6 := det(Sa);
+quit;
+for i from 1 to 6 do
+ b6(i,{}) := B6M[i];
+end do;
+for i from 1 to 6 do
+ for j from 1 to 6 do
+ InvS6(i,j,{}) := factor(InvSa[i,j]*Determi6);
+ end do:
+end do:
+invs6 := evalm(InvSa*Determi6);
+# b6 := evalm(B6M*Determi6);
+# sumb6 := factor(b6[1]+b6[2]+b6[3]+b6[4]+b6[5]+b6[6]);
+sumb6 := 0;
+for i from 1 to 6 do
+ sumb6 := sumb6 + b6(i,{});
+end do:
+#
+# S[1,3] := evalf(sc2(p2,p3));
+# S[1,4] := evalf(sc3(p2,p3,p4));
+# S[1,5] := evalf(sc2(p6,p1));
+# S[2,4] := evalf(sc2(p3,p4));
+# S[2,5] := evalf(sc3(p3,p4,p5));
+# S[2,6] := evalf(sc2(p1,p2));
+# S[3,5] := evalf(sc2(p4,p5));
+# S[3,6] := evalf(sc3(p1,p2,p3));
+# S[4,6] := evalf(sc2(p5,p6));
+#
+# for i from 1 to 6 do
+# evalf(b6(i,{}));
+# end do;
+evalf(sumb6);
+evalf(b6(1,{}));
+quit;
+#
+# # on calcul les b4
+# Un4:=vector([1,1,1,1]);
+# for ic from 1 to 5 do
+# set4 := set5 minus {ic};
+# Sa||ic:=delcols(delrows(Sa,ic..ic),ic..ic);
+# factor(det(Sa||ic));
+# B4M||ic:=linsolve(Sa||ic,Un4);
+# InvSa||ic:=inverse(Sa||ic);
+# for j from 1 to 4 do
+# vj := set4[j];
+# b4(vj,{ic}) := B4M||ic[j];
+# for k from 1 to 4 do
+# vk := set4[k];
+# InvS4(vj,vk,{ic}):=InvSa||ic[j,k]
+# end do;
+# end do;
+# end do;
+# #
+# # b4[1][2];
+# # b4;
+# # quit;
+# with(CodeGeneration);
+# Fortran(Determi5,resultname="dets");
+# Fortran(invs5,declare=[S::float]);
+# Fortran(b5,declare=[S::float]);
+# # Fortran(sumb5,declare=[S::float],resultname="dets");
+# for ic from 1 to 5 do
+# set4 := set5 minus {ic};
+# for j from 1 to 4 do
+# vj := set4[j]:
+# printf("b4(%d,%d) =\n",vj,ic);
+# Fortran(b4(vj,{ic}),declare=[S::float]);
+# for k from 1 to 4 do
+# vk := set4[k];
+# printf("invs4(%d,%d,%d) =\n",vj,vk,ic);
+# Fortran(InvS4(vj,vk,{ic}));
+# end do;
+# end do;
+# end do;
+# quit;
+
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r1.m (revision 119)
@@ -0,0 +1,157 @@
+#
+# rang 1
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 1;
+I6_4p2madj := x/(A+B*y)*L_z[l1];
+#
+I6_4p2madj := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2madj));
+I6_4p2madj := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2madj);
+#
+I6_4p2madj := I6_4p2madj;
+I6_4p2madj := algsubs(A+B=C+D*x,I6_4p2madj,exact);
+I6_4p2madj := subs(A=C+F*x,B=x*G,I6_4p2madj);
+I6_4p2madj := expand(I6_4p2madj);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-(1-z)*s13
+I6_4p2madj := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2madj);
+I6_4p2madj := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2madj);
+I6_4p2madj := expand(int(I6_4p2madj,x=0..1));
+I6_4p2madj := I6_4p2madj;
+#
+reste := I6_4p2madj:
+result := 0;
+set_ln := indets(I6_4p2madj,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2madj,func,1));
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,reste);
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(CP+DP=HP,result,exact);
+result := algsubs(C+F=E,result,exact);
+result := algsubs(CP-z*CP+F=E,result,exact);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+# result := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,result);
+result1[l1] := result;
+# result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+# reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+end do:
+# for l1 from 1 to 4 do
+result1[1];
+# result1[l1];
+# end do;
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = s13\n");
+fprintf(fd,"f_var = z*(s24)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*s23-s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*s23\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),CP = c_var,F = f_var,
+ G = g_var,DP = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ HP = h_var,-result1[l1]):
+ mach1 := factor(subs(z=1,g_var=-f_var,h_var=c_var+d_var,coeff(truc1,ln(1-z),1)));
+ truc1 := algsubs(1-z=umz,truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+#
+quit;
+# pole pour F=0
+fprintf(fd,"select case(glob_par4)\n");
+for l1 from 1 to 4 do
+# l1 := 4;
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c3 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3));
+ c2 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2));
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ tq2 :=factor(tq1+dreste);
+ qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+ *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2;
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
Index: 95/branches/golem95_without_olo_cmake/tool/integ1D_f3p3m.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ1D_f3p3m.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ1D_f3p3m.m (revision 119)
@@ -0,0 +1,713 @@
+########################################################################
+#
+# initialisation
+#
+########################################################################
+S:=table(symmetric,[seq((i,i)=0,i=1..3)]);
+N := 3;
+#
+S_i:={1,2,3};
+LCor:=[q1,q2,q3];
+#
+#
+$include "procedure.m"
+########################################################################
+# with(linalg);
+# Sa:=matrix(3,3,[
+# 0,S[1,2],S[1,3],
+# S[1,2],0,S[2,3],
+# S[1,3],S[2,3],0] );
+# set3 := {1,2,3};
+# #
+# # on calcule les b3
+# Un3:=vector([1,1,1]);
+# B3M:=linsolve(Sa,Un3);
+# InvSa:=inverse(Sa);
+# Determi3 := det(Sa);
+# for i from 1 to 3 do
+# b3(i,{}) := B3M[i];
+# end do;
+# for i from 1 to 3 do
+# for j from 1 to 3 do
+# InvS3(i,j,{}) := InvSa[i,j];
+# end do:
+# end do:
+# #
+# SumB3:=proc(Se::set)
+# local res,vk,k;
+# res:=0;
+# for k from 1 to 3 do
+# res:=res+b3(k,Se);
+# end do;
+# RETURN(res);
+# end proc;
+########################################################################
+# $include "I4Result.m"
+$include "I3Result.m"
+#
+# on definit :
+# ie(n,z1,z3) = \frac{1}{z_1^n \, z_3} \; \int^1_0 dy \frac{\ln(y)}{(y-1/z_1)^n \, (y-1/z_3)}
+# je(n,z1,z3) = \frac{1}{z_1^n} \; \int^1_0 dy \frac{\ln(y)}{(y-1/z_1)^n}
+#
+############################ dimension n+4 #################################
+rang := 0;
+Diag:=IScaZ(n+2,3,q1,q2,q3);
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+Diag := subs(epsilon=-epsilonUv,Diag);
+Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+cm2:=factor(coeff(Diag,epsilonUv,-2));
+cm1:=factor(coeff(Diag,epsilonUv,-1));
+cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[1,2]/S[1,3])+ln(-S[1,3]),
+ ln(-S[2,3]) = ln(S[2,3]/S[1,3])+ln(-S[1,3]),cm0):
+ cm0:=subs(
+ I3Mass(S[1,3],S[1,2],S[2,3]) =
+ (- ie(1,z1,z2)/x1
+ + ie(1,z4,z3)/(x1-1)
+ + ie(1,z5,z6)/(x2-1)
+ - ie(1,z8,z7)/x2 )/S[1,3],
+# ln(S[1,2]/S[1,3]) = -z4*je(2,z4)-z5*je(2,z5),
+# ln(S[2,3]/S[1,3]) = -z1*je(2,z1)-z8*je(2,z8),
+ ln(S[1,2]/S[1,3]) = -z4*je(2,0,z4)-z5*je(2,0,z5),
+ ln(S[2,3]/S[1,3]) = -z1*je(2,0,z1)-z8*je(2,0,z8),
+ cm0):
+ cm0:=subs(S[1,2] = S[1,3]*(1-x1)*(1-x2),
+ S[2,3] = S[1,3]*x1*x2,cm0):
+ eq_ie := ie(1,a,b) = (a-b)^2*ke(3,2,a,b)+(a-b)/a*je(3,0,a)
+ +(2*a-b)/a*je(2,0,a);
+ cm0:=subs(
+ subs(a=z1,b=z2,eq_ie),
+ subs(a=z8,b=z7,eq_ie),
+ subs(a=z4,b=z3,eq_ie),
+ subs(a=z5,b=z6,eq_ie),
+ cm0):
+# eq_je := je(2,0,a) = -2*je(3,0,a) + 1/(1-a);
+ eq_je := je(3,0,a) = -1/2*je(2,0,a) + 1/(1-a)/2;
+ cm0:=subs(
+ subs(a=z1,eq_je),
+ subs(a=z8,eq_je),
+ subs(a=z4,eq_je),
+ subs(a=z5,eq_je),
+ cm0):
+set_func:=indets(cm0,function);
+res:=0;
+restant:=cm0;
+for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do:
+restant:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ restant):
+restant := factor(restant):
+cm0:=res+restant;
+# pour faire le programme Fortran
+rt1 := cm0;
+set_je:=indets(rt1,specfunc(anything,je)):
+restant:=rt1;
+res:=0;
+for func in set_je do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do:
+r_rang0_je:=res;
+rt1:=restant:
+set_ke:=indets(rt1,specfunc(anything,ke)):
+restant:=rt1:
+res:=0;
+for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+end do:
+r_rang0_re:=factor(restant);
+r_rang0_ke:=res;
+#
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"res_je = %a\n",r_rang0_je);
+fprintf(fd,"res_ke = %a\n",r_rang0_ke);
+fprintf(fd,"res_cst = %a\n",r_rang0_re);
+fclose(fd);
+# quit;
+t_rang1 := table();
+rang := 1;
+for l1 from 1 to 3 do
+ Diag:=IScaZ(n+2,3,l1,q1,q2,q3);
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[1,2]/S[1,3])+ln(-S[1,3]),
+ ln(-S[2,3]) = ln(S[2,3]/S[1,3])+ln(-S[1,3]),cm0):
+ cm0:=subs(
+ I3Mass(S[1,3],S[1,2],S[2,3]) =
+ (- ie(1,z1,z2)/x1
+ + ie(1,z4,z3)/(x1-1)
+ + ie(1,z5,z6)/(x2-1)
+ - ie(1,z8,z7)/x2 )/S[1,3],
+ ln(S[1,2]/S[1,3]) = -z4*je(2,0,z4)-z5*je(2,0,z5),
+ ln(S[2,3]/S[1,3]) = -z1*je(2,0,z1)-z8*je(2,0,z8),
+ cm0):
+ cm0:=subs(S[1,2] = S[1,3]*(1-x1)*(1-x2),
+ S[2,3] = S[1,3]*x1*x2,cm0):
+ n:='n';
+ eq_ie := ie(n,a,b) = (a-b)*ke(n+1,1,a,b)+je(n+1,0,a);
+ cm0:=subs(
+ subs(n=1,a=z1,b=z2,eq_ie),
+ subs(n=1,a=z8,b=z7,eq_ie),
+ subs(n=1,a=z4,b=z3,eq_ie),
+ subs(n=1,a=z5,b=z6,eq_ie),
+ cm0):
+ for n from 2 to 4 do
+ m := n-1;
+ eq_ke := ke(n,m,a,b) = (a-b)*ke(n+1,m+1,a,b)+je(n+1,m,a);
+ cm0:=subs(
+ subs(a=z1,b=z2,eq_ke),
+ subs(a=z8,b=z7,eq_ke),
+ subs(a=z4,b=z3,eq_ke),
+ subs(a=z5,b=z6,eq_ke),
+ cm0):
+ end do:
+ for n from 5 by -1 to 3 do
+ for m from n-2 by -1 to 1 do
+ eq_je := je(n,m,a) = 1/a*(je(n-1,m-1,a)+je(n,m-1,a));
+ cm0:=subs(
+ subs(a=z1,eq_je),
+ subs(a=z8,eq_je),
+ subs(a=z4,eq_je),
+ subs(a=z5,eq_je),
+ cm0):
+ end do:
+ end do:
+# leq_je[1] := je(2,0,a) = -2*je(3,0,a) + 1/(1-a);
+# leq_je[2] := je(3,0,a) = -3/2*je(4,0,a) + (a-2)/(1-a)^2/4;
+# leq_je[3] := je(4,0,a) = -4/3*je(5,0,a) + (3-3*a+a^2)/(1-a)^3/9;
+ leq_je[1] := je(5,0,a) = -3/4*je(4,0,a) + (3-3*a+a^2)/(1-a)^3/12;
+ leq_je[2] := je(4,0,a) = -2/3*je(3,0,a) + (a-2)/(1-a)^2/6;
+ leq_je[3] := je(3,0,a) = -1/2*je(2,0,a) + 1/(1-a)/2;
+ for i from 1 to 3 do
+ cm0:=subs(
+ subs(a=z1,leq_je[i]),
+ subs(a=z8,leq_je[i]),
+ subs(a=z4,leq_je[i]),
+ subs(a=z5,leq_je[i]),
+ cm0):
+ end do:
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ restant):
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang1[l1] := cm0;
+end do:
+for l1 from 1 to 3 do
+ t_rang1[l1];
+end do;
+# quit;
+# pour faire le programme Fortran
+for l1 from 1 to 3 do
+ rt1 := t_rang1[l1];
+ set_je:=indets(rt1,specfunc(anything,je)):
+ restant:=rt1;
+ res:=0;
+ for func in set_je do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_je[l1]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_re[l1]:=factor(restant);
+ r_rang1_ke[l1]:=res;
+end do;
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"res_je = %a\n",r_rang1_je[l1]);
+ fprintf(fd,"res_ke = %a\n",r_rang1_ke[l1]);
+ fprintf(fd,"res_cst = %a\n",r_rang1_re[l1]);
+ if (l1 = 3) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+fclose(fd);
+quit;
+############################ dimension n+2 #################################
+t_rang1 := table();
+rang := 1;
+for l1 from 1 to 3 do
+ Diag:=IScaZ(n,3,l1,q1,q2,q3);
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[1,2]/S[1,3])+ln(-S[1,3]),
+ ln(-S[2,3]) = ln(S[2,3]/S[1,3])+ln(-S[1,3]),cm0):
+ factor(cm0);
+ cm0:=subs(
+ I3Mass(S[1,3],S[1,2],S[2,3]) =
+ (- ie(1,z1,z2)/x1
+ + ie(1,z4,z3)/(x1-1)
+ + ie(1,z5,z6)/(x2-1)
+ - ie(1,z8,z7)/x2 )/S[1,3],
+# ln(S[1,2]/S[1,3]) = -z4*je(2,z4)-z5*je(2,z5),
+# ln(S[2,3]/S[1,3]) = -z1*je(2,z1)-z8*je(2,z8),
+ ln(S[1,2]/S[1,3]) = -z4*je(2,0,z4)-z5*je(2,0,z5),
+ ln(S[2,3]/S[1,3]) = -z1*je(2,0,z1)-z8*je(2,0,z8),
+ cm0):
+ cm0:=subs(S[1,2] = S[1,3]*(1-x1)*(1-x2),
+ S[2,3] = S[1,3]*x1*x2,cm0):
+# z1 = (x1-1)/x1
+# z2 = (x2-1)/x1
+# z3 = x2/(x1-1) = 1/z7
+# z4 = x1/(x1-1) = 1/z1
+# z5 = x2/(x2-1) = 1/z8
+# z6 = x1/(x2-1) = 1/z2
+# z7 = (x1-1)/x2
+# z8 = (x2-1)/x2
+ eq_ie := ie(1,a,b) = (a-b)^2*ke(3,2,a,b)+(a-b)/a*je(3,0,a)
+ +(2*a-b)/a*je(2,0,a);
+ cm0:=subs(
+ subs(a=z1,b=z2,eq_ie),
+ subs(a=z8,b=z7,eq_ie),
+ subs(a=z4,b=z3,eq_ie),
+ subs(a=z5,b=z6,eq_ie),
+ cm0):
+# eq_je := je(2,0,a) = -2*je(3,0,a) + 1/(1-a);
+ eq_je := je(3,0,a) = -1/2*je(2,0,a) + 1/(1-a)/2;
+ cm0:=subs(
+ subs(a=z1,eq_je),
+ subs(a=z8,eq_je),
+ subs(a=z4,eq_je),
+ subs(a=z5,eq_je),
+ cm0):
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ restant:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ restant):
+ restant := factor(restant):
+ cm0:=res+restant;
+ t_rang1[l1] := cm0;
+end do:
+for l1 from 1 to 3 do
+ t_rang1[l1];
+end do:
+# pour faire le programme Fortran
+for l1 from 1 to 3 do
+ rt1 := t_rang1[l1];
+ set_je:=indets(rt1,specfunc(anything,je)):
+ restant:=rt1;
+ res:=0;
+ for func in set_je do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_je[l1]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang1_re[l1]:=factor(restant);
+ r_rang1_ke[l1]:=res;
+end do;
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"res_je = %a\n",r_rang1_je[l1]);
+ fprintf(fd,"res_ke = %a\n",r_rang1_ke[l1]);
+ fprintf(fd,"res_cst = %a\n",r_rang1_re[l1]);
+ if (l1 = 3) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+fclose(fd);
+# quit;
+t_rang2 := table(symmetric);
+rang := 2;
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+ Diag:=IScaZ(n,3,l1,l2,q1,q2,q3);
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[1,2]/S[1,3])+ln(-S[1,3]),
+ ln(-S[2,3]) = ln(S[2,3]/S[1,3])+ln(-S[1,3]),cm0):
+ factor(cm0);
+ cm0:=subs(
+ I3Mass(S[1,3],S[1,2],S[2,3]) =
+ (- ie(1,z1,z2)/x1
+ + ie(1,z4,z3)/(x1-1)
+ + ie(1,z5,z6)/(x2-1)
+ - ie(1,z8,z7)/x2 )/S[1,3],
+ ln(S[1,2]/S[1,3]) = -z4*je(2,0,z4)-z5*je(2,0,z5),
+ ln(S[2,3]/S[1,3]) = -z1*je(2,0,z1)-z8*je(2,0,z8),
+ cm0):
+ cm0:=subs(S[1,2] = S[1,3]*(1-x1)*(1-x2),
+ S[2,3] = S[1,3]*x1*x2,cm0):
+ n:='n';
+ eq_ie := ie(n,a,b) = (a-b)*ke(n+1,1,a,b)+je(n+1,0,a);
+ cm0:=subs(
+ subs(n=1,a=z1,b=z2,eq_ie),
+ subs(n=1,a=z8,b=z7,eq_ie),
+ subs(n=1,a=z4,b=z3,eq_ie),
+ subs(n=1,a=z5,b=z6,eq_ie),
+ cm0):
+ for n from 2 to 4 do
+ m := n-1;
+ eq_ke := ke(n,m,a,b) = (a-b)*ke(n+1,m+1,a,b)+je(n+1,m,a);
+ cm0:=subs(
+ subs(a=z1,b=z2,eq_ke),
+ subs(a=z8,b=z7,eq_ke),
+ subs(a=z4,b=z3,eq_ke),
+ subs(a=z5,b=z6,eq_ke),
+ cm0):
+ end do:
+ for n from 5 by -1 to 3 do
+ for m from n-2 by -1 to 1 do
+ eq_je := je(n,m,a) = 1/a*(je(n-1,m-1,a)+je(n,m-1,a));
+ cm0:=subs(
+ subs(a=z1,eq_je),
+ subs(a=z8,eq_je),
+ subs(a=z4,eq_je),
+ subs(a=z5,eq_je),
+ cm0):
+ end do:
+ end do:
+# leq_je[1] := je(2,0,a) = -2*je(3,0,a) + 1/(1-a);
+# leq_je[2] := je(3,0,a) = -3/2*je(4,0,a) + (a-2)/(1-a)^2/4;
+# leq_je[3] := je(4,0,a) = -4/3*je(5,0,a) + (3-3*a+a^2)/(1-a)^3/9;
+ leq_je[1] := je(5,0,a) = -3/4*je(4,0,a) + (3-3*a+a^2)/(1-a)^3/12;
+ leq_je[2] := je(4,0,a) = -2/3*je(3,0,a) + (a-2)/(1-a)^2/6;
+ leq_je[3] := je(3,0,a) = -1/2*je(2,0,a) + 1/(1-a)/2;
+ for i from 1 to 3 do
+ cm0:=subs(
+ subs(a=z1,leq_je[i]),
+ subs(a=z8,leq_je[i]),
+ subs(a=z4,leq_je[i]),
+ subs(a=z5,leq_je[i]),
+ cm0):
+ end do:
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ restant):
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang2[l1,l2] := cm0;
+end do:
+end do:
+# pour faire le programme Fortran
+r_rang2_ke := table(symmetric);
+r_rang2_he := table(symmetric);
+r_rang2_cst := table(symmetric);
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+ rt1 := t_rang2[l1,l2];
+ set_je:=indets(rt1,specfunc(anything,je)):
+ restant:=rt1;
+ res:=0;
+ for func in set_je do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang2_je[l1,l2]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang2_re[l1,l2]:=factor(restant);
+ r_rang2_ke[l1,l2]:=res;
+end do;
+end do;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ for l2 from l1 to 3 do
+ if (l2 = l1) then
+ fprintf(fd,"select case(par3)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"res_ke = %a\n",r_rang2_ke[l1,l2]);
+ fprintf(fd,"res_je = %a\n",r_rang2_je[l1,l2]);
+ fprintf(fd,"res_cst = %a\n",r_rang2_re[l1,l2]);
+ if (l2 = 3) then
+ fprintf(fd,"end select\n");
+ end if;
+ end do;
+end do;
+fclose(fd);
+# quit;
+rang := 3;
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+# l2 := 1;
+# l3 := 1;
+ Diag:=IScaZ(n,3,l1,l2,l3,q1,q2,q3);
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> BonOrdre(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> BonOrdre(f));
+#
+ Diag:=subsindets(Diag,'specfunc(anything,ISca)',f -> Compute3p(f));
+ Diag:=subsindets(Diag,'specfunc(anything,IScaZ)',f -> Compute3p(f));
+ Diag := subs(epsilon=-epsilonUv,Diag);
+ Diag := expand(convert(taylor(Diag*epsilonUv^2,epsilonUv=0,3),polynom)
+ /epsilonUv^2):
+ cm2:=factor(coeff(Diag,epsilonUv,-2));
+ cm1:=factor(coeff(Diag,epsilonUv,-1));
+ cm0:=factor(coeff(Diag,epsilonUv,0));
+ cm0:=subs(ln(-S[1,2]) = ln(S[1,2]/S[1,3])+ln(-S[1,3]),
+ ln(-S[2,3]) = ln(S[2,3]/S[1,3])+ln(-S[1,3]),cm0):
+ factor(cm0);
+ cm0:=subs(
+ I3Mass(S[1,3],S[1,2],S[2,3]) =
+ (- ie(1,z1,z2)/x1
+ + ie(1,z4,z3)/(x1-1)
+ + ie(1,z5,z6)/(x2-1)
+ - ie(1,z8,z7)/x2 )/S[1,3],
+ ln(S[1,2]/S[1,3]) = -z4*je(2,0,z4)-z5*je(2,0,z5),
+ ln(S[2,3]/S[1,3]) = -z1*je(2,0,z1)-z8*je(2,0,z8),
+ cm0):
+ cm0:=subs(S[1,2] = S[1,3]*(1-x1)*(1-x2),
+ S[2,3] = S[1,3]*x1*x2,cm0):
+ n:='n';
+ eq_ie := ie(n,a,b) = (a-b)*ke(n+1,1,a,b)+je(n+1,0,a);
+ cm0:=subs(
+ subs(n=1,a=z1,b=z2,eq_ie),
+ subs(n=1,a=z8,b=z7,eq_ie),
+ subs(n=1,a=z4,b=z3,eq_ie),
+ subs(n=1,a=z5,b=z6,eq_ie),
+ cm0):
+ for n from 2 to 6 do
+ m := n-1;
+ eq_ke := ke(n,m,a,b) = (a-b)*ke(n+1,m+1,a,b)+je(n+1,m,a);
+ cm0:=subs(
+ subs(a=z1,b=z2,eq_ke),
+ subs(a=z8,b=z7,eq_ke),
+ subs(a=z4,b=z3,eq_ke),
+ subs(a=z5,b=z6,eq_ke),
+ cm0):
+ end do:
+ for n from 7 by -1 to 3 do
+ for m from n-2 by -1 to 1 do
+ eq_je := je(n,m,a) = 1/a*(je(n-1,m-1,a)+je(n,m-1,a));
+ cm0:=subs(
+ subs(a=z1,eq_je),
+ subs(a=z8,eq_je),
+ subs(a=z4,eq_je),
+ subs(a=z5,eq_je),
+ cm0):
+ end do:
+ end do:
+# leq_je[1] := je(2,0,a) = -2*je(3,0,a) + 1/(1-a);
+# leq_je[2] := je(3,0,a) = -3/2*je(4,0,a) + (a-2)/(1-a)^2/4;
+# leq_je[3] := je(4,0,a) = -4/3*je(5,0,a) + (3-3*a+a^2)/(1-a)^3/9;
+ leq_je[1] := je(7,0,a) = -5/6*je(6,0,a) + (5-10*a+10*a^2-5*a^3+a^4)/(1-a)^5/30;
+ leq_je[2] := je(6,0,a) = -4/5*je(5,0,a) + (a-2)*(a^2-2*a+2)/(1-a)^4/20;
+ leq_je[3] := je(5,0,a) = -3/4*je(4,0,a) + (3-3*a+a^2)/(1-a)^3/12;
+ leq_je[4] := je(4,0,a) = -2/3*je(3,0,a) + (a-2)/(1-a)^2/6;
+ leq_je[5] := je(3,0,a) = -1/2*je(2,0,a) + 1/(1-a)/2;
+ for i from 1 to 5 do
+ cm0:=subs(
+ subs(a=z1,leq_je[i]),
+ subs(a=z8,leq_je[i]),
+ subs(a=z4,leq_je[i]),
+ subs(a=z5,leq_je[i]),
+ cm0):
+ end do:
+ set_func:=indets(cm0,function);
+ res:=0;
+ restant:=cm0;
+ for func in set_func do
+ temp:=coeff(cm0,func,1);
+ restant := expand(restant-temp*func);
+ temp:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ temp);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do;
+ restant:=subs(z1=(x1-1)/x1,z2=(x2-1)/x1,z3=x2/(x1-1),
+ z4=x1/(x1-1),z5=x2/(x2-1),z6=x1/(x2-1),
+ z7=(x1-1)/x2,z8=(x2-1)/x2,
+ restant):
+ restant := factor(restant);
+ cm0:=res+restant;
+ t_rang3[l1,l2,l3] := cm0;
+end do;
+end do;
+end do;
+# quit;
+# pour faire le programme Fortran
+r_rang3_ke := table(symmetric);
+r_rang3_he := table(symmetric);
+r_rang3_cst := table(symmetric);
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+ rt1 := t_rang3[l1,l2,l3];
+ set_je:=indets(rt1,specfunc(anything,je)):
+ restant:=rt1;
+ res:=0;
+ for func in set_je do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ r_rang3_je[l1,l2,l3]:=res;
+ rt1:=restant:
+ set_ke:=indets(rt1,specfunc(anything,ke)):
+ restant:=rt1:
+ res:=0;
+ for func in set_ke do
+ temp:=coeff(rt1,func,1);
+ restant := expand(restant-temp*func);
+ temp:=factor(temp);
+ res := res+temp*func;
+ end do:
+ restant := factor(restant):
+ restant := convert(restant,parfrac,x1):
+ restantp := 0;
+ for i from 1 to nops(restant) do
+ restantp := restantp + convert(op(i,restant),parfrac,x2);
+ end do:
+ r_rang3_re[l1,l2,l3]:=restantp;
+ r_rang3_ke[l1,l2,l3]:=res;
+end do;
+end do;
+end do;
+# quit;
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+for l2 from l1 to 3 do
+ if (l2 = l1) then
+ fprintf(fd,"select case(par2)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l2);
+for l3 from l2 to 3 do
+ if (l3 = l2) then
+ fprintf(fd,"select case(par3)\n");
+ end if;
+ fprintf(fd,"case(%d)\n",l3);
+ fprintf(fd,"res_je = %a\n",r_rang3_je[l1,l2,l3]);
+ fprintf(fd,"res_ke = %a\n",r_rang3_ke[l1,l2,l3]);
+ fprintf(fd,"res_cst = %a\n",r_rang3_re[l1,l2,l3]);
+ if (l3 = 3) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+ if (l2 = 3) then
+ fprintf(fd,"end select\n");
+ end if;
+end do;
+end do;
+fclose(fd);
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r3.m (revision 119)
@@ -0,0 +1,215 @@
+result1 := table(symmetric);
+result2 := table(symmetric);
+reste_f := table(symmetric);
+#
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+I6_4p2madj := x/(A+B*y)*L_z[l1]*L_z[l2]*L_z[l3];
+#
+I6_4p2madj := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2madj));
+I6_4p2madj := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2madj);
+#
+I6_4p2madj := I6_4p2madj;
+I6_4p2madj := algsubs(A+B=C+D*x,I6_4p2madj,exact);
+I6_4p2madj := subs(A=C+F*x,B=x*G,I6_4p2madj);
+I6_4p2madj := expand(I6_4p2madj);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p2madj := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2madj);
+I6_4p2madj := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2madj);
+I6_4p2madj := expand(int(I6_4p2madj,x=0..1));
+I6_4p2madj := I6_4p2madj;
+#
+reste := I6_4p2madj:
+result := 0;
+set_ln := indets(I6_4p2madj,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2madj,func,1));
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,reste);
+reste:=factor(reste):
+reste:=expand(reste);
+# factor(subs(z=1,reste));
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(CP+DP=HP,result,exact);
+result := algsubs(C+F=E,result,exact);
+result := algsubs(CP-z*CP+F=E,result,exact);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+result1[l1,l2,l3] := result;
+# result1[l1,l2,l3] := collect(result1[l1,l2,l3],[ln(C),ln(H),ln(E)],factor);
+end do:
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*s23-s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*s23\n");
+fprintf(fd,"select case(par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l3);
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),CP = c_var,F = f_var,
+ G = g_var,DP = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ HP = h_var,-result1[l1,l2,l3]):
+ truc1 := algsubs(1-z=umz,truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+quit;
+#
+fd:=fopen("test.res",APPEND);
+# pole pour F=0
+fprintf(fd,"select case(glob_par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(glob_par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(glob_par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+ expr := result1[l1,l2,l3];
+ deg := -ldegree(expr,F);
+ c7 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-7)));
+ c6 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-6)));
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d7 := subs(diff(Cf(z),z,z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z,z)=0,diff(c7,z,z,z,z,z,z));
+ d6 := subs(diff(Cf(z),z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z)=0,diff(c6,z,z,z,z,z));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d7/720/Fprime^6+d6/120/Fprime^5+d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*((t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2/2+((t2*t3-t1*s23)/t2/t3)^3/3));
+ tq2 :=factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1,l2,l3] := (w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^4/t2^4/t3^4)
+ *q(4,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2)/t2;
+#
+# CodeGeneration[Fortran](tq2);
+ fprintf(fd,"case(%d)\n",l3);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2,l3]));
+close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2,l3]),filename="test.res");
+# # codegen[fortran](tq2,filename="test_for.res");
+fd:=fopen("test.res",APPEND);
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_8d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_8d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_8d_r1.m (revision 119)
@@ -0,0 +1,173 @@
+########################## I_4^8 #############################################
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 2;
+#
+I8_4p2madj := x^2*y*(ln(x)+ln(y)+ln(A+B*y))*L_z[l1];
+# I8_4p2madj := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p2madj := x^2*y*(ln(x)+ln(y));
+# I8_4p2madj := x^2*y*(ln(A+B*y));
+I8_4p2madj:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p2madj));
+I8_4p2madj:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p2madj);
+I8_4p2madj:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p2madj);
+I8_4p2madj:=applyrule(ln(y)='I_log(0,0,1)',I8_4p2madj);
+I8_4p2madj := expand(int(I8_4p2madj,y=0..1));
+#
+I8_4p2madj := algsubs(A+B=C+D*x,I8_4p2madj,exact);
+I8_4p2madj := subs(A=C+F*x,B=x*G,I8_4p2madj);
+I8_4p2madj := expand(I8_4p2madj);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I8_4p2madj:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p2madj);
+I8_4p2madj:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p2madj);
+I8_4p2madj:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p2madj);
+I8_4p2madj:=applyrule(ln(x)='I_log(0,0,1)',I8_4p2madj);
+I8_4p2madj := expand(int(I8_4p2madj,x=0..1));
+I8_4p2madj := subs(C=-C,F=-F,G=-G,D=-D,I8_4p2madj);
+#
+reste := I8_4p2madj:
+result := 0;
+set_ln := indets(I8_4p2madj,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(-C-D)) then
+ ctemp := coeff(I8_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p2madj,func,1));
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,reste);
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(CP+DP=HP,result,exact);
+result := algsubs(C+F=E,result,exact);
+result := algsubs(CP-z*CP+F=E,result,exact);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+result1[l1] := collect(result1[l1],[ln(-C),ln(-H),ln(-E)],factor);
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*s23-s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*s23\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(ln(-C) = ln(1-z)+z_log(-s13),CP = c_var,F = f_var,
+ G = g_var,DP = d_var,
+ E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+ HP = h_var,-result1[l1]):
+ truc1 := algsubs(1-z=umz,truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+#
+quit;
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(glob_par4)\n");
+for l1 from 1 to 4 do
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+# dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(-t3/t2),1);
+ w2 := coeff(dresult,ln(-t1*s23/t2^2),1);
+# factor(subs(s23=0,dreste));
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(2*(t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2));
+ tq2 :=factor(tq1/2+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := (w12*z_log(-t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^3/t2^3/t3^3)
+ *q(3,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2);
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"temp0 = %a\n",subs(s23=glob_s23,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/change.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/change.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/change.pl (revision 119)
@@ -0,0 +1,21 @@
+#/usr/bin/perl -w
+$fichier_temp = "temp.out";
+# chdir("../src/form_factor/four_point");
+# chdir("../src/form_factor/five_point");
+chdir("../src/form_factor/six_point");
+@l_file = glob("*.f90");
+ print "test: $l_file[0]\n";
+foreach $file (@l_file) {
+ print "operation sur fichier: $file\n";
+ open(EREAD,"$file") || die "cannot create $file" ;
+ open(EWRITE,">$fichier_temp") || die "cannot create $fichier_temp" ;
+ while(<EREAD>) {
+ chomp;
+ s/use inv_s_interface/use inversion/;
+ print EWRITE "$_\n";
+ }
+ $cp_name = $file."_ori";
+ rename($file, $cp_name);
+ rename($fichier_temp, $file);
+ unlink($cp_name);
+}
Index: 95/branches/golem95_without_olo_cmake/tool/matrix.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/matrix.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/matrix.m (revision 119)
@@ -0,0 +1,53 @@
+with(linalg);
+Sa:=matrix(4,4,[
+0,S[1,2],S[1,3],S[1,4],
+S[1,2],0,S[2,3],S[2,4],
+S[1,3],S[2,3],0,S[3,4],
+S[1,4],S[2,4],S[3,4],0] );
+set6 := {1,2,3,4};
+#
+#
+# $include "procedure.m"
+#
+# on calcule les b4
+Un4:=vector([1,1,1,1]);
+B4M:=linsolve(Sa,Un4);
+InvSa:=inverse(Sa);
+Determi4 := det(Sa);
+for i from 1 to 4 do
+ b4(i,{}) := B4M[i];
+end do;
+for i from 1 to 4 do
+ for j from 1 to 4 do
+ InvS4(i,j,{}) := factor(InvSa[i,j]*Determi4);
+ end do:
+end do:
+invs4 := evalm(InvSa*Determi4);
+b4 := evalm(B4M*Determi4);
+sumb4 := factor(b4[1]+b4[2]+b4[3]+b4[4]);
+#
+#
+SumB4:=proc(Se::set)
+ local res,vk,k;
+ res:=0;
+ for k from 1 to 4 do
+ vk:=set4[k];
+ res:=res+b4(vk,Se);
+ end do;
+ RETURN(res);
+end proc;
+#
+with(CodeGeneration);
+Fortran(Determi4,resultname="dets");
+Fortran(invs4);
+Fortran(b4);
+Fortran(sumb4);
+# for i from 1 to 4 do
+# for j from 1 to 4 do
+# lprint(i,j);
+# # Fortran([InvS4(i,j,{})],resultname="smat");
+# end do;
+# end do;
+quit;
+
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r1.m (revision 119)
@@ -0,0 +1,147 @@
+#
+# rang 1
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 1;
+I6_4p1m := x/(A+B*y)*L_z[l1];
+#
+I6_4p1m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p1m));
+I6_4p1m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p1m);
+#
+I6_4p1m := I6_4p1m;
+# I6_4p1m := algsubs(A+B=C+D*x,I6_4p1m,exact);
+I6_4p1m := algsubs(A+B=C*(1-x),I6_4p1m,exact);
+I6_4p1m := subs(A=C+F*x,B=x*G,I6_4p1m);
+I6_4p1m := expand(I6_4p1m);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -(1-z)*s13
+I6_4p1m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p1m);
+I6_4p1m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p1m);
+I6_4p1m := expand(int(I6_4p1m,x=0..1));
+I6_4p1m := I6_4p1m;
+#
+reste := I6_4p1m:
+result := 0;
+set_ln := indets(I6_4p1m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p1m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p1m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = (1-z)*s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+#
+quit;
+# pole pour F=0
+fprintf(fd,"select case(par4_glob)\n");
+for l1 from 1 to 4 do
+# l1 := 4;
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+# c3 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3));
+# c2 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2));
+# c1 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+# c0 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ c3 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3));
+ c2 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2));
+ c1 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+# dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+# Ff(z0)=0,Fprime=t2,Cprime=t5,
+# Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+# Dsecond=-2*s23,z0=t4/t2,dtot));
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+# w1 := coeff(dresult,ln(t3/t2),1);
+# w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+# w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+# tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+# tq2 :=factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+# res_fin[l1] := w12*z_log(t1*s23/t2^2)
+# - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+# *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+# + tq2;
+# res_fin[l1] := res_fin[l1]/t2;
+ res_fin[l1] := (dresult+dreste)/t2;
+ res_fin[l1] := subs(ln=z_log,res_fin[l1]);
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r0.m (revision 119)
@@ -0,0 +1,120 @@
+I6_4p3m := x/(A+B*y);
+#
+I6_4p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p3m));
+I6_4p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p3m);
+#
+I6_4p3m := I6_4p3m;
+I6_4p3m := algsubs(A+B=C+D*x,I6_4p3m,exact);
+I6_4p3m := subs(A=C+F*x,B=x*G,I6_4p3m);
+I6_4p3m := expand(I6_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p3m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p3m);
+I6_4p3m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p3m);
+I6_4p3m := expand(int(I6_4p3m,x=0..1));
+I6_4p3m := I6_4p3m;
+#
+reste := I6_4p3m:
+result := 0;
+set_ln := indets(I6_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+# if (func = ln(TC)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+# ctemp := algsubs(D-F=G,numer(ctemp),exact)/denom(ctemp);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+# reste := factor(reste-ctemp*func);
+end do:
+result;
+# reste:=algsubs(D-F=G,numer(reste),exact)/denom(reste);
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(flag)\n");
+truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-result1[l1]):
+truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-(result2[l1]+reste_f[l1])):
+fprintf(fd,"case(%d)\n",1);
+fprintf(fd,"fg = %a\n",truc2);
+fprintf(fd,"case(%d)\n",2);
+fprintf(fd,"fg = %a\n",truc1);
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d1):
+ dtot := factor(subs(z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ res_fin := w12*z_log(t1*s23/t2^2)
+ - tq1*q(1,(t2*t3-t1*s23)/t2/t3,sign_arg);
+ res_fin := res_fin/t2;
+# fprintf(fd,"residue1 = %a\n",res_fin);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin));
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_8d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_8d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_8d_r1.m (revision 119)
@@ -0,0 +1,139 @@
+########################## I_4^8 #############################################
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 2;
+#
+I8_4p1m := x^2*y*(ln(x)+ln(y)+ln(A+B*y))*L_z[l1];
+# I8_4p1m := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p1m := x^2*y*(ln(x)+ln(y));
+# I8_4p1m := x^2*y*(ln(A+B*y));
+I8_4p1m:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p1m));
+I8_4p1m:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p1m);
+I8_4p1m:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p1m);
+I8_4p1m:=applyrule(ln(y)='I_log(0,0,1)',I8_4p1m);
+I8_4p1m := expand(int(I8_4p1m,y=0..1));
+#
+# I8_4p1m := algsubs(A+B=C+D*x,I8_4p1m,exact);
+I8_4p1m := algsubs(A+B=C*(1-x),I8_4p1m,exact);
+I8_4p1m := subs(A=C+F*x,B=x*G,I8_4p1m);
+I8_4p1m := expand(I8_4p1m);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -(1-z)*s13
+I8_4p1m:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p1m);
+I8_4p1m:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p1m);
+I8_4p1m:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p1m);
+I8_4p1m:=applyrule(ln(x)='I_log(0,0,1)',I8_4p1m);
+I8_4p1m := expand(int(I8_4p1m,x=0..1));
+I8_4p1m := I8_4p1m;
+I8_4p1m := subs(C=-C,F=-F,G=-G,D=-D,I8_4p1m);
+#
+reste := I8_4p1m:
+result := 0;
+set_ln := indets(I8_4p1m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p1m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p1m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = (1-z)*s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(ln(-C) = ln(1-z)+z_log(-s13),C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+#
+quit;
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(par4_glob)\n");
+for l1 from 1 to 4 do
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ res_fin[l1] := (dresult+dreste)/t2;
+ res_fin[l1] := subs(ln=z_log,res_fin[l1]);
+ fprintf(fd,"case(%d)\n",l1);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"temp0 = %a\n",subs(s23=glob_s23,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_1m_6d_r3.m (revision 119)
@@ -0,0 +1,188 @@
+result1 := table(symmetric);
+result2 := table(symmetric);
+reste_f := table(symmetric);
+#
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+I6_4p1m := x/(A+B*y)*L_z[l1]*L_z[l2]*L_z[l3];
+#
+I6_4p1m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p1m));
+I6_4p1m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p1m);
+#
+I6_4p1m := I6_4p1m;
+# I6_4p1m := algsubs(A+B=C+D*x,I6_4p1m,exact);
+I6_4p1m := algsubs(A+B=C*(1-x),I6_4p1m,exact);
+I6_4p1m := subs(A=C+F*x,B=x*G,I6_4p1m);
+I6_4p1m := expand(I6_4p1m);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -(1-z)*s13
+I6_4p1m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p1m);
+I6_4p1m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p1m);
+I6_4p1m := expand(int(I6_4p1m,x=0..1));
+I6_4p1m := I6_4p1m;
+#
+reste := I6_4p1m:
+result := 0;
+set_ln := indets(I6_4p1m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p1m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p1m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+factor(subs(z=1,reste));
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2,l3] := result;
+end do:
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = (1-z)*s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l3);
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),C = c_var,F = f_var,
+ E = e_var,-result1[l1,l2,l3]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+quit;
+#
+fd:=fopen("test.res",APPEND);
+# pole pour F=0
+fprintf(fd,"select case(par2_glob)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3_glob)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par4_glob)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+ expr := result1[l1,l2,l3];
+ deg := -ldegree(expr,F);
+ c7 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-7)));
+ c6 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-6)));
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d7 := subs(diff(Cf(z),z,z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z,z)=0,diff(c7,z,z,z,z,z,z));
+ d6 := subs(diff(Cf(z),z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z)=0,diff(c6,z,z,z,z,z));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d7/720/Fprime^6+d6/120/Fprime^5+d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+# w1 := coeff(dresult,ln(t3/t2),1);
+# w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+# w12 := factor(w1+w2);
+# # qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+# tq1 := factor(w1*((t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2/2+((t2*t3-t1*s23)/t2/t3)^3/3));
+# tq2 :=factor(tq1+dreste);
+# # qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+# res_fin[l1,l2,l3] := (w12*z_log(t1*s23/t2^2)
+# - factor(w1*(t2*t3-t1*s23)^4/t2^4/t3^4)
+# *q(4,(t2*t3-t1*s23)/t2/t3,sign_arg)
+# + tq2)/t2;
+ res_fin[l1,l2,l3] := (dresult+dreste)/t2;
+ res_fin[l1,l2,l3] := subs(ln=z_log,res_fin[l1,l2,l3]);
+#
+ fprintf(fd,"case(%d)\n",l3);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2,l3]));
+close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2,l3]),filename="test.res");
+fd:=fopen("test.res",APPEND);
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_6d_r2.m (revision 119)
@@ -0,0 +1,246 @@
+#
+# rang 2
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+I6_4p3m := x/(A+B*y)*L_z[l1]*L_z[l2];
+#
+I6_4p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p3m));
+I6_4p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p3m);
+#
+I6_4p3m := I6_4p3m;
+I6_4p3m := algsubs(A+B=C+D*x,I6_4p3m,exact);
+I6_4p3m := subs(A=C+F*x,B=x*G,I6_4p3m);
+I6_4p3m := expand(I6_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p3m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p3m);
+I6_4p3m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p3m);
+I6_4p3m := expand(int(I6_4p3m,x=0..1));
+I6_4p3m := I6_4p3m;
+#
+reste := I6_4p3m:
+result := 0;
+set_ln := indets(I6_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+factor(subs(z=1,reste));
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2] := coeff(result,D,-3)/D^3+coeff(result,D,-2)/D^2
+ +coeff(result,D,-1)/D;
+result2[l1,l2] := coeff(result,G,-3)/G^3+coeff(result,G,-2)/G^2
+ +coeff(result,G,-1)/G;
+reste_f[l1,l2] := factor(result-result1[l1,l2]-result2[l1,l2]);
+result1[l1,l2] := collect(subs(G=D-F,result1[l1,l2]),[ln(C),ln(H),ln(E)],factor);
+result2[l1,l2] := collect(subs(D=G+F,result2[l1,l2]),[ln(C),ln(H),ln(E)],factor);
+reste_f[l1,l2] := collect(reste_f[l1,l2],[ln(C),ln(H),ln(E)],factor);
+end do:
+end do:
+# quit;
+# for l1 from 1 to 4 do
+# l1;
+# l2:=1;
+# r1:=result1[l1,l2];
+# r2:=result2[l1,l2];
+# r3:=reste_f[l1,l2];
+# l2:=2;
+# r1:=result1[l1,l2];
+# r2:=result2[l1,l2];
+# r3:=reste_f[l1,l2];
+# l2:=3;
+# r1:=result1[l1,l2];
+# r2:=result2[l1,l2];
+# r3:=reste_f[l1,l2];
+# l2:=4;
+# r1:=result1[l1,l2];
+# r2:=result2[l1,l2];
+# r3:=reste_f[l1,l2];
+# end do;
+# quit;
+# test1:=factor(test1);
+# wreste := test1;
+# wresult := 0;
+# set_ln := indets(test1,'specfunc(anything,ln)');
+# for func in set_ln do
+# if (func = ln(C)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# elif (func = ln(H)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=H-G-F,F=D-G,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# elif (func = ln(E)) then
+# ctemp := coeff(test1,func,1);
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=E-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# else
+# ctemp := factor(coeff(test1,func,1));
+# wreste := factor(wreste-ctemp*func);
+# ctemp := subs(C=H-G-F,numer(ctemp))/denom(ctemp);
+# ctemp := factor(ctemp);
+# end if;
+# wresult := wresult + ctemp*func;
+# end do;
+# wreste := subs(C=H-G-F,numer(wreste))/denom(wreste);
+# wreste := factor(wreste);
+# wreste;
+# wresult;
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par4)\n");
+for l2 from l1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-result1[l1,l2]):
+ truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-(result2[l1,l2]+reste_f[l1,l2])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+# quit;
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(glob_par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(glob_par4)\n");
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+ expr := result1[l1,l2];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+# d5 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d5));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+# d4 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d4));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(2*(t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2));
+ tq2 :=factor(tq1/2+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1,l2] := (w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^3/t2^3/t3^3)
+ *q(3,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2)/t2;
+ fprintf(fd,"case(%d)\n",l2);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2]));
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_8d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_8d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3m_8d_r0.m (revision 119)
@@ -0,0 +1,160 @@
+########################## I_4^8 #############################################
+l1 := 0;
+I8_4p3m := x^2*y*(ln(x)+ln(y)+ln(A+B*y));
+# I8_4p3m := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p3m := x^2*y*(ln(x)+ln(y));
+# I8_4p3m := x^2*y*(ln(A+B*y));
+I8_4p3m:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p3m));
+I8_4p3m:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p3m);
+I8_4p3m:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p3m);
+I8_4p3m:=applyrule(ln(y)='I_log(0,0,1)',I8_4p3m);
+I8_4p3m := expand(int(I8_4p3m,y=0..1));
+#
+I8_4p3m := algsubs(A+B=C+D*x,I8_4p3m,exact);
+I8_4p3m := subs(A=C+F*x,B=x*G,I8_4p3m);
+I8_4p3m := expand(I8_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I8_4p3m:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p3m);
+I8_4p3m:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p3m);
+I8_4p3m:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p3m);
+I8_4p3m:=applyrule(ln(x)='I_log(0,0,1)',I8_4p3m);
+I8_4p3m := expand(int(I8_4p3m,x=0..1));
+I8_4p3m := I8_4p3m;
+# qw1 := x^2*y*(ln(x)+ln(y)+ln(C+F*x+x*G*y));
+# qw2 := int(qw1,y=0..1);
+# verif := int(qw2,x=0..1);
+# verif := algsubs(F+G=D,verif,exact);
+# verif := factor(I8_4p3m-verif);
+# quit;
+# I8_4p3m := subs(ln(C)=ln(TC)-ln(C+D),ln(C+F)=ln(TCF)-ln(C+D),I8_4p3m);
+I8_4p3m := subs(C=-C,F=-F,G=-G,D=-D,I8_4p3m);
+#
+reste := I8_4p3m:
+result := 0;
+set_ln := indets(I8_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(-C-D)) then
+ ctemp := coeff(I8_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+result1[l1] := collect(subs(G=D-F,result1[l1]),[ln(-C),ln(-H),ln(-E)],factor);
+result2[l1] := result2[l1]+reste_f[l1];
+result2[l1] := collect(subs(D=G+F,result2[l1]),[ln(-C),ln(-H),ln(-E)],factor);
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(flag)\n");
+truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+ H = h_var,-result1[l1]):
+truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+ H = h_var,-(result2[l1])):
+# H = h_var,-(result2[l1]+reste_f[l1])):
+fprintf(fd,"case(%d)\n",1);
+fprintf(fd,"fg = %a\n",truc2);
+fprintf(fd,"case(%d)\n",2);
+fprintf(fd,"fg = %a\n",truc1);
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(-t3/t2),1);
+ w2 := coeff(dresult,ln(-t1*s23/t2^2),1);
+# factor(subs(s23=0,dreste));
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ tq2 := factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := w12*z_log(-t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+ *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2;
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+ close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r1.m (revision 119)
@@ -0,0 +1,126 @@
+#
+# rang 1
+L_z := [z*y,y*(1-z),(1-y)];
+for l1 from 1 to 3 do
+# l1 := 1;
+I4_3p3m := 1/(A+B*y)*L_z[l1];
+#
+I4_3p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I4_3p3m));
+I4_3p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I4_3p3m);
+#
+I4_3p3m := I4_3p3m;
+I4_3p3m := algsubs(A+B=H,I4_3p3m,exact);
+I4_3p3m := subs(A=C,B=D,I4_3p3m);
+I4_3p3m := expand(I4_3p3m);
+# C = z*s13+(1-z)*s23
+# D = z*(1-z)*s12-z*s13-(1-z)*s23
+# H = z*(1-z)*s12
+#
+reste := I4_3p3m:
+result := 0;
+set_ln := indets(I4_3p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ elif (func = ln(H)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I4_3p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s13+(1-z)*s23\n");
+fprintf(fd,"d_var = z*(1-z)*s12-z*s13-(1-z)*s23\n");
+fprintf(fd,"h_var = z*(1-z)*s12\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(C = c_var,D = d_var,
+ ln(H) = ln(z)+ln(1-z)+z_log(s12),
+ H = h_var,result1[l1]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+#
+quit;
+# pole pour F=0
+fprintf(fd,"select case(glob_par4)\n");
+for l1 from 1 to 3 do
+# l1 := 4;
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c3 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3));
+ c2 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2));
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ tq2 :=factor(tq1+dreste);
+ qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+ *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2;
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_4d_r3.m (revision 119)
@@ -0,0 +1,191 @@
+result1 := table(symmetric);
+result2 := table(symmetric);
+reste_f := table(symmetric);
+#
+L_z := [z*y,y*(1-z),(1-y)];
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+I4_3p3m := 1/(A+B*y)*L_z[l1]*L_z[l2]*L_z[l3];
+#
+I4_3p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I4_3p3m));
+I4_3p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I4_3p3m);
+#
+I4_3p3m := I4_3p3m;
+I4_3p3m := algsubs(A+B=H,I4_3p3m,exact);
+I4_3p3m := subs(A=C,B=D,I4_3p3m);
+I4_3p3m := expand(I4_3p3m);
+# C = z*s13+(1-z)*s23
+# D = z*(1-z)*s12-z*s13-(1-z)*s23
+# H = z*(1-z)*s12
+#
+reste := I4_3p3m:
+result := 0;
+set_ln := indets(I4_3p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ elif (func = ln(H)) then
+ ctemp := coeff(I4_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I4_3p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2,l3] := result;
+end do:
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s13+(1-z)*s23\n");
+fprintf(fd,"d_var = z*(1-z)*s12-z*s13-(1-z)*s23\n");
+fprintf(fd,"h_var = z*(1-z)*s12\n");
+fprintf(fd,"select case(par1)\n");
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par2)\n");
+for l2 from l1 to 3 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par3)\n");
+for l3 from l2 to 3 do
+# l1 := 1;
+ truc1:=subs(C = c_var,D = d_var,
+ ln(H) = ln(z)+ln(1-z)+z_log(s12),
+ H = h_var,result1[l1,l2,l3]):
+ truc1:=factor(truc1):
+ fprintf(fd,"case(%d)\n",l3);
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+quit;
+#
+fd:=fopen("test.res",APPEND);
+# pole pour F=0
+fprintf(fd,"select case(glob_par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(glob_par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(glob_par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+ expr := result1[l1,l2,l3];
+ deg := -ldegree(expr,F);
+ c7 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-7)));
+ c6 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-6)));
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d7 := subs(diff(Cf(z),z,z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z,z)=0,diff(c7,z,z,z,z,z,z));
+ d6 := subs(diff(Cf(z),z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z)=0,diff(c6,z,z,z,z,z));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d7/720/Fprime^6+d6/120/Fprime^5+d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*((t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2/2+((t2*t3-t1*s23)/t2/t3)^3/3));
+ tq2 :=factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1,l2,l3] := (w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^4/t2^4/t3^4)
+ *q(4,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2)/t2;
+#
+# CodeGeneration[Fortran](tq2);
+ fprintf(fd,"case(%d)\n",l3);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2,l3]));
+close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2,l3]),filename="test.res");
+# # codegen[fortran](tq2,filename="test_for.res");
+fd:=fopen("test.res",APPEND);
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p3m_6d_r1.m (revision 119)
@@ -0,0 +1,146 @@
+########################## I_4^8 #############################################
+L_z := [z*y,y*(1-z),(1-y)];
+for l1 from 1 to 3 do
+# l1 := 2;
+#
+I6_3p3m := y*(ln(y)+ln(A+B*y))*L_z[l1];
+I6_3p3m:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I6_3p3m));
+I6_3p3m:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I6_3p3m);
+I6_3p3m:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I6_3p3m);
+I6_3p3m:=applyrule(ln(y)='I_log(0,0,1)',I6_3p3m);
+I6_3p3m := expand(int(I6_3p3m,y=0..1));
+#
+I6_3p3m := algsubs(A+B=H,I6_3p3m,exact);
+I6_3p3m := subs(A=C,B=D,I6_3p3m);
+I6_3p3m := expand(I6_3p3m);
+# C = z*s13+(1-z)*s23
+# D = z*(1-z)*s12-z*s13-(1-z)*s23
+# H = z*(1-z)*s12
+I6_3p3m := subs(C=-C,H=-H,D=-D,I6_3p3m);
+#
+reste := I6_3p3m:
+result := 0;
+set_ln := indets(I6_3p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I6_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ elif (func = ln(-H)) then
+ ctemp := coeff(I6_3p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_3p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+result2[l1] := coeff(result,G,-3)/G^3+coeff(result,G,-2)/G^2
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s13+(1-z)*s23\n");
+fprintf(fd,"d_var = z*(1-z)*s12-z*s13-(1-z)*s23\n");
+fprintf(fd,"h_var = z*(1-z)*s12\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=subs(C = c_var,D = d_var,
+ ln(-H) = ln(z)+ln(1-z)+z_log(-s12),
+ H = h_var,result1[l1]):
+ truc1:=factor(truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+#
+quit;
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(glob_par4)\n");
+for l1 from 1 to 4 do
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+# dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(-t3/t2),1);
+ w2 := coeff(dresult,ln(-t1*s23/t2^2),1);
+# factor(subs(s23=0,dreste));
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(2*(t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2));
+ tq2 :=factor(tq1/2+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := (w12*z_log(-t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^3/t2^3/t3^3)
+ *q(3,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2);
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"temp0 = %a\n",subs(s23=glob_s23,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r1.m (revision 119)
@@ -0,0 +1,56 @@
+#
+# rang 1
+#
+# L_z := [x*y,(1-x)*y,1-y];
+L_z := [(1-x)*y,1-y,x*y];
+# L_z := [(1-x)*y,1-y,1-y+x*y];
+#
+for l1 from 1 to 3 do
+# l1 := 3;
+F := unapply(L_z[l1],x,y);
+result := F(x,y);
+# on introduit deux variables mux = 1-x et umy = 1-y
+result := algsubs(1-x=umx,result,exact);
+result := algsubs(1-y=umy,result,exact);
+# puis om multiplie par x*umx*y*umy
+result := result*x*umx*y*umy;
+result := applyrule(y^n::integer*umy^m::integer='Beta_y(n,m)',
+ result);
+result := applyrule(x^n::integer*umx^m::integer='Beta_x(n,m)',
+ result);
+result := expand(result);
+result_dv2 := coeff(result,epsilon,-2);
+result_dv1 := coeff(result,epsilon,-1);
+result_fin := factor(result-result_dv1/epsilon-result_dv2/epsilon^2);
+result_fin := factor(subs(epsilon=0,result_fin));
+result_div2[l1] := -result_dv2/m3s;
+result_div1[l1] := -(result_dv1 + result_dv2*ln(m3s))/m3s;
+I4_3p1m_1mi := -( result_fin + result_dv1*ln(m3s) + result_dv2*ln(m3s)^2/2);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2[l1] := I4_3p1m_1mi/m3s;
+#
+end do;
+# quit;
+#
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2[l1]):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r0.m (revision 119)
@@ -0,0 +1,75 @@
+#
+# rang 0
+#
+div := expand(subs(y=1,1));
+c := coeffs(div,x,'t');
+L_c := [c];
+L_t := [t];
+tot_div := 0;
+tot_ndiv := 0;
+for i from 1 to nops(L_t) do
+tot_div := tot_div - he(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+tot_ndiv := tot_ndiv - hf(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+end do;
+result_div := -tot_div;
+result_ndiv := -tot_ndiv;
+# A = m3^2
+# B = - m3^2 - Ap
+term := y/(A+B*y);
+term0 := subs(y=1,term);
+I4_3p2m_1mi := factor( (term - term0)/(1-y) );
+#
+I4_3p2m_1mi := applyrule(y^n::integer*(A::symbol+B::symbol*y)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,1,A,B)',I4_3p2m_1mi);
+# Ap = C*x + D*(1-x) - m3^2
+# B = - m3^2- Ap
+# C = p1^2
+# D = p2^2
+I4_3p2m_1mi := algsubs(A+B=-C*x-D*(1-x)+m3s,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := subs(A=m3s,B=-C*x-D*(1-x),I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'ln(anything)',f->ln(collect(op(1,f),x)) );
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'`+`',f->collect(f,x) );
+#
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D-m3s=-D1,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D=-D2,I4_3p2m_1mi,exact);
+result1 := -I4_3p2m_1mi;
+#
+I4_3p2m_1mi := subs(D1=-x*F-D+m3s,D2=-x*F-D,I4_3p2m_1mi);
+I4_3p2m_1mi := algsubs(D-m3s=E,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='K_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+#
+I4_3p2m_1mi := applyrule((A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='I_sans_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := factor(I4_3p2m_1mi);
+#
+I4_3p2m_1mi := subs(F=C-D,E=D-m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := subs(C=CT+m3s,D=DT+m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result2 := -I4_3p2m_1mi;
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"d1_var=-z*(s13-s23)-s23\n");
+fprintf(fd,"d2_var=-z*(s13-s23)-s23-m3_sq\n");
+ truc1:=subs(D1 = d1_var, D2 = d2_var,
+ m3s = m3_sq,result1):
+ fprintf(fd,"fg = %a\n",truc1);
+#
+# pour le programme fortran
+fd:=fopen("test.res",APPEND);
+ truc1:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result2):
+ trucp1:=applyrule(zdilog(A::anything)=0,truc1):
+ trucp1:=applyrule(z_log(A::anything)=0,trucp1):
+ truc2:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div):
+ truc3:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_ndiv):
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+ fprintf(fd,"f3p2m_1mi(3:4) = %a\n",truc2);
+# fprintf(fd,"f3p2m_1mi(5:6) = %a + (/ real(c_temp,ki),aimag(c_temp) /)\n",truc3);
+ fprintf(fd,"f3p2m_1mi(5:6) = %a \n",truc3);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_4d_r3.m (revision 119)
@@ -0,0 +1,68 @@
+#
+# rang 1
+#
+# L_z := [x*y,(1-x)*y,1-y];
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+# l2 := 1;
+# l3 := 3;
+F := unapply(L_z[l1]*L_z[l2]*L_z[l3],x,y);
+result := F(x,y);
+# on introduit deux variables mux = 1-x et umy = 1-y
+result := algsubs(1-x=umx,result,exact);
+result := algsubs(1-y=umy,result,exact);
+# puis om multiplie par x*umx*y*umy
+result := result*x*umx*y*umy;
+result := applyrule(y^n::integer*umy^m::integer='Beta_y(n,m)',
+ result);
+result := applyrule(x^n::integer*umx^m::integer='Beta_x(n,m)',
+ result);
+result := expand(result);
+result_dv2 := coeff(result,epsilon,-2);
+result_dv1 := coeff(result,epsilon,-1);
+result_fin := factor(result-result_dv1/epsilon-result_dv2/epsilon^2);
+result_fin := factor(subs(epsilon=0,result_fin));
+result_div2[l1,l2,l3] := -result_dv2/m3s;
+result_div1[l1,l2,l3] := -(result_dv1 + result_dv2*ln(m3s))/m3s;
+I4_3p1m_1mi := -( result_fin + result_dv1*ln(m3s) + result_dv2*ln(m3s)^2/2);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2[l1,l2,l3] := I4_3p1m_1mi/m3s;
+#
+end do;
+end do;
+end do;
+# quit;
+#
+#
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d,%d,%d)\n",l1,l2,l3);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1,l2,l3]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2[l1,l2,l3]):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1,l2,l3]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
+end do;
+end do;
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p0m_1mi_6d_r1.m (revision 119)
@@ -0,0 +1,48 @@
+#
+# rang 1
+#
+# L_z := [x*y,(1-x)*y,1-y];
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+# l1 := 3;
+F := unapply(L_z[l1],x,y);
+result_dv1 := -y*F(x,y);
+result_dv1 := int(result_dv1,x=0..1);
+result_dv1 := int(result_dv1,y=0..1);
+result_div1[l1] := collect(result_dv1,[Li2,ln],factor);
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+term1 := -2*y*F(x,y)*ln(x) ;
+term2 := -2*y*F(x,y)*ln(y) ;
+term3 := -y*F(x,y)*ln(m3s);
+I4_3p1m_1mi := -(term1 + term2 + term3);
+I4_3p1m_1mi := applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := int(I4_3p1m_1mi,y=0..1);
+I4_3p1m_1mi := int(I4_3p1m_1mi,x=0..1);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2[l1] := I4_3p1m_1mi;
+#
+end do;
+# quit;
+#
+#
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_4d_r2.m (revision 119)
@@ -0,0 +1,130 @@
+#
+# rang 1
+# L_z := [1-y,x*y,(1-x)*y];
+L_z := [x*y,(1-x)*y,1-y];
+#
+# A = m3^2
+# B = - m3^2 - Ap
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+# l1 := 1;
+# l2 := 1;
+#
+num := L_z[l1]*L_z[l2];
+#
+div := expand(subs(y=1,num));
+c := coeffs(div,x,'t');
+L_c := [c];
+L_t := [t];
+tot_div := 0;
+tot_ndiv := 0;
+for i from 1 to nops(L_t) do
+tot_div := tot_div - he(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+tot_ndiv := tot_ndiv - hf(degree(L_t[i],x)+1,CT,DT)*L_c[i];
+end do;
+result_div[l1,l2] := -tot_div;
+result_ndiv[l1,l2] := -tot_ndiv;
+#
+term := y*num/(A+B*y);
+term0 := subs(y=1,term);
+I4_3p2m_1mi := factor( (term - term0)/(1-y) );
+#
+I4_3p2m_1mi := applyrule(y^n::integer*(A::symbol+B::symbol*y)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,1,A,B)',I4_3p2m_1mi);
+# Ap = C*x + D*(1-x) - m3^2
+# B = - m3^2- Ap
+# C = p1^2
+# D = p3^2
+I4_3p2m_1mi := algsubs(A+B=-C*x-D*(1-x)+m3s,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(A=m3s,B=-C*x-D*(1-x),I4_3p2m_1mi);
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'ln(anything)',f->ln(collect(op(1,f),x)) );
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'`+`',f->collect(f,x) );
+#
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D-m3s=-D1,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D=-D2,I4_3p2m_1mi,exact);
+result1[l1,l2] := -I4_3p2m_1mi;
+#
+I4_3p2m_1mi := subs(x=(-D2-D)/F,I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(D1=-x*F-D+m3s,D2=-x*F-D,I4_3p2m_1mi);
+I4_3p2m_1mi := algsubs(D-m3s=E,I4_3p2m_1mi,exact);
+#
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='K_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+#
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule((A::anything+B::anything*x)^(-1)*(C::anything+B::anything*x)^n::negint='I_sans_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(x^n::posint*(C::anything+D::anything*x)^(m::negint) = 'I_sur_y(n,-m,C,D)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule((C::anything+D::anything*x)^(m::negint) = 'I_sur_y(0,-m,C,D)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := subs(F=C-D,E=D-m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := subs(C=CT+m3s,D=DT+m3s,I4_3p2m_1mi);
+rat_I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result_rat[l1,l2] := -rat_I4_3p2m_1mi;
+ff := (x,n) -> add((x)^i/i,i=1..n-1);
+I4_3p2m_1mi := applyrule(ln(-C::anything)*(C::anything+m3s)^n::negint = ln(m3s)*(C+m3s)^n-C^n*(q(-n,1+m3s/C,-'s||C')-(1+m3s/C)^n*'ff(1+m3s/C,-n)'),I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln,q],factor);
+result2[l1,l2] := -I4_3p2m_1mi;
+#
+# Li2 := x -> polylog(2,x);
+# test := factor(lambda^2*subs(C=D+lambda,I4_3p2m_1mi));
+# t1:=convert(taylor(test,lambda=0,3),polynom);
+# collect(t1,lambda,factor);
+end do;
+end do;
+# result_div[l1,l2];
+# result_ndiv[l1,l2];
+result_rat[l1,l2];
+# lprint(result2[l1,l2]);
+# quit;
+#
+# result1[3];
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"d1_var=-z*(s13-s23)-s23\n");
+fprintf(fd,"d2_var=-z*(s13-s23)-s23-m3_sq\n");
+fprintf(fd,"select case(par2)\n");
+for l1 from 1 to 3 do
+fprintf(fd,"case(%d)\n",l1);
+fprintf(fd,"select case(par3)\n");
+for l2 from l1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l2);
+ truc1:=subs(D1 = d1_var, D2 = d2_var,
+ m3s = m3_sq,x = z,result1[l1,l2]):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+#
+# pour le programme fortran
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"sc13=sign(un,s13+m3_sq)\n");
+fprintf(fd,"sc23=sign(un,s23+m3_sq)\n");
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d %d)\n",l1,l2);
+ truc1:=subs(sCT = sc13,sDT = sc23,CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result2[l1,l2]):
+ trucp1:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_rat[l1,l2]):
+ trucp1:=applyrule(zdilog(A::anything)=0,trucp1):
+ trucp1:=applyrule(z_log(A::anything)=0,trucp1):
+ truc2:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div[l1,l2]):
+ truc3:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_ndiv[l1,l2]):
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+ fprintf(fd,"a3p2m_1mi_div(3:4) = %a\n",truc2);
+# fprintf(fd,"f3p2m_1mi(5:6) = %a + (/ real(c_temp,ki),aimag(c_temp) /)\n",truc3);
+ fprintf(fd,"a3p2m_1mi_div(5:6) = %a \n",truc3);
+end do;
+end do;
+fprintf(fd,"end select\n");
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p2m_1mi_6d_r0.m (revision 119)
@@ -0,0 +1,85 @@
+#
+# rang 0
+#
+num := 1;
+tot_div := int(y*num,y=0..1);
+tot_div := int(tot_div,x=0..1);
+result_div := -tot_div;
+result_ndiv := 0;
+# A = m3^2
+# B = - m3^2 - Ap
+I4_3p2m_1mi := y*(ln(A+B*y)+ln(1-y));
+#
+I4_3p2m_1mi := applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(y^n::integer*ln(1-y)='I_log(n,1,-1)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(ln(1-y)='I_log(0,1,-1)',I4_3p2m_1mi);
+# Ap = C*x + D*(1-x) - m3^2
+# B = - m3^2- Ap
+# C = p1^2
+# D = p2^2
+I4_3p2m_1mi := algsubs(A+B=-C*x-D*(1-x)+m3s,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := subs(A=m3s,B=-C*x-D*(1-x),I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'ln(anything)',f->ln(collect(op(1,f),x)) );
+#
+I4_3p2m_1mi := subsindets(I4_3p2m_1mi,'`+`',f->collect(f,x) );
+#
+I4_3p2m_1mi := algsubs(C-D=F,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D-m3s=-D1,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := algsubs(x*F+D=-D2,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := subs(x=(-D2-D)/(C-D),I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result1 := I4_3p2m_1mi;
+# quit;
+#
+I4_3p2m_1mi := subs(x=(-D2-D)/F,I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+I4_3p2m_1mi := subs(D1=-x*F-D+m3s,D2=-x*F-D,I4_3p2m_1mi);
+I4_3p2m_1mi := algsubs(D-m3s=E,I4_3p2m_1mi,exact);
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule(x^n::integer*ln(A::anything+B::anything*x)='I_log(n,A,B)',expand(I4_3p2m_1mi));
+I4_3p2m_1mi := applyrule(ln(A::anything+B::anything*x)='I_log(0,A,B)',I4_3p2m_1mi);
+#
+I4_3p2m_1mi := applyrule(x^n::integer*(A::anything+B::anything*x)^m::negint='I_sur_y(n,-m,A,B)',I4_3p2m_1mi);
+I4_3p2m_1mi := applyrule((A::anything+B::anything*x)^m::negint='I_sur_y(0,-m,A,B)',I4_3p2m_1mi);
+I4_3p2m_1mi := expand(I4_3p2m_1mi);
+#
+I4_3p2m_1mi := subs(F=C-D,E=D-m3s,I4_3p2m_1mi);
+I4_3p2m_1mi := subs(C=CT+m3s,D=DT+m3s,I4_3p2m_1mi);
+rat_I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result_rat := rat_I4_3p2m_1mi;
+ff := (x,n) -> add((x)^i/i,i=1..n-1);
+I4_3p2m_1mi := applyrule(ln(-C::anything)*(C::anything+m3s)^n::negint = ln(m3s)*(C+m3s)^n-C^n*(q(-n,1+m3s/C,-'s||C')-(1+m3s/C)^n*'ff(1+m3s/C,-n)'),I4_3p2m_1mi);
+I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln,q],factor);
+# I4_3p2m_1mi := collect(I4_3p2m_1mi,[Li2,ln],factor);
+result2 := I4_3p2m_1mi;
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"d1_var=-z*(s13-s23)-s23\n");
+fprintf(fd,"d2_var=-z*(s13-s23)-s23-m3_sq\n");
+ truc1:=subs(D1 = d1_var, D2 = d2_var,
+ m3s = m3_sq,x = z,result1):
+ fprintf(fd,"fg = %a\n",truc1);
+#
+# pour le programme fortran
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"sc13=sign(un,s13+m3_sq)\n");
+fprintf(fd,"sc23=sign(un,s23+m3_sq)\n");
+ truc1:=subs(sCT = sc13,sDT = sc23,CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result2):
+ trucp1:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_rat):
+ trucp1:=applyrule(zdilog(A::anything)=0,trucp1):
+ trucp1:=applyrule(z_log(A::anything)=0,trucp1):
+ truc2:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div):
+ truc3:=subs(CT = s13, DT = s23,ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_ndiv):
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+ fprintf(fd,"f3p2m_1mi(3:4) = %a\n",truc2);
+# fprintf(fd,"f3p2m_1mi(5:6) = %a + (/ real(c_temp,ki),aimag(c_temp) /)\n",truc3);
+ fprintf(fd,"f3p2m_1mi(5:6) = %a \n",truc3);
Index: 95/branches/golem95_without_olo_cmake/tool/bernoulli.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/bernoulli.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/bernoulli.m (revision 119)
@@ -0,0 +1,13 @@
+#
+Digits := 40;
+fd := fopen("res_bernoulli.txt",WRITE);
+fprintf(fd,"%1.32f_ki,&\n",bernoulli(0));
+fprintf(fd,"%1.32f_ki,&\n",bernoulli(1)/2);
+#
+for i from 2 by 2 to 40 do
+ temp:=bernoulli(i)/((i+1)!) ;
+ #printf("toto=%1.32f_ki\n",temp);
+ fprintf(fd,"%1.32f_ki,&\n",temp);
+end do;
+#
+fclose(fd);
Index: 95/branches/golem95_without_olo_cmake/tool/residu.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/residu.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/residu.m (revision 119)
@@ -0,0 +1,16 @@
+# residu au pole en z =1/z1 pour le(n1,n3,m,z1,z3)
+# pour calculer le pole en z=1/z3 echanger n1 <-> n3 et z1 <-> z3
+residu_z := proc(n1,n3,m,z1,z3)
+ local res,i;
+ res := z^m*ln(z)/(z-1/z3)^n3;
+ if (n1 <> 1) then
+ for i from 1 to n1-1 do
+ res := diff(res,z);
+ end do;
+ end if;
+ res := subs(z=1/z1,res)/factorial(n1-1)/z1^n1/z3^n3;
+ res:=factor(res);
+ res:=collect(res,ln(1/z1),factor);
+ RETURN(res);
+end proc;
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r1.m (revision 119)
@@ -0,0 +1,162 @@
+#
+# rang 1
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 1;
+I6_4p2mopp := x/(A+B*y)*L_z[l1];
+#
+I6_4p2mopp := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2mopp));
+I6_4p2mopp := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2mopp);
+#
+I6_4p2mopp := I6_4p2mopp;
+# I6_4p2mopp := algsubs(A+B=C+D*x,I6_4p2mopp,exact);
+I6_4p2mopp := algsubs(A+B=C*(1-x),I6_4p2mopp,exact);
+I6_4p2mopp := subs(A=C+F*x,B=x*G,I6_4p2mopp);
+I6_4p2mopp := expand(I6_4p2mopp);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -z*s12-(1-z)*s13
+I6_4p2mopp := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2mopp);
+I6_4p2mopp := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2mopp);
+I6_4p2mopp := expand(int(I6_4p2mopp,x=0..1));
+I6_4p2mopp := I6_4p2mopp;
+#
+reste := I6_4p2mopp:
+result := 0;
+set_ln := indets(I6_4p2mopp,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2mopp,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2mopp,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+# result1[l1] := coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+# result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+# reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+result1[l1] := coeff(result,ln(C),1)*ln(C);
+result2[l1] := coeff(result,ln(E),1)*ln(E);
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+end do:
+# for l1 from 1 to 4 do
+# result1[l1];
+# result2[l1];
+# reste_f[l1];
+# end do;
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+ truc2:=subs(C = c_var,F = f_var,
+ E = e_var,-(result2[l1]+reste_f[l1])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+fprintf(fd,"select case(par4_glob)\n");
+for l1 from 1 to 4 do
+# l1 := 4;
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+# c3 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3));
+# c2 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2));
+# c1 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+# c0 := subs(C = Cf(z), F = Ff(z),
+# G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+# D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ c3 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3));
+ c2 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2));
+ c1 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+# dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+# Ff(z0)=0,Fprime=t2,Cprime=t5,
+# Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+# Dsecond=-2*s23,z0=t4/t2,dtot));
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+# w1 := coeff(dresult,ln(t3/t2),1);
+# w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+# w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+# tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+# tq2 :=factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+# res_fin[l1] := w12*z_log(t1*s23/t2^2)
+# - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+# *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+# + tq2;
+# res_fin[l1] := res_fin[l1]/t2;
+ res_fin[l1] := (dresult+dreste)/t2;
+ res_fin[l1] := subs(ln=z_log,res_fin[l1]);
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
Index: 95/branches/golem95_without_olo_cmake/tool/matrix_3m.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/matrix_3m.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/matrix_3m.m (revision 119)
@@ -0,0 +1,73 @@
+with(linalg);
+Sa:=matrix(4,4,[
+0,S[1,2],S[1,3],S[1,4],
+S[1,2],0,S[2,3],S[2,4],
+S[1,3],S[2,3],0,S[3,4],
+S[1,4],S[2,4],S[3,4],0] );
+set4 := {1,2,3,4};
+#S[1,4] := 0;
+#
+#
+# $include "procedure.m"
+#
+# on calcule les b4
+Un4:=vector([1,1,1,1]);
+B4M:=linsolve(Sa,Un4);
+InvSa:=inverse(Sa);
+Determi4 := det(Sa);
+for i from 1 to 4 do
+# b4(i,{}) := factor(B4M[i]*Determi4);
+ b4(i,{}) := factor(B4M[i]);
+end do;
+for i from 1 to 4 do
+ for j from 1 to 4 do
+# InvS4(i,j,{}) := factor(InvSa[i,j]*Determi4);
+ InvS4(i,j,{}) := factor(InvSa[i,j]);
+ end do:
+end do:
+#invs4 := evalm(InvSa*Determi4);
+#b4 := evalm(B4M*Determi4);
+#sumb4 := factor(b4[1]+b4[2]+b4[3]+b4[4]);
+#
+#
+SumB4:=proc(Se::set)
+ local res,vk,k;
+ res:=0;
+ for k from 1 to 4 do
+ vk:=set4[k];
+ res:=res+b4(vk,Se);
+ end do;
+ RETURN(res);
+end proc;
+#
+hd:=fopen("resu_3m.res",WRITE);
+#fprintf(hd,"det=%a\n",factor(Determi4));
+for i from 1 to 4 do
+ temp := b4(i,{});
+# fprintf(hd,"b(%d)=%a/det\n",i,temp);
+ fprintf(hd,"b(%d)=%a\n",i,temp);
+end do;
+#fprintf(hd,"sumb=%a/det\n",factor(SumB4({})));
+fprintf(hd,"sumb=%a\n",factor(SumB4({})));
+#
+for i from 1 to 4 do
+ for j from i to 4 do
+ temp := InvS4(i,j,{});
+# fprintf(hd,"invs(%d,%d)=%a/det\n",i,j,temp);
+ fprintf(hd,"invs(%d,%d)=%a\n",i,j,temp);
+ end do;
+end do;
+#with(CodeGeneration);
+#Fortran(Determi4,resultname="dets");
+#Fortran(invs4);
+#Fortran(b4);
+#Fortran(sumb4);
+# for i from 1 to 4 do
+# for j from 1 to 4 do
+# lprint(i,j);
+# # Fortran([InvS4(i,j,{})],resultname="smat");
+# end do;
+# end do;
+quit;
+
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_6d_r3.m (revision 119)
@@ -0,0 +1,197 @@
+result1 := table(symmetric);
+result2 := table(symmetric);
+reste_f := table(symmetric);
+#
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+I6_4p2mopp := x/(A+B*y)*L_z[l1]*L_z[l2]*L_z[l3];
+#
+I6_4p2mopp := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2mopp));
+I6_4p2mopp := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2mopp);
+#
+I6_4p2mopp := I6_4p2mopp;
+# I6_4p2mopp := algsubs(A+B=C+D*x,I6_4p2mopp,exact);
+I6_4p2mopp := algsubs(A+B=C*(1-x),I6_4p2mopp,exact);
+I6_4p2mopp := subs(A=C+F*x,B=x*G,I6_4p2mopp);
+I6_4p2mopp := expand(I6_4p2mopp);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -z*s12-(1-z)*s13
+I6_4p2mopp := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2mopp);
+I6_4p2mopp := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2mopp);
+I6_4p2mopp := expand(int(I6_4p2mopp,x=0..1));
+I6_4p2mopp := I6_4p2mopp;
+#
+reste := I6_4p2mopp:
+result := 0;
+set_ln := indets(I6_4p2mopp,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2mopp,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2mopp,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+factor(subs(z=1,reste));
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1,l2,l3] := coeff(result,ln(C),1)*ln(C);
+result2[l1,l2,l3] := coeff(result,ln(E),1)*ln(E);
+reste_f[l1,l2,l3] := factor(result-result1[l1,l2,l3]-result2[l1,l2,l3]);
+reste_f[l1,l2,l3] := factor(result-result1[l1,l2,l3]-result2[l1,l2,l3]);
+end do:
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par2)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par4)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l3);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ E = e_var,-result1[l1,l2,l3]):
+ truc2:=subs(C = c_var,F = f_var,
+ E = e_var,-(result2[l1,l2,l3]+reste_f[l1,l2,l3])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+# quit;
+#
+fd:=fopen("test.res",APPEND);
+# pole pour F=0
+fprintf(fd,"select case(par2_glob)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par3_glob)\n");
+for l2 from l1 to 4 do
+ fprintf(fd,"case(%d)\n",l2);
+ fprintf(fd,"select case(par4_glob)\n");
+for l3 from l2 to 4 do
+# l1 := 1;
+# l2 := 2;
+# l3 := 2;
+ expr := result1[l1,l2,l3];
+ deg := -ldegree(expr,F);
+ c7 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-7)));
+ c6 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-6)));
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d7 := subs(diff(Cf(z),z,z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z,z)=0,diff(c7,z,z,z,z,z,z));
+ d6 := subs(diff(Cf(z),z,z,z,z,z)=0,diff(Ff(z),z,z,z,z,z)=0,
+ diff(Df(z),z,z,z,z,z)=0,diff(c6,z,z,z,z,z));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d7/720/Fprime^6+d6/120/Fprime^5+d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+# w1 := coeff(dresult,ln(t3/t2),1);
+# w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+# w12 := factor(w1+w2);
+# # qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+# tq1 := factor(w1*((t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2/2+((t2*t3-t1*s23)/t2/t3)^3/3));
+# tq2 :=factor(tq1+dreste);
+# # qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+# res_fin[l1,l2,l3] := (w12*z_log(t1*s23/t2^2)
+# - factor(w1*(t2*t3-t1*s23)^4/t2^4/t3^4)
+# *q(4,(t2*t3-t1*s23)/t2/t3,sign_arg)
+# + tq2)/t2;
+ res_fin[l1,l2,l3] := (dresult+dreste)/t2;
+ res_fin[l1,l2,l3] := subs(ln=z_log,res_fin[l1,l2,l3]);
+#
+ fprintf(fd,"case(%d)\n",l3);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2,l3]));
+close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2,l3]),filename="test.res");
+fd:=fopen("test.res",APPEND);
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_8d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_8d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2mopp_8d_r1.m (revision 119)
@@ -0,0 +1,146 @@
+########################## I_4^8 #############################################
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+# l1 := 2;
+#
+I8_4p2mopp := x^2*y*(ln(x)+ln(y)+ln(A+B*y))*L_z[l1];
+# I8_4p2mopp := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p2mopp := x^2*y*(ln(x)+ln(y));
+# I8_4p2mopp := x^2*y*(ln(A+B*y));
+I8_4p2mopp:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p2mopp));
+I8_4p2mopp:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(ln(y)='I_log(0,0,1)',I8_4p2mopp);
+I8_4p2mopp := expand(int(I8_4p2mopp,y=0..1));
+#
+# I8_4p2mopp := algsubs(A+B=C+D*x,I8_4p2mopp,exact);
+I8_4p2mopp := algsubs(A+B=C*(1-x),I8_4p2mopp,exact);
+I8_4p2mopp := subs(A=C+F*x,B=x*G,I8_4p2mopp);
+I8_4p2mopp := expand(I8_4p2mopp);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = -z*s24-(1-z)*s34
+# D = -z*s12-(1-z)*s13
+I8_4p2mopp:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p2mopp);
+I8_4p2mopp:=applyrule(ln(x)='I_log(0,0,1)',I8_4p2mopp);
+I8_4p2mopp := expand(int(I8_4p2mopp,x=0..1));
+I8_4p2mopp := I8_4p2mopp;
+I8_4p2mopp := subs(C=-C,F=-F,G=-G,D=-D,I8_4p2mopp);
+#
+reste := I8_4p2mopp:
+result := 0;
+set_ln := indets(I8_4p2mopp,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p2mopp,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=-C-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=-C-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p2mopp,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=-C-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+F=E,result,exact);
+result := subs(G=-E,result);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,ln(-C),1)*ln(-C);
+result2[l1] := coeff(result,ln(-E),1)*ln(-E);
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"select case(par4)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(flag)\n");
+ truc1:=subs(C = c_var,F = f_var,
+ E = e_var,-result1[l1]):
+ truc2:=subs(C = c_var,F = f_var,
+ E = e_var,-(result2[l1]+reste_f[l1])):
+ fprintf(fd,"case(%d)\n",1);
+ fprintf(fd,"fg = %a\n",truc2);
+ fprintf(fd,"case(%d)\n",2);
+ fprintf(fd,"fg = %a\n",truc1);
+ fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(par4_glob)\n");
+for l1 from 1 to 4 do
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ E = Cf(z)+Ff(z),coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=-t5,
+ Dsecond=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ res_fin[l1] := (dresult+dreste)/t2;
+ res_fin[l1] := subs(ln=z_log,res_fin[l1]);
+ fprintf(fd,"case(%d)\n",l1);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"temp0 = %a\n",subs(s23=glob_s23,res_fin[l1]));
+end do:
+fprintf(fd,"end select\n");
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/tens_rec/tens.py
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/tens_rec/tens.py (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/tens_rec/tens.py (revision 119)
@@ -0,0 +1,2331 @@
+# vim: ts=3:sw=3
+
+from gmpy import mpq
+
+F90_WIDTH = 80
+
+TENS_DEBUG = False
+
+PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
+ 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
+ 73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
+ 127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
+ 179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
+ 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
+ 283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
+ 353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
+ 419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
+ 467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
+ 547, 557, 563, 569, 571, 577, 587, 593, 599, 601,
+ 607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
+ 661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
+ 739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
+ 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
+ 877, 881, 883, 887, 907, 911, 919, 929, 937, 941,
+ 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013,
+ 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069,
+ 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151,
+ 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223,
+ 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291,
+ 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373]
+
+zero = mpq(0)
+one = mpq(1)
+
+precision_golem = "precision_golem"
+array_golem = "array"
+matrice_golem = "matrice_s"
+ff_golem = "form_factor_type"
+ffp_golem = "form_factor_%dp"
+
+ff_suffix = ""
+# ff_suffix = "_b"
+
+golem_minlegs = 1
+
+PAT = {
+ 'globsolve': 'solve%d',
+ 'solve': 'solve%d_%d',
+ 'globtenseval': 'tenseval%d',
+ 'cglobtenseval': 'ctenseval%d',
+ 'tenseval': 'tenseval%d_%d',
+ 'tenseval': 'tenseval%d_%d',
+ 'ctenseval': 'ctenseval%d_%d',
+ 'reconstruct': 'reconstruct%d',
+ 'coefftype': 'coeff_type_%d',
+ 'printcoeffs': 'print_coeffs_%d',
+ 'evaluate': 'evaluate',
+ 'contract': 'contract%d_%d',
+ 'mucontract': 'contract_%s',
+ 'tenscontracta': 'contract_a_tensor_%d',
+ 'tenscontractb': 'contract_b_tensor_%d',
+ 'tenscontractc': 'contract_c_tensor_%d'
+ }
+
+def combinat(n, k):
+ """
+ Calculates the binomial coefficient (n atop k).
+ """
+ if k < 0 or k > n:
+ return 0
+ else:
+ num = 1
+ den = 1
+ for i in range(1, k+1):
+ num *= n-i+1
+ den *= i
+ return num/den
+
+def generate_mapping(R, k):
+ """
+ Generates a mapping from tensor components \hat{C}(a_1, ..., a_k)
+ into a one dimensional array.
+
+ PARAMETER
+
+ R -- rank
+ k -- number of non-zero components of q
+
+ RETURN
+
+ (lst, dic)
+
+ lst -- list of (a_1, ..., a_k)
+ dic -- mapping from (a_1, ..., a_k) -> int
+
+ lst[dic[X]] = X if X in dic
+ """
+
+ def rec_generator(k, R):
+ if k == 0:
+ yield []
+ elif k <= R:
+ for a_1 in range(1, R - (k - 1) + 1):
+ if k > 1:
+ for tail in rec_generator(k - 1, R - a_1):
+ yield [a_1] + tail
+ else:
+ yield [a_1]
+
+ lst = []
+ dic = {}
+ i = 0
+ for indices in rec_generator(k, R):
+ t = tuple(indices)
+ lst.append(t)
+ dic[t] = i
+ i += 1
+
+ assert i == combinat(R, k), \
+ "len(%s) != %d, R=%d,k=%d" % (lst,combinat(R, k),R,k)
+ return lst, dic
+
+def generate_equations(R, k):
+ """
+ Generates a set of equations for a given number of non-zero
+ components and fixed maximum rank.
+
+ PARAMETER
+
+ R -- rank
+ k -- number of non-zero components of q
+
+ RETURN
+
+ (LHS, RHS)
+
+ LHS -- a matrix (i.e. list of lists) of coefficients
+ RHS -- a list of values of q
+ """
+
+ lst, dic = generate_mapping(R, k)
+ l = len(lst)
+
+ LHS = []
+ RHS = []
+
+ for num_eq in range(l):
+ q = map(lambda i: PRIMES[i], lst[num_eq])
+ coeffs = [
+ reduce(lambda x,y: x*y, map(lambda (b,e): b**e, zip(q, term)), 1)
+ for term in lst]
+
+ LHS.append(coeffs)
+ RHS.append(q)
+
+ return LHS, RHS, lst, dic
+
+def matrix_inverse(M_int):
+ """
+ Matrix inversion by Gauss elimination.
+
+ PARAMETER
+
+ M_int -- square matrix, represented as list of lists
+
+ RETURN
+
+ square matrix, represented as list of lists which is the inverse of M_int
+ """
+ M = []
+ R = []
+ n = len(M_int)
+ i = 0
+ for row in M_int:
+ M.append(map(mpq, row))
+ R.append([zero]*i + [one] + [zero]*(n-i-1))
+ i += 1
+
+ # Forward substitution
+ for i in range(n):
+ # Find pivot element
+ max_el = abs(M[i][i])
+ max_row = i
+ for j in range(i+1, n):
+ if abs(M[j][i]) > max_el:
+ max_row = j
+ max_el = abs(M[j][i])
+
+ # Swap pivot row to the top
+ if max_row != i:
+ tmp = M[i]
+ M[i] = M[max_row]
+ M[max_row] = tmp
+
+ tmp = R[i]
+ R[i] = R[max_row]
+ R[max_row] = tmp
+
+ if M[i][i] == zero:
+ raise ZeroDivisionError, "Cannot invert singular matrix."
+
+ pivot = M[i][i]
+ for k in range(i, n):
+ M[i][k] /= pivot
+ for k in range(0, n):
+ R[i][k] /= pivot
+
+ for j in range(i+1, n):
+ f = M[j][i]
+ if f == zero:
+ continue
+
+ for k in range(i, n):
+ M[j][k] -= f * M[i][k]
+ for k in range(n):
+ R[j][k] -= f * R[i][k]
+
+ # Backward substitution
+ for i in range(n-1, -1, -1):
+ for j in range(i):
+ f = M[j][i]
+ if f == zero:
+ continue
+
+ for k in range(n):
+ R[j][k] -= f * R[i][k]
+
+ return R
+
+def fmt_mpq_f90(q):
+ """
+ Formats a rational number according to our Fortran 90 conventions,
+ as real(kind=ki).
+
+ PARAMETER
+
+ q -- a number of type gmpy.mpq
+
+ RETURN
+
+ a string representing the rational number in Fortran 90.
+ """
+ num = q.numer()
+ den = q.denom()
+
+ if num == zero:
+ return "0.0_ki"
+ elif den == one:
+ return "%s.0_ki" % num
+ else:
+ return "%s.0_ki/%s.0_ki" % (num, den)
+
+def write_matrix_f90(f, indent, lname, rname, k, LHS, RHS):
+ """
+ Writes a matrix and a vector to a Fortran90 file.
+ The matrix and the vector form a linear system in the sense,
+ that LHS[i] * x = N(q_i), where N is the numerator function,
+ and the non-zero entries of q_i are in RHS[i].
+
+ PARAMETER
+
+ f -- a file object open for writing
+ indent -- number of blank characters to be added at the beginning
+ of the line.
+ lname -- name of the matrix LHS
+ rname -- name of the matrix RHS
+ k -- number of non-zero entries in q
+ LHS -- a matrix
+ RHS -- vector
+ """
+
+ MI = matrix_inverse(LHS)
+
+ n = len(RHS)
+
+ f.write(" "*indent +
+ "real(ki), dimension(%d,%d), parameter, private :: %s = &\n"
+ % (n, n, lname))
+ f.write(" "*indent + "& reshape((/&\n")
+ f.write(" "*indent + "&")
+ col = indent + 1
+ first = True
+ for row in MI:
+ for element in row:
+ if first:
+ first = False
+ else:
+ f.write(",")
+ col += 1
+ s = fmt_mpq_f90(element)
+ l = len(s)
+ if col + l + 2 > F90_WIDTH:
+ f.write(" &\n" + " "*indent + "&")
+ col = indent + 1
+ f.write(s)
+ col += l
+ f.write(" "*indent + "/),&\n")
+ f.write(" "*indent + "& (/%d,%d/), order=(/2,1/))\n" % (n, n))
+
+ f.write(" "*indent +
+ "real(ki), dimension(%d,%d), parameter, private :: %s = &\n"
+ % (n, k, rname))
+ f.write(" "*indent + "& reshape((/&\n")
+ f.write(" "*indent + "&")
+ col = indent + 1
+ first = True
+ for row in RHS:
+ for element in row:
+ if first:
+ first = False
+ else:
+ f.write(",")
+ col += 1
+ s = "%s.0_ki" % element
+ l = len(s)
+ if col + l + 2 > F90_WIDTH:
+ f.write(" &\n" + " "*indent + "&")
+ col = indent + 1
+ f.write(s)
+ col += l
+ f.write(" "*indent + "/),&\n")
+ f.write(" "*indent + "& (/%d,%d/), order=(/2,1/))\n" % (n, k))
+
+def write_numeval_interface(f, indent, name, d):
+ """
+ Writes an interface defining the expected signature of the
+ numerator function.
+
+ We use a real q and mu^2 in this implementation and allow the function
+ to return a complex value.
+
+ PARAMETER
+ f -- a file open for writing
+ indent -- number of blank characters to be added at the beginning
+ of the line
+ name -- name of the function in the interface
+ d -- number of space-time dimensions
+
+ OUTPUS
+
+ For name=NAME and d=4, this function produces the following output in f:
+
+ interface
+ function NAME(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: NAME
+ end function NAME
+ interface
+ """
+ f.write(" "*indent+"interface\n")
+ nin = indent + 3
+ f.write(" "*nin+"function %s(Q, mu2)\n" % name)
+ nin+=3
+ f.write(" "*nin+"use %s, only: ki\n" % precision_golem)
+ f.write(" "*nin+"implicit none\n")
+ f.write(" "*nin+"real(ki), dimension(0:%d), intent(in) :: Q\n" % (d-1))
+ f.write(" "*nin+"real(ki), intent(in) :: mu2\n")
+ f.write(" "*nin+"complex(ki) :: %s\n" % name)
+ nin-=3
+ f.write(" "*nin+"end function %s\n" % name)
+ f.write(" "*indent+"end interface\n")
+
+def write_subroutine_solve(f, indent, name, k, dim, lname, rname, type_name,
+ recon_name, d, recon_name_extra=None, type_name_extra=None):
+ """
+ Writes a subroutine to solve for a certain set of coefficients.
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- indentation level (number of blanks prefixing the line)
+ name -- name of this subroutine
+ k -- number of non-zero components in q
+ dim -- number of coefficients to solve for
+ lname -- name of the LHS matrix (inverse of the original LHS)
+ rname -- name of the RHS (values for q)
+ type_name -- name of the type containing the coefficints
+ recon_name -- name of the function used to subtract known bits
+ d -- number of space time dimensions
+ recon_name_extra -- name of the function used to subtract
+ a second set of coefficients
+ type_name_extra -- name of the type containing the extra coefficients
+ """
+
+ if recon_name_extra is not None:
+ xtra = ", coeffs2"
+ else:
+ xtra = ""
+
+ for line in DOC.subroutine_solve(name,xtra,lname,rname,d-1,type_name):
+ f.write(" "*indent + line + "\n")
+
+ f.write(" "*indent
+ +"subroutine %s(numeval, indices, mu2, coeffs, idx%s)\n"
+ % (name, xtra))
+ nin = indent + 3
+ f.write(" "*nin+"! generated by: write_subroutine_solve\n")
+ f.write(" "*nin+"implicit none\n")
+ write_numeval_interface(f, nin, "numeval", d)
+ f.write(" "*nin+"integer, dimension(%d), intent(in) :: indices\n" % k)
+ f.write(" "*nin+"real(ki), intent(in) :: mu2\n")
+ f.write(" "*nin+"type(%s), intent(inout) :: coeffs\n" % type_name)
+ f.write(" "*nin+"integer, intent(in) :: idx\n")
+ if recon_name_extra is not None:
+ f.write(" "*nin+"type(%s), intent(in), optional :: coeffs2\n"
+ % type_name_extra)
+ f.write(" "*nin+"complex(ki), dimension(%d) :: xnum\n" % dim)
+ f.write(" "*nin+"real(ki), dimension(0:%d) :: Q\n" % (d-1))
+ f.write(" "*nin+"integer :: i\n")
+ if k < d:
+ f.write(" "*nin+"Q(:)=0.0_ki\n")
+ if recon_name_extra is not None:
+ f.write(" "*nin+"if (present(coeffs2)) then\n")
+ nin += 3
+ f.write(" "*nin+"do i=1,%d\n" % dim)
+ nin += 3
+ for j in range(1, k+1):
+ f.write(" "*nin+"Q(indices(%d)) = %s(i,%d)\n" % (j,rname,j))
+ f.write(" "*nin+"xnum(i) = numeval(Q, mu2) &\n")
+ f.write(" "*(nin+3) + "& - %s(Q, coeffs, %d) &\n" % (recon_name, k-1))
+ f.write(" "*(nin+3) + "& - %s(Q, coeffs2, %d)\n"
+ % (recon_name_extra, k))
+ nin -= 3
+ f.write(" "*nin+"end do\n")
+ nin -= 3
+ f.write(" "*nin+"else\n")
+ nin += 3
+
+ f.write(" "*nin+"do i=1,%d\n" % dim)
+ nin += 3
+ for j in range(1, k+1):
+ f.write(" "*nin+"Q(indices(%d)) = %s(i,%d)\n" % (j,rname,j))
+ f.write(" "*nin+"xnum(i) = numeval(Q, mu2) - %s(Q, coeffs, %d)\n"
+ % (recon_name, k-1))
+ nin -= 3
+ f.write(" "*nin+"end do\n")
+ if recon_name_extra is not None:
+ nin -= 3
+ f.write(" "*nin+"end if\n")
+ f.write(" "*nin+"coeffs%%c%d(idx,:) = matmul(%s,xnum)\n" % (k, lname))
+ f.write(" "*indent+"end subroutine %s\n" % name)
+
+def write_function_recon(f, indent, name, k, dic, d, qtype = "real"):
+ """
+ Writes a function which computes N(q) from the reconstructed
+ coefficients for a given value of q.
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- indentation level
+ name -- name of the function to be written
+ k -- number of non-zero components of q
+ dic -- dictionary mapping powers of components of q to
+ indices in the coefficient arrays
+ d -- number of space-time dimensions
+ qtype -- type of q (real or complex) in this routine.
+ """
+ dim = len(dic)
+ for line in DOC.function_recon(name,k,d-1,qtype,dim):
+ f.write(" "*indent + line + "\n")
+ f.write(" "*indent+"pure function %s(Q, indices, coeffs)\n" % name)
+ nin = indent + 3
+ f.write(" "*nin+"! generated by: write_function_recon\n")
+ f.write(" "*nin+"implicit none\n")
+ f.write(" "*nin+"integer, dimension(%d), intent(in) :: indices\n" % k)
+ f.write(" "*nin+"complex(ki), dimension(%d), intent(in) :: coeffs\n" % dim)
+ f.write(" "*nin+"%s(ki), dimension(0:%d), intent(in) :: Q\n"
+ % (qtype, (d-1)))
+ f.write(" "*nin+"complex(ki) :: %s\n" % name)
+ for i in range(k):
+ f.write(" "*nin+"%s(ki) :: q%d\n" % (qtype, i))
+ bin = [tuple(lst) for lst in binary(k)]
+ lines = []
+ regs = []
+ calculate_polynomial(lines, regs, nin, bin[1:], dic)
+ regs = set(regs)
+ for reg in regs:
+ f.write(" "*nin+"complex(ki) :: %s\n" % reg)
+ f.write(" "*nin+"complex(ki) :: acc\n")
+
+ for i in range(k):
+ f.write(" "*nin+"q%d = Q(indices(%d))\n" % (i, i+1))
+
+ for line in lines:
+ f.write(line + "\n")
+
+ f.write(" "*nin+"%s = acc\n" % name)
+ f.write(" "*indent+"end function %s\n" % name)
+
+def binary(k):
+ """
+ Yields the binary representations of the numbers up to 2^k:
+
+ >>> [x for x in binary(3)]
+ [[0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0], [1,1,1]]
+ """
+ if k == 0:
+ yield []
+ else:
+ for l in binary(k-1):
+ yield l + [0]
+ yield l + [1]
+
+def poly_includes(monomial, exponents):
+ """
+ Checks if a monomial contains at least the given set of powers
+ of variables.
+
+ EXAMPLE
+
+ >>> m = [4, 0 1]
+ >>> poly_includes(m, [3, 0, 0])
+ True
+ >>> poly_includes(m, [3, 1, 1])
+ False
+ """
+ for p, q in zip(monomial, exponents):
+ if p < q:
+ return False
+ return True
+
+def poly_subtract(monomial, exponents):
+ """
+ Divides out powers of variables from a monomial
+
+ EXAMPLE
+
+ >>> m = [4, 0 1]
+ >>> poly_subtract(m, [3, 0, 0])
+ [1, 0, 1]
+ >>> poly_includes(m, [1, 0, 1])
+ [3, 0, 0]
+ """
+ result = []
+ for p, q in zip(monomial, exponents):
+ result.append(p - q)
+ return tuple(result)
+
+def format_monomial(exponents, coeff):
+ """
+ Formats a monomial for printing in Fortran style.
+
+ EXAMPLE
+
+ >>> m = [4, 0, 1]
+ >>> format_monomial(m, "5.0")
+ '5.0*q0**4*q3'
+ """
+ n = len(exponents)
+ factors = [coeff]
+ for i in range(n):
+ if exponents[i] == 1:
+ factors.append("q%d" % i)
+ elif exponents[i] != 0:
+ factors.append("q%d**%s" % (i, exponents[i]))
+ return "*".join(factors)
+
+def calculate_polynomial(lines, regs, indent, bin, dic, path=[]):
+ """
+ Produces a program fragment to compute a polynomial using
+ a multivariate Horner scheme
+
+ PARAMETER
+
+ lines -- list of strings, used as an output buffer
+ regs -- list of temporary variables introduced by the algorithm
+ indent -- indentation level
+ bin -- list of all possibilities selecting variables
+ dic -- dictionary mapping between indices of the coefficients
+ and powers of q_i
+ path -- location of the function call in the tree of recursive calls
+ """
+ l = len(bin)
+ count = [0 for i in range(l)]
+ max_count = 0
+ max_pos = 0
+ for exponents in dic.iterkeys():
+ for i in range(l):
+ if poly_includes(exponents, bin[i]):
+ count[i] += 1
+ if count[i] >= max_count:
+ max_count = count[i]
+ max_pos = i
+ pivot = bin[max_pos]
+
+ if max_count <= 1:
+ first = True
+ col = indent + 6
+ line = ""
+ for exponents, coeff in dic.iteritems():
+ term = format_monomial(exponents, "coeffs(%d)" % (coeff+1))
+ lt = len(term)
+ if first:
+ line = " "*indent+"acc = "+term
+ col = indent + 6 + lt
+ first = False
+ elif col + lt + 3 <= F90_WIDTH:
+ line = line + " + " + term
+ col += lt + 3
+ else:
+ lines.append(line)
+ line = (" "*indent) + "acc = acc + " + term
+ col = indent + 12 + lt
+ if not first:
+ lines.append(line)
+ else:
+ A1 = {}
+ A0 = {}
+
+ for exponents, coeff in dic.iteritems():
+ if poly_includes(exponents, pivot):
+ A1[poly_subtract(exponents, pivot)] = coeff
+ else:
+ A0[exponents] = coeff
+
+ if len(A1) > 0 and len(A0) > 0:
+ calculate_polynomial(lines, regs, indent, bin, A1, [1]+path)
+ reg = "reg%d" % len(path)
+ regs.append(reg)
+ term = format_monomial(pivot, "acc")
+ lines.append(" "*indent + "%s = %s" % (reg, term))
+ calculate_polynomial(lines, regs, indent, bin, A0, [0]+path)
+ lines.append(" "*indent + "acc = acc + %s" % reg)
+ elif len(A1) > 0:
+ calculate_polynomial(lines, regs, indent, bin, A1, [1]+path)
+ term = format_monomial(pivot, "acc")
+ lines.append(" "*indent+"acc = %s" % term)
+ elif len(A0) > 0:
+ calculate_polynomial(lines, regs, indent, bin, A0, [0]+path)
+
+def write_coeff_type(f, indent, name, R, block_info, d):
+ """
+ Writes the definition of the derived type for a certain set of
+ tensor coefficients to a file.
+
+ PARAMETER
+
+ f -- file object open for writing
+ indent -- indentation level
+ name -- name of the derived type in Fortran
+ R -- rank of the tensor integral
+ block_info -- information about the block structure of the system
+ and the corresponding tensor coefficients
+ d -- number of space time dimensions
+ """
+ for line in DOC.coeff_type(name,R,min(R,d)):
+ f.write(" "*indent + line + "\n")
+ f.write(" "*indent+"type %s\n" % name)
+ nin = indent + 3
+ f.write(" "*nin + "complex(ki) :: c0\n")
+ count = 1
+ for k in range(1,min(R,d)+1):
+ dim = combinat(d, k)
+ lst, dic, lname, rname = block_info[(R,k)]
+ dimk = len(lst)
+ f.write(" "*nin + "complex(ki), dimension(%d,%d) :: c%d\n"
+ % (dim, dimk, k))
+ if TENS_DEBUG:
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ for j in range(len(lst)):
+ coeff = zip([[e] for e in indices], [e for e in lst[j]])
+ coeff = map(lambda (x, y): x*y, coeff)
+ coeff = reduce(lambda x, y: x+y, coeff, [])
+
+ perms = momenta_symm(coeff) - 1
+ if perms == 0:
+ perms = ""
+ elif perms == 1:
+ perms = " + 1 permutation"
+ else:
+ perms = " + %d permutations" % perms
+
+ f.write(" "*nin+"! c%d(%d,%d) = %s%s\n"
+ % (k, lab, j+1, coeff, perms))
+ count += dim * dimk
+ if TENS_DEBUG:
+ if count == 1:
+ entries = "entry"
+ else:
+ entries = "entries"
+ f.write(" "*nin + "! This record has %d %s.\n" % (count, entries))
+ f.write(" "*indent+"end type %s\n" % name)
+
+def select(items, k):
+ """
+ Iterator over all selections of k elements from a given list.
+
+ PARAMETER
+
+ items -- list of elements to choose from (no repetitions)
+ k -- number of elements to select.
+ """
+ n = len(items)
+ # We use the fact that
+ # (n choose k) = (1 choose 1)(n-1 choose k-1)+(1 choose 0)(n-1 choose k)
+ if k == n:
+ yield items[:]
+ elif k == 0:
+ yield []
+ elif 0 < k and k < n:
+ head = items[0:1]
+ tail = items[1:]
+ for result in select(tail, k-1):
+ yield head + result
+
+ for result in select(tail, k):
+ yield result
+
+def write_function_glob_recon(f, indent, name, type_name, proc_names, R, d):
+ """
+ Writes a function that retrieves the value of N(Q) from
+ reconstructed coefficients for a given real Q.
+ """
+ for line in DOC.function_glob_recon(name,type_name,R,d-1):
+ f.write(" "*indent + line + "\n")
+ f.write(" "*indent + "pure function %s(Q, coeffs, max_k)\n" % name)
+ nin = indent + 3
+ f.write(" "*nin + "! generated by: write_function_glob_recon\n")
+ f.write(" "*nin + "implicit none\n")
+ f.write(" "*nin + "real(ki), dimension(0:%d), intent(in) :: Q\n" % (d-1))
+ f.write(" "*nin + "type(%s), intent(in) :: coeffs\n" % type_name)
+ f.write(" "*nin + "integer, intent(in), optional :: max_k\n")
+ f.write(" "*nin + "complex(ki) :: %s\n" % name)
+ f.write(" "*nin + "integer :: maxk\n")
+ f.write(" "*nin + "if (present(max_k)) then\n")
+ f.write(" "*(nin+3) + "maxk = max_k\n")
+ f.write(" "*nin + "else\n")
+ f.write(" "*(nin+3) + "maxk = %d\n" % min(R, d))
+ f.write(" "*nin + "end if\n")
+ f.write(" "*nin + "%s = coeffs%%c0\n" % name)
+ for k in range(1, min(R, d) + 1):
+ f.write(" "*nin + "if (%d .le. maxk) then\n" % k)
+ nin += 3
+
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ f.write(" "*nin + "%s = %s + %s(Q, (/%s/), coeffs%%c%d(%d,:))\n"
+ % (name, name, proc_names[(R,k)],
+ ",".join(map(str,indices)), k, lab))
+
+ nin -= 3
+ f.write(" "*nin + "end if\n")
+ f.write(" "*indent + "end function %s\n" % name)
+
+def write_function_glob_recon_complex(f, indent, name,
+ type_name, proc_names, R, d):
+ """
+ Writes a function that retrieves the value of N(Q) from
+ reconstructed coefficients for a given complex Q.
+ """
+ for line in DOC.function_glob_recon_complex(name,type_name,R,d-1):
+ f.write(" "*indent + line + "\n")
+ f.write(" "*indent + "pure function %s(Q, coeffs)\n" % name)
+ nin = indent + 3
+ f.write(" "*nin + "! generated by: write_function_glob_recon_complex\n")
+ f.write(" "*nin + "implicit none\n")
+ f.write(" "*nin + "complex(ki), dimension(0:%d), intent(in) :: Q\n" % (d-1))
+ f.write(" "*nin + "type(%s), intent(in) :: coeffs\n" % type_name)
+ f.write(" "*nin + "complex(ki) :: %s\n" % name)
+ f.write(" "*nin + "%s = coeffs%%c0\n" % name)
+ for k in range(1, min(R, d) + 1):
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ f.write(" "*nin + "%s = %s + %s(Q, (/%s/), coeffs%%c%d(%d,:))\n"
+ % (name, name, proc_names[(R,k)],
+ ",".join(map(str,indices)), k, lab))
+ f.write(" "*indent + "end function %s\n" % name)
+
+def write_subroutine_glob_solve(f, indent, name, type_name, proc_names, R, d,
+ extra_type_name=None):
+ """
+ Writes a subroutine for the determination of the tensor coefficients
+ at a fixed value of mu^2 and for given maximum rank
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- indentation level
+ type_name -- name of the type to be determined
+ proc_names -- lookup for the procedure names used for the determination
+ of the single parts of the problem.
+ R -- maximum rank
+ d -- number of space time dimensions
+ extra_type_name -- coefficients to be subtracted
+
+ """
+ if extra_type_name is not None:
+ xtra = ", coeffs2"
+ else:
+ xtra = ""
+ for line in DOC.subroutine_glob_solve(name,type_name,R,d-1,xtra):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent + "subroutine %s(numeval, mu2, coeffs%s)\n"
+ % (name, xtra))
+ nin = indent + 3
+ f.write(" "*nin + "! generated by: write_subroutine_glob_solve\n")
+ f.write(" "*nin + "implicit none\n")
+ write_numeval_interface(f, nin, "numeval", d)
+ f.write(" "*nin + "real(ki), intent(in) :: mu2\n")
+ f.write(" "*nin + "type(%s), intent(inout) :: coeffs\n" % type_name)
+ if extra_type_name is not None:
+ f.write(" "*nin + "type(%s), intent(in), optional :: coeffs2\n"
+ % extra_type_name)
+ if extra_type_name is not None:
+ f.write(" "*nin + "if (present(coeffs2)) then\n")
+ nin += 3
+ f.write(" "*nin + "coeffs%c0 = numeval(null_vec, mu2) - coeffs2%c0\n")
+ for k in range(1, min(d, R) + 1):
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ f.write(" "*nin
+ + "call %s(numeval, (/%s/), mu2, coeffs, %d, coeffs2)\n" %
+ (proc_names[(R, k)], ",".join(map(str, indices)), lab))
+ nin -= 3
+ f.write(" "*nin + "else\n")
+ nin += 3
+ f.write(" "*nin + "coeffs%%c0 = numeval((/%s/), mu2)\n"
+ % ",".join(["0.0_ki"]*d))
+ for k in range(1, min(d, R) + 1):
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ f.write(" "*nin+"call %s(numeval, (/%s/), mu2, coeffs, %d)\n" %
+ (proc_names[(R, k)], ",".join(map(str, indices)), lab))
+
+ if extra_type_name is not None:
+ nin -= 3
+ f.write(" "*nin + "end if\n")
+ f.write(" "*indent + "end subroutine %s\n" % name)
+
+def write_print_coeffs(f, indent, name, type_name, block_info, R, d):
+ """
+ Writes the code to print out a set of coefficients in human readable
+ form.
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- intentation level
+ type_name -- name of the type that contains the coefficients to print
+ block_info -- information about the block structure of the system
+ R -- maximum rank
+ d -- number of space time dimensions
+ """
+
+ def format_power(pow):
+ b, e = pow
+
+ if e == 1:
+ return str(b)
+ else:
+ return "%s^%d" % (b, e)
+
+ for line in DOC.subroutine_print_coeffs(name,R,type_name):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent+"subroutine print_coeffs_%d(coeffs, unit)\n" % R)
+ nin = indent + 3
+ f.write(" "*nin+"! generated by: write_print_coeffs\n")
+ f.write(" "*nin+"implicit none\n")
+ f.write(" "*nin+"type(%s), intent(in) :: coeffs\n" % type_name)
+ f.write(" "*nin+"integer, intent(in), optional :: unit\n")
+ f.write(" "*nin+"integer :: ch\n")
+ f.write(" "*nin+"if (present(unit)) then\n")
+ f.write(" "*(nin+3)+"ch = unit\n")
+ f.write(" "*nin+"else\n")
+ f.write(" "*(nin+3)+"ch = 6\n")
+ f.write(" "*nin+"end if\n")
+
+ f.write(" "*nin
+ +"write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'\n")
+ for k in range(1,min(R,d)+1):
+ lst, dic, lname, rname = block_info[(R,k)]
+ dim = len(lst)
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ sindices = map(lambda i: "q(%d)" % i, indices)
+ for i in range(dim):
+ tail = "*".join([")"] + map(format_power, zip(sindices, lst[i])))
+ l = len(tail)
+ value = "coeffs%%c%d(%d,%d)" % (k, lab, i+1)
+ f.write(" "*nin
+ + ("write(ch,'(A4,G24.16,1x,G24.16,A%d)')" % l)
+ + (" ' + (', %s, '%s'\n" % (value, tail)))
+
+ f.write(" "*indent+"end subroutine print_coeffs_%d\n" % R)
+
+def write_subroutine_reconstruct(f, indent, name, R, d,
+ solve_name, type_name,
+ solve_name_extra, type_name_extra):
+ """
+ Writes a routine that determines all coefficients of an integral of
+ maximum rank R, including the mu2 bits.
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- indentation level
+ name -- name of the subroutine
+ R -- maximum rank
+ d -- number of space time dimensions
+ solve_name -- function name used to solve for the mu2=0
+ bits of the integral
+ type_name -- name of the type of the coefficients of the
+ 'normal' integral
+ solve_name_extra -- functions for soling for the mu2 and mu2^2 integrals
+ type_name_extra -- name of the type of the mu2 and mu2^2 coefficients
+
+ """
+ # We use the fact that N(q, mu2) is at most quadratic in mu2. After
+ # subtracting N(q, 0) we have the form N(q, mu2) = a mu2^2 + b mu2.
+ # N(q, +1) = a + b
+ # N(q, -1) = a - b
+ # 2 a = N(q, +1) + N(q, -1)
+ # 2 b = N(q, +1) - N(q, -1)
+ if type_name_extra is None:
+ t = "complex(ki)"
+ else:
+ t = "type(%s)" % type_name_extra
+
+ for line in DOC.subroutine_reconstruct(name,type_name,t,R):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent + "subroutine %s(numeval, cm0, cm1, cm2)\n" % name)
+ nin = indent + 3
+ f.write(" "*nin+"! generated by: write_subroutine_reconstruct\n")
+ f.write(" "*nin + "implicit none\n")
+ write_numeval_interface(f, nin, "numeval", d)
+ f.write(" "*nin + "type(%s), intent(out) :: cm0\n" % type_name)
+
+ f.write(" "*nin + "%s, intent(out), optional :: cm1\n" % t)
+ f.write(" "*nin + "%s, intent(out), optional :: cm2\n" % t)
+ f.write(" "*nin + "%s :: ca, cb\n" % t)
+ f.write(" "*nin + "call %s(numeval, 0.0_ki, cm0)\n" % solve_name)
+ f.write(" "*nin + "if (present(cm1)) then\n")
+ nin += 3
+ f.write(" "*nin + "if (present(cm2)) then\n")
+ nin += 3
+ if type_name_extra is None:
+ f.write(" "*nin + "ca = numeval(null_vec, +1.0_ki) - cm0%c0\n")
+ f.write(" "*nin + "cb = numeval(null_vec, -1.0_ki) - cm0%c0\n")
+ f.write(" "*nin + "cm1= 0.5_ki * (ca - cb)\n")
+ f.write(" "*nin + "cm2= 0.5_ki * (ca + cb)\n")
+ else:
+ f.write(" "*nin + "call %s(numeval, +1.0_ki, ca, cm0)\n"
+ % solve_name_extra)
+ f.write(" "*nin + "call %s(numeval, -1.0_ki, cb, cm0)\n"
+ % solve_name_extra)
+ f.write(" "*nin + "cm1%c0= 0.5_ki * (ca%c0 - cb%c0)\n")
+ f.write(" "*nin + "cm2%c0= 0.5_ki * (ca%c0 + cb%c0)\n")
+ for k in range(1,min(d,R-2)+1):
+ f.write(" "*nin + "cm1%%c%d = 0.5_ki * (ca%%c%d - cb%%c%d)\n"
+ % (k,k,k))
+ f.write(" "*nin + "cm2%%c%d = 0.5_ki * (ca%%c%d + cb%%c%d)\n"
+ % (k,k,k))
+ nin -= 3
+ f.write(" "*nin + "else\n")
+ nin += 3
+ if type_name_extra is None:
+ f.write(" "*nin + "cm1 = numeval(null_vec, +1.0_ki) - cm0%c0\n")
+ else:
+ f.write(" "*nin
+ + "call %s(numeval, +1.0_ki, cm1, cm0)\n" % solve_name_extra)
+ nin -= 3
+ f.write(" "*nin + "end if\n")
+ nin -= 3
+ f.write(" "*nin + "end if\n")
+ f.write(" "*indent + "end subroutine %s\n" % name)
+
+def write_subroutine_reconstruct_dummy(f, indent, name, R, d,
+ solve_name, type_name):
+ """
+ Writes a routine that determines all coefficients of an integral of
+ maximum rank R if the rank is smaller than 2.
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- indentation level
+ name -- name of the subroutine
+ R -- maximum rank
+ d -- number of space time dimensions
+ solve_name -- function name used to solve for the mu2=0
+ bits of the integral
+ type_name -- name of the type of the coefficients of the
+ 'normal' integral
+ """
+ for line in DOC.subroutine_reconstruct_dummy(name,type_name,R):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent + "subroutine %s(numeval, cm0)\n" % name)
+ nin = indent + 3
+ f.write(" "*nin+"! generated by: write_subroutine_reconstruct_dummy\n")
+ f.write(" "*nin + "implicit none\n")
+ write_numeval_interface(f, nin, "numeval", d)
+ f.write(" "*nin + "type(%s), intent(out) :: cm0\n" % type_name)
+ f.write(" "*nin + "call %s(numeval, 0.0_ki, cm0)\n" % solve_name)
+ f.write(" "*indent + "end subroutine %s\n" % name)
+
+
+def write_module_solve(name, max_rank, d=4):
+ """
+ Writes the module which is usually called 'tens_rec.f90'.
+
+ PARAMETER
+
+ name -- the name of the module
+ max_rank -- the maximum rank that should be implemented
+ d -- number of space time dimensions
+ """
+ f = open("%s.f90" % name, "w")
+ for line in DOC.module_solve():
+ f.write(line + "\n")
+ f.write("module %s\n" % name)
+ f.write("use %s, only: ki\n" % precision_golem)
+ f.write("implicit none\n")
+ f.write("private :: ki\n")
+
+ f.write("real(ki), dimension(0:%d), parameter, private :: null_vec = &\n"
+ % (d-1))
+ f.write(" & (/%s/)\n" % ",".join(["0.0_ki"]*d))
+ block_info = {}
+
+ for R in range(1,max_rank+1):
+ for k in range(1,min(R,d)+1):
+ LHS, RHS, lst, dic = generate_equations(R, k)
+ lname = "mat%d_%d" % (R, k)
+ rname = "q%d_%d" % (R, k)
+ write_matrix_f90(f, 0, lname, rname, k, LHS, RHS)
+ block_info[(R,k)] = (lst, dic, lname, rname)
+
+ for R in range(1,max_rank+1):
+ write_coeff_type(f, 0, PAT['coefftype'] % R, R, block_info, d)
+
+ f.write("interface print_coeffs\n")
+ for R in range(1,max_rank+1):
+ f.write(" module procedure print_coeffs_%d\n" % R)
+ f.write("end interface\n")
+
+ f.write("contains\n")
+
+ solve_names = {}
+ recon_names = {}
+ crecon_names = {}
+ for R in range(1,max_rank+1):
+ for k in range(1,min(R,d)+1):
+ lst, dic, lname, rname = block_info[(R,k)]
+ proc_name = PAT['solve'] % (R, k)
+ solve_names[(R, k)] = proc_name
+ if R <= max_rank - 2:
+ extra_type = PAT['coefftype'] % (R + 2)
+ extra_recon = PAT['globtenseval'] % (R + 2)
+ else:
+ extra_type = None
+ extra_recon = None
+ write_subroutine_solve(f, 0, proc_name, k, len(lst), lname, rname,
+ PAT['coefftype'] % R, PAT['globtenseval'] % R, d,
+ extra_recon, extra_type)
+ proc_name = PAT['tenseval'] % (R, k)
+ recon_names[(R,k)] = proc_name
+ cproc_name = PAT['ctenseval'] % (R, k)
+ crecon_names[(R,k)] = cproc_name
+ write_function_recon(f, 0, proc_name, k, dic, d)
+ write_function_recon(f, 0, cproc_name, k, dic, d, "complex")
+
+ type_name = PAT['coefftype'] % R
+ proc_name = PAT['globsolve'] % R
+ if R <= max_rank - 2:
+ extra_type_name = PAT['coefftype'] % (R+2)
+ else:
+ extra_type_name = None
+ write_subroutine_glob_solve(f, 0, proc_name, type_name, solve_names,
+ R, d, extra_type_name)
+ proc_name = PAT['globtenseval'] % R
+ cproc_name = PAT['cglobtenseval'] % R
+ write_function_glob_recon(f, 0, proc_name, type_name, recon_names, R, d)
+ write_function_glob_recon_complex(f, 0, cproc_name, type_name, crecon_names, R, d)
+ write_print_coeffs(f, 0, PAT['printcoeffs'] % R, type_name, block_info,
+ R, d)
+ if R > 2:
+ write_subroutine_reconstruct(f, 0, PAT['reconstruct'] % R, R, d,
+ PAT['globsolve'] % R, PAT['coefftype'] % R,
+ PAT['globsolve'] % (R-2), PAT['coefftype'] % (R-2))
+ elif R == 2:
+ write_subroutine_reconstruct(f, 0, PAT['reconstruct'] % R, R, d,
+ PAT['globsolve'] % R, PAT['coefftype'] % R,
+ None, None)
+ else:
+ write_subroutine_reconstruct_dummy(f, 0, PAT['reconstruct'] % R, R, d,
+ PAT['globsolve'] % R, PAT['coefftype'] % R)
+
+ f.write("end module %s\n" % name)
+ f.close()
+
+def write_list(f, prefix, lst):
+ """
+ Utility routine for writing a comma seperated list to a file inserting
+ line breaks and continuation characters in the appropriate places.
+
+ PARAMETER
+
+ f -- file open for writing
+ prefix -- whatever should be inserted in the beginning of the first line
+ lst -- the list to be written
+ """
+ is_first = True
+ s = prefix
+ ofs = 1 + len(s)
+ f.write(s)
+ for s in lst:
+ if is_first:
+ is_first = False
+ else:
+ f.write(",")
+ ofs += 1
+
+ # len(" " + s + ", &")
+ if ofs + len(s) + 4 >= F90_WIDTH:
+ indent = " &"
+ f.write(" &\n" + indent)
+ ofs = 1 + len(indent)
+ f.write(" " + s)
+ ofs += len(s) + 1
+ f.write("\n")
+
+def write_import_list(f, prefix):
+ """
+ Utility for writing a very specific import statement.
+ """
+ lst = []
+ for R in range(1, max_rank+1):
+ lst.append(PAT['coefftype'] % R)
+ lst.append(PAT['reconstruct'] % R)
+ write_list(f, prefix, lst)
+
+def write_function_evaluate(f, indent, name, max_legs, max_rank, d):
+ """
+ Writes to functions to a file which serve as the main interface
+ for the tensorial reconstruction interface.
+
+ PARAMETER
+
+ f -- file open for writing
+ indent -- indentation level
+ name -- the base name used for the function
+ max_legs -- the maximum number of legs to be considered/implemented
+ max_rank -- the maximum rank to be considered/implemented
+ """
+ nin = indent + 3
+
+ # function evaluate_s
+ for line in DOC.function_evaluate(name + "_s", "set", "integer array",d-1):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent
+ + "function %s_s(numeval, momenta, set, rank) result(amp)\n"
+ % name)
+ f.write(" "*nin+"! generated by: write_function_evaluate\n")
+ f.write(" "*nin + "implicit none\n")
+ write_numeval_interface(f, nin, "numeval", d)
+ f.write(" "*nin + "real(ki), dimension(:,:), intent(in) :: momenta\n")
+ f.write(" "*nin + "integer, dimension(:), intent(in) :: set\n")
+ f.write(" "*nin + "integer, intent(in), optional :: rank\n")
+ f.write(" "*nin + "type(form_factor) :: amp\n")
+ f.write(" "*nin + "if (present(rank)) then\n")
+ f.write(" "*(nin+3) + "amp = %s_b(numeval, momenta, packb(set), rank)\n"
+ % name)
+ f.write(" "*nin + "else\n")
+ f.write(" "*(nin+3) + "amp = %s_b(numeval, momenta, packb(set))\n" % name)
+ f.write(" "*nin + "end if\n")
+ f.write(" "*indent + "end function %s_s\n" % name)
+
+ # function evaluate_b
+ for line in DOC.function_evaluate(name + "_b",
+ "b_set", "integer (bit-set)",d-1):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent
+ + "function %s_b(numeval, momenta, b_set, rank) result(amp)\n"
+ % name)
+ f.write(" "*nin + "implicit none\n")
+ write_numeval_interface(f, nin, "numeval", d)
+ f.write(" "*nin + "real(ki), dimension(:,:), intent(in) :: momenta\n")
+ f.write(" "*nin + "integer, intent(in) :: b_set\n")
+ f.write(" "*nin + "integer, intent(in), optional :: rank\n")
+ f.write(" "*nin + "type(form_factor) :: amp\n")
+ f.write(" "*nin + "integer :: N, r\n")
+ f.write(" "*nin + "complex(ki) :: coeffs0\n")
+ for r in range(1, min(max_legs,max_rank)+1):
+ if r == 2:
+ f.write(" "*nin + "type(%s) :: coeffs2, coeffs2x\n" %
+ (PAT['coefftype'] % 2))
+ else:
+ f.write(" "*nin + "type(%s) :: coeffs%d\n" %
+ (PAT['coefftype'] % r, r))
+ #f.write(" "*nin + "amp = 0.0_ki\n")
+ f.write(" "*nin + "N = size(momenta,1) - countb(b_set)\n")
+ f.write(" "*nin + "if (present(rank)) then\n")
+ f.write(" "*(nin+3) + "r = rank\n")
+ f.write(" "*nin + "else\n")
+ f.write(" "*(nin+3) + "r = N\n")
+ f.write(" "*nin + "end if\n")
+ f.write(" "*nin + "select case(N)\n")
+ nin += 3
+ for N in range(1,max_legs+1):
+ f.write(" "*(nin-3) + "case(%d)\n" % N)
+ f.write(" "*nin + "select case(r)\n")
+ nin += 3
+ for R in range(min(N,max_rank)+1):
+ f.write(" "*(nin-3) + "case(%d)\n" % R)
+
+ if N <= 4:
+ max_alpha = R/2
+ else:
+ max_alpha = 0
+
+ if R == 0:
+ f.write(" "*nin + "coeffs0 = numeval(null_vec, 0.0_ki)\n")
+ else:
+ if max_alpha == 0:
+ f.write(" "*nin + "call %s(numeval, coeffs%d)\n"
+ % (PAT['reconstruct'] % R, R))
+ elif max_alpha == 1:
+ f.write(" "*nin + "call %s(numeval, coeffs%d, coeffs%d)\n"
+ % (PAT['reconstruct'] % R, R, R-2))
+ elif max_alpha == 2:
+ f.write(" "*nin
+ + "call %s(numeval, coeffs%d, coeffs%d, coeffs%dx)\n"
+ % (PAT['reconstruct'] % R, R, R-2, R-2))
+ else:
+ f.write(" "*nin + "print*, \"Problem: max_alpha = %d\"\n"
+ % max_alpha)
+ f.write(" "*nin + "stop\n")
+
+ if N > 1:
+ if R == 0:
+ f.write(" "*nin + "amp = coeffs0 * a%d0%s(b_set)\n"
+ % (N, ff_suffix))
+ else:
+ uninitialized = True
+ for alpha in range(0,max_alpha+1):
+ if alpha == 0:
+ proc = PAT['contract'] % (N, R)
+ coeffs = "coeffs%d" % R
+ elif alpha == 1:
+ proc = (PAT['contract'] % (N, R)) + ("s%d" % alpha)
+ coeffs = "coeffs%d" % (R - 2)
+ else:
+ proc = (PAT['contract'] % (N, R)) + ("s%d" % alpha)
+ coeffs = "coeffs%dx" % (R - 2)
+
+ if uninitialized:
+ prev = ""
+ uninitialized = False
+ else:
+ prev = "amp + "
+ f.write(" "*nin + "amp = %s%s(%s,momenta,b_set)\n"
+ % (prev, proc, coeffs))
+ else:
+ f.write(" "*nin + "print*, \"Tadpoles not implemented yet\"\n")
+ f.write(" "*nin + "stop\n")
+
+ f.write(" "*(nin-3) + "case default\n")
+ f.write(" "*nin + "print*, \"Not yet implemented: N, r = \", %d, r\n"
+ % N)
+ f.write(" "*nin + "stop\n")
+ nin -= 3
+ f.write(" "*nin + "end select\n")
+ f.write(" "*(nin-3) + "case default\n")
+ f.write(" "*nin + "print*, \"Not yet implemented: N=\", N\n")
+ f.write(" "*nin + "stop\n")
+ nin -= 3
+ f.write(" "*nin + "end select\n")
+ f.write(" "*indent + "end function %s_b\n" % name)
+
+def ff_list(N):
+ """
+ List all form factors for a given number of legs.
+ """
+ result = []
+ for r in range(N+1):
+ if not (N == 1 and r == 1):
+ result.append("a%d%d" % (N, r))
+ if N < 6 and r >= 2:
+ result.append("b%d%d" % (N, r))
+ if N < 6 and r >= 4:
+ result.append("c%d%d" % (N, r))
+ return result
+
+def contract_init_momenta(f, nin, N, R, d):
+ """
+ Write some common definitions for both varieties of 'contractXXX'.
+ """
+ f.write(" "*nin + "integer, dimension(%d) :: unpinched\n" % N)
+ f.write(" "*nin+"unpinched = unpackb(pminus(b_ref, b_set), %d)\n" % N)
+
+def write_contract_split(f, nin, N, R, d):
+ """
+ Writes the 'split' variant of contracting integrals, which is used
+ for N>=6.
+
+ Implements Eq. (63) in hep-ph/0504267
+ """
+ assert R > 0
+ f.write(" "*nin+"! generated by: write_contract_split\n")
+ f.write(" "*nin + "complex(ki), dimension(0:%d) :: C\n" % (d-1))
+ if R > 1:
+ f.write(" "*nin + "type(%s) :: cprime\n" % (PAT['coefftype'] % (R-1)))
+ else:
+ f.write(" "*nin + "complex(ki) :: cprime\n")
+ f.write(" "*nin + "integer :: i, pnch, new_set\n")
+ f.write(" "*nin + "integer, dimension(1) :: pnch_set\n")
+ #f.write(" "*nin + "real(ki), dimension(%d,0:%d) :: mprime\n" % (N-1,d-1))
+ contract_init_momenta(f, nin, N, R, d)
+
+ f.write(" "*nin + "amp = coeffs%%c0 * a%d0%s(b_set)\n" % (N, ff_suffix))
+ f.write(" "*nin + "do pnch=1,%d\n" % N)
+ nin += 3
+
+ f.write(" "*nin + "! Eq. (54) in hep-ph/0504267\n")
+ f.write(" "*nin + "C(:) = 0.0_ki\n")
+ if TENS_DEBUG:
+ f.write(" "*nin + "write(15,'(A11)',advance='no') 'unpinched ='\n")
+ f.write(" "*nin + "do i=1,%d\n" % N)
+ nin += 3
+ f.write(" "*nin + "C(:) = C(:) " +
+ "+ inv_s(unpinched(pnch),unpinched(i),b_set) * &\n")
+ f.write(" "*nin + " & momenta(unpinched(i),:)\n")
+ #f.write(" "*nin + "if (i .lt. pnch) then\n")
+ #f.write(" "*(nin+3) + "mprime(i,:) = mom(i,:)\n")
+ #if TENS_DEBUG:
+ # f.write(" "*(nin+3) + "write(15,'(I2)',advance='no') unpinched(i)\n")
+ #f.write(" "*nin + "else if (i .gt. pnch) then\n")
+ #f.write(" "*(nin+3) + "mprime(i-1,:) = mom(i,:)\n")
+ #if TENS_DEBUG:
+ # f.write(" "*(nin+3) + "write(15,'(I2)',advance='no') unpinched(i)\n")
+ #f.write(" "*nin + "end if\n")
+ nin -= 3
+ f.write(" "*nin + "end do\n")
+ if TENS_DEBUG:
+ f.write(" "*nin + "write(15,'(A1)') '.'\n")
+ f.write(" "*nin + "! Eq. (63) in hep-ph/0504267\n")
+ f.write(" "*nin + "pnch_set(1) = pnch\n")
+ f.write(" "*nin + "new_set = punion(packb(pnch_set),b_set)\n")
+
+ coeff_lsts = []
+ coeff_by_rank = [{} for i in range(R+1)]
+
+ for k in range(1, min(R,d)+1):
+ lst, dic = generate_mapping(R, k)
+ coeff_lsts.append(lst)
+ i = 0
+ for e in lst:
+ i += 1
+ rk = sum(e)
+ coeff_by_rank[rk][e] = (k, i)
+
+ reduced_coeffs = {}
+ initialized_coeffs = {}
+ for k in range(1, min(R-1,d)+1):
+ lst, dic = generate_mapping(R-1, k)
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ idx = 0
+ for e in lst:
+ idx += 1
+ subscript = reduce(lambda x, y: x+y,
+ map(lambda (p, q): [p]*q, zip(indices, e)), [])
+
+ subscript = tuple(subscript)
+ reduced_coeffs[subscript] = (k, lab, idx)
+ initialized_coeffs[subscript] = False
+ initialized_c0 = False
+
+ for rk in range(1, R+1):
+ for e, pair in coeff_by_rank[rk].iteritems():
+ k, idx = pair
+
+ tot_perm = len([q for q in permutations(e)])
+
+ lab = 0
+ for indices in select(range(d), k):
+ lab += 1
+ subscript = reduce(lambda x, y: x+y,
+ map(lambda (p, q): [p]*q, zip(indices, e)), [])
+
+ for i in range(k):
+ new_e = list(e)
+ new_e[i] -= 1
+ rsubscript = reduce(lambda x, y: x+y,
+ map(lambda (p, q): [p]*q, zip(indices, new_e)), [])
+
+ if new_e[i] == 0:
+ del new_e[i]
+ if len(new_e) == 0:
+ r_perm = 1
+ else:
+ r_perm = len([q for q in permutations(new_e)])
+
+ num, den = simp_fact(r_perm, tot_perm)
+ if num == den:
+ RHS = ""
+ elif den == 1:
+ RHS = "%d.0_ki * " % num
+ elif num == 1 and den == 2:
+ RHS = "0.5_ki * "
+ elif num == 1 and den == 4:
+ RHS = "0.25_ki * "
+ else:
+ RHS = "%d.0_ki/%d.0_ki * " % (num, den)
+
+ RHS = "%sC(%d) * coeffs%%c%d(%d, %d)" \
+ % (RHS, indices[i], k, lab, idx)
+ if sum(new_e) > 0:
+ rsub = tuple(rsubscript)
+ r_k, r_lab, r_idx = reduced_coeffs[rsub]
+ initialized = initialized_coeffs[rsub]
+ initialized_coeffs[rsub] = True
+ LHS = "cprime%%c%d(%d,%d)" % (r_k, r_lab, r_idx)
+ elif R > 1:
+ rsubscript = []
+ initialized = initialized_c0
+ initialized_c0 = True
+ LHS = "cprime%c0"
+ else:
+ rsubscript = []
+ initialized = initialized_c0
+ initialized_c0 = True
+ LHS = "cprime"
+ f.write(" "*nin + "! %s <-- %s\n"
+ % (rsubscript, subscript))
+ if initialized:
+ f.write(" "*nin + "%s = %s + %s\n" % (LHS, LHS, RHS))
+ else:
+ f.write(" "*nin + "%s = %s\n" % (LHS, RHS))
+
+ if R > 1:
+ f.write(" "*nin + "amp = amp - %s(cprime, momenta, new_set)\n"
+ % (PAT['contract'] % (N-1,R-1)))
+ else:
+ f.write(" "*nin + "amp = amp - cprime * a%d0%s(new_set)\n"
+ % (N-1, ff_suffix))
+ nin -= 3
+ f.write(" "*nin + "end do\n")
+
+def simp_fact(num, den):
+ """
+ Simplify a rational number given by num and den.
+ """
+ def gcd(a, b):
+ while b > 0:
+ t = b
+ b = a % b
+ a = t
+ return a
+
+ g = gcd(num, den)
+ return (num / g, den / g)
+
+def fact(N):
+ """
+ Compute the factorial of a non-negative integer number.
+ """
+ if N == 0:
+ return 1
+ elif N > 0:
+ return reduce(lambda x, y: x*y, range(2, N), N)
+
+def momenta_symm(lst):
+ """
+ Combinatorial number, unordered selection with repetition.
+
+ In how many ways can we assign distinct indices to not necessarily
+ distinct vectors.
+ """
+ count_lst = []
+ p_prev = -1
+ count = 0
+ for p in lst:
+ if p == p_prev:
+ count += 1
+ elif p_prev == -1:
+ p_prev = p
+ count = 1
+ else:
+ count_lst += [count]
+ count = 1
+ p_prev = p
+ count_lst += [count]
+ return fact(sum(count_lst)) / reduce(lambda x, y: x*y,
+ map(fact, count_lst))
+
+def choose_momenta(R, N, i0=1):
+ """
+ Yields all possibilities of selecting R momenta from a set of
+ N momenta with repetitions, however, with some ordering amongst
+ the vectors.
+
+ EXAMPLE
+
+ >>> for m in choose_momenta(3, 2):
+ ... print m
+ [1,1,1]
+ [1,1,2]
+ [1,2,2]
+ [2,2,2]
+ >>> for m in choose_momenta(2, 3):
+ ... print m
+ [1,1]
+ [1,2]
+ [1,3]
+ [2,2]
+ [2,3]
+ [3,3]
+ """
+
+ if R == 0:
+ yield []
+ else:
+ for cmidx in range(i0, N+1):
+ for cmlst in choose_momenta(R - 1, N, cmidx):
+ yield [cmidx] + cmlst[:]
+
+def write_contract_simple(f, nin, N, R, d, shift):
+ """
+ N -- number of denominators
+ R -- overall rank
+ shift -- power of mu^2 in the numerator
+ """
+
+ def ff_required(kind, N, R):
+ if shift == 0:
+ if N == 1:
+ return R == 0 and kind == 0
+ elif N <= 5:
+ return 2*kind <= R
+ else:
+ # No B or C form factors for N >= 6
+ return kind == 0
+ elif shift == 1:
+ if kind == 1:
+ # B form factors
+ if N == 2:
+ return R == 2
+ elif N == 3:
+ return R == 2 or R == 3
+ else:
+ return False
+ elif kind == 2:
+ # C form factors
+ return N == 4 and R == 4
+ else:
+ # There's no A
+ return False
+ elif shift == 2:
+ # There's only one C^{4,4}
+ return N == 4 and R == 4 and kind == 2
+
+ def ff(kind, N, R, *args):
+ letters = ["a", "b", "c"]
+ ltr = letters[kind]
+
+ return "%s%d%d%s(%s)" % (ltr, N, R, ff_suffix,
+ ", ".join(["l%d" % a for a in args] + ["b_set"]))
+
+ # if shift == 1 or shift == 2 the coeff_type is reduced by 2
+ # as a concequence of the reconstruction algorithm.
+ if shift == 0:
+ coeff_type = R
+ else:
+ coeff_type = R - 2
+
+ # residual rank = overall rank - power of mu^2
+ rk_res = R - 2*shift
+
+ f.write(" "*nin+"! generated by: write_contract_simple\n")
+ for r in range(1,rk_res + 1):
+ f.write(" "*nin + "real(ki), dimension(%d,0:%d) :: mom%d\n" % (r, d-1, r))
+ f.write(" "*nin + "integer :: %s\n"
+ % ", ".join(["l%d" % i for i in range(1,N+1)]))
+
+ contract_init_momenta(f, nin, N, R, d)
+
+ for i in range(1, N+1):
+ f.write(" "*nin+"l%d = unpinched(%d)\n" % (i, i))
+
+ uninitialized = True
+ letters = ['a', 'b', 'c']
+
+ for r in range(R+1):
+ # looping over kind:
+ # - lower bound = shift because there are no
+ # A's for shift>=1 and no B's for shift == 2
+ # - upper bound = r/2 because B's exist only from r>=2 and
+ # C's only for r>=4
+ for kind in range(shift,r/2+1):
+ # After our preselection there are still some we do not need
+ # therefore an if-statement
+ if ff_required(kind, N, r):
+ # How many indices are there to be summed over?
+ rk_indices = r - 2 * kind
+
+ # If ff_required works as expected, rk_indices cannot
+ # become negative
+ assert rk_indices >= 0, "N=%d,R=%d,r=%d,kind=%d,rk_res=%d" \
+ % (N, R, r, kind, rk_res)
+
+ for indices in choose_momenta(rk_indices, N):
+ ffactor = ff(kind, N, r, *indices)
+ cindex = kind - shift
+
+ if rk_indices > 0:
+ f.write(" "*nin + "mom%d = momenta((/%s/),:)\n"
+ % (rk_indices, ",".join(
+ map(lambda x: "l%d" % x,indices))))
+ if uninitialized:
+ prev = ""
+ uninitialized = False
+ else:
+ prev = "amp + "
+
+ if coeff_type == 0:
+ assert cindex == 0
+ symm = 1
+ ssymm = ""
+ coeff = "coeffs"
+ elif cindex == 0 and rk_indices == 0:
+ symm = 1
+ ssymm = ""
+ coeff = "coeffs%c0"
+ else:
+ coeff = PAT['tenscontract%s' % letters[cindex]] % coeff_type
+
+ if rk_indices > 0:
+ symm = momenta_symm(indices)
+ if symm == 1:
+ ssymm = ""
+ else:
+ ssymm = "%d.0_ki * " % symm
+ coeff = "%s(coeffs, mom%d)" % (coeff, rk_indices)
+ else:
+ coeff = "%s(coeffs)" % (coeff)
+ symm = 1
+ ssymm = ""
+
+ s1 = " "*nin + "amp = " + prev + ssymm + coeff
+ s2 = " * " + ffactor
+
+ if len(s1) + len(s2) <= F90_WIDTH:
+ f.write(s1 + s2 + "\n")
+ else:
+ f.write(s1 + " &\n" + " "*nin + "& " + s2 + "\n")
+
+ if TENS_DEBUG:
+ f.write(" "*nin
+ +"write(15,*), \"%s =\", %s\n" % (ffactor, ffactor))
+ f.write(" "*nin
+ +"write(15,*), \"coeff =\", %s\n" % coeff)
+ f.write(" "*nin
+ +"write(15,*), \"symm =\", %d\n" % symm)
+ f.write(" "*nin
+ +"write(15,*), \"shift =\", %d\n" % shift)
+
+ if uninitialized:
+ f.write(" "*nin+"amp = 0.0_ki\n")
+ else:
+ if shift == 1:
+ f.write(" "*nin+"! multiply by 2*epsilon\n")
+ f.write(" "*nin+"amp%c = 2.0_ki*amp%b\n")
+ f.write(" "*nin+"amp%b = 2.0_ki*amp%a\n")
+ f.write(" "*nin+"amp%a = 0.0_ki\n")
+ elif shift == 2:
+ f.write(" "*nin+"! multiply by -4*(epsilon-epsilon^2)\n")
+ f.write(" "*nin+"amp%c = -4.0_ki*(amp%b-amp%a)\n")
+ f.write(" "*nin+"amp%b = -4.0_ki*amp%a\n")
+ f.write(" "*nin+"amp%a = 0.0_ki\n")
+
+def res_accu_line(lines, i, j, k, res_first):
+ if lines[-1] == "acc = -1.0_ki":
+ if res_first:
+ lhs = "res = -"
+ else:
+ lhs = "res = res - "
+ lines[-1] = lhs + "coeffs%%c%d(%d,%d)" % (k, j, i)
+ elif lines[-1] == "acc = 1.0_ki":
+ if res_first:
+ lhs = "res = "
+ else:
+ lhs = "res = res + "
+ lines[-1] = lhs + "coeffs%%c%d(%d,%d)" % (k, j, i)
+ else:
+ if res_first:
+ lhs = "res = "
+ else:
+ lhs = "res = res + "
+ lines.append(lhs + "acc * coeffs%%c%d(%d,%d)" % (k, j, i))
+
+def write_function_a_tensor_contract(f, indent, name, R, d):
+ """
+ Writes a function that contracts a A-type tensor (no g^{mu nu})
+ constructed from a given set of momenta with a coefficient tensor
+ """
+ coeff_lsts = []
+ coeff_by_rank = [{} for i in range(R+1)]
+
+ for k in range(1, min(R,d)+1):
+ lst, dic = generate_mapping(R, k)
+ coeff_lsts.append(lst)
+ i = 0
+ for e in lst:
+ i += 1
+ rk = sum(e)
+ coeff_by_rank[rk][e] = (k, i)
+
+ nin = indent + 3
+ for line in DOC.function_tenscontractX(name,"A",R,PAT["coefftype"]%R,d-1):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent
+ + "pure function %s(coeffs, momenta) result(res)\n" % name)
+ f.write(" "*nin+"! generated by: write_function_a_tensor_contract\n")
+ f.write(" "*nin + "implicit none\n")
+
+ f.write(" "*nin + "type(%s), intent(in) :: coeffs\n" % PAT['coefftype'] % R)
+ f.write(" "*nin
+ + "real(ki), dimension(:,0:), intent(in), optional :: momenta\n")
+ f.write(" "*nin + "complex(ki) :: res\n")
+ f.write(" "*nin + "integer :: rk\n")
+ f.write(" "*nin + "real(ki) :: acc\n")
+
+ tens_lines = {}
+ registers = set()
+
+ for r in range(1, R+1):
+ res_first = True
+ momenta = ["momenta(%d,%%d)" % m for m in range(1, r+1)]
+ lines = []
+ for key, value in coeff_by_rank[r].iteritems():
+ k, i = value
+ mult = coeff_lsts[k-1][i-1]
+ j = 0
+ for idx in select(range(d), k):
+ j += 1
+ terms = []
+ symm = 0
+ for p in permutations(mult):
+ tmp = map(lambda (m, mu): m % mu,
+ zip(momenta, [idx[pi] for pi in p]))
+ terms.append(tmp)
+ symm += 1
+ calculate_tensor_terms(lines, terms, registers)
+
+ if symm > 1:
+ lines.append("acc = acc / %d.0_ki" % symm)
+
+ res_accu_line(lines, i, j, k, res_first)
+ res_first = False
+
+ tens_lines[r] = lines
+
+ for reg in registers:
+ f.write(" "*nin + "real(ki) :: %s\n" % reg)
+
+ f.write(" "*nin + "if (present(momenta)) then\n")
+ f.write(" "*(nin+3) + "rk = size(momenta, 1)\n")
+ f.write(" "*nin + "else\n")
+ f.write(" "*(nin+3) + "rk = 0\n")
+ f.write(" "*nin + "end if\n")
+ f.write(" "*nin + "select case(rk)\n")
+ nin += 3
+
+ for r in range(1, R+1):
+ f.write(" "*(nin-3) + "case(%d)\n" % r)
+
+ for line in tens_lines[r]:
+ f.write(" "*nin + line + "\n")
+
+ f.write(" "*(nin-3) + "case default\n")
+ f.write(" "*nin + "res = 0.0_ki\n")
+ nin -= 3
+ f.write(" "*nin + "end select\n")
+ f.write(" "*indent + "end function %s\n" % name)
+
+def write_function_b_tensor_contract(f, indent, name, R, d):
+ """
+ Writes a function that contracts a B-type tensor (one g^{mu nu})
+ constructed from a given set of momenta with a coefficient tensor
+ """
+ coeff_lsts = []
+ coeff_by_rank = [{} for i in range(R+1)]
+
+ for k in range(1, min(R,d)+1):
+ lst, dic = generate_mapping(R, k)
+ coeff_lsts.append(lst)
+ i = 0
+ for e in lst:
+ i += 1
+ rk = sum(e)
+ coeff_by_rank[rk][e] = (k, i)
+
+ for line in DOC.function_tenscontractX(name,"B",R,PAT["coefftype"]%R,d-1):
+ f.write(" "*indent+line+"\n")
+ nin = indent + 3
+ f.write(" "*indent
+ + "pure function %s(coeffs, momenta) result(res)\n" % name)
+ f.write(" "*nin+"! generated by: write_function_b_tensor_contract\n")
+ f.write(" "*nin + "implicit none\n")
+
+ f.write(" "*nin + "type(%s), intent(in) :: coeffs\n" % PAT['coefftype'] % R)
+ f.write(" "*nin
+ + "real(ki), dimension(:,0:), intent(in), optional :: momenta\n")
+ f.write(" "*nin + "complex(ki) :: res\n")
+ f.write(" "*nin + "integer :: rk\n")
+ f.write(" "*nin + "real(ki) :: acc\n")
+
+ tens_lines = {}
+ registers = set()
+
+ for r in range(0, (R-2)+1):
+ res_first = True
+ momenta = ["momenta(%d,%%d)" % m for m in range(1, r+1)]
+ lines = []
+ for key, value in coeff_by_rank[r+2].iteritems():
+ k, i = value
+ mult = coeff_lsts[k-1][i-1]
+ for mi in range(len(mult)):
+ if mult[mi] < 2:
+ continue
+
+ gsymm = len([X for X in select(range(mult[mi]), 2)])
+
+ new_mult = [mm for mm in mult]
+ new_mult[mi] -= 2
+ j = 0
+ for idx in select(range(d), k):
+ j += 1
+ terms = []
+
+ if idx[mi] == 0:
+ g_mi_mi = 1
+ else:
+ g_mi_mi = -1
+
+ symm = 0
+ for p in permutations(new_mult):
+ tmp = map(lambda (m, mu): m % mu,
+ zip(momenta, [idx[pi] for pi in p]))
+ tmp = [g_mi_mi * gsymm] + tmp
+ terms.append(tmp)
+ symm += 1
+ calculate_tensor_terms(lines, terms, registers)
+
+ if symm > 1:
+ lines.append("acc = acc / %d.0_ki" % symm)
+
+ res_accu_line(lines, i, j, k, res_first)
+ res_first = False
+
+ tens_lines[r] = lines
+
+ for reg in registers:
+ f.write(" "*nin + "real(ki) :: %s\n" % reg)
+
+ f.write(" "*nin + "if (present(momenta)) then\n")
+ f.write(" "*(nin+3) + "rk = size(momenta, 1)\n")
+ f.write(" "*nin + "else\n")
+ f.write(" "*(nin+3) + "rk = 0\n")
+ f.write(" "*nin + "end if\n")
+ f.write(" "*nin + "select case(rk)\n")
+ nin += 3
+
+ for r in range(0, (R-2)+1):
+ f.write(" "*(nin-3) + "case(%d)\n" % r)
+
+ for line in tens_lines[r]:
+ f.write(" "*nin + line + "\n")
+
+ f.write(" "*(nin-3) + "case default\n")
+ f.write(" "*nin + "res = 0.0_ki\n")
+ nin -= 3
+ f.write(" "*nin + "end select\n")
+ f.write(" "*indent + "end function %s\n" % name)
+
+def select_two_pairs(mult):
+ """
+ Select two pairs of indices given a list of multiplicities.
+ """
+ candidates = {}
+ for i in range(len(mult)):
+ mi = mult[i]
+ if mi >= 2:
+ candidates[i] = mi
+
+ for i, mi in candidates.iteritems():
+ if mi >= 4:
+ yield i, i
+
+ for lst in select(candidates.keys(), 2):
+ yield lst[0], lst[1]
+
+
+def write_function_c_tensor_contract(f, indent, name, R, d):
+ """
+ Writes a function that contracts a C-type tensor (two g^{mu nu})
+ constructed from a given set of momenta with a coefficient tensor
+ """
+ coeff_lsts = []
+ coeff_by_rank = [{} for i in range(R+1)]
+
+ for k in range(1, min(R,d)+1):
+ lst, dic = generate_mapping(R, k)
+ coeff_lsts.append(lst)
+ i = 0
+ for e in lst:
+ i += 1
+ rk = sum(e)
+ coeff_by_rank[rk][e] = (k, i)
+
+ for line in DOC.function_tenscontractX(name,"C",R,PAT["coefftype"]%R,d-1):
+ f.write(" "*indent+line+"\n")
+ nin = indent + 3
+ f.write(" "*indent
+ + "pure function %s(coeffs, momenta) result(res)\n" % name)
+ f.write(" "*nin+"! generated by: write_function_c_tensor_contract\n")
+ f.write(" "*nin + "implicit none\n")
+
+ f.write(" "*nin + "type(%s), intent(in) :: coeffs\n" % PAT['coefftype'] % R)
+ f.write(" "*nin
+ + "real(ki), dimension(:,0:), intent(in), optional :: momenta\n")
+ f.write(" "*nin + "complex(ki) :: res\n")
+ f.write(" "*nin + "integer :: rk\n")
+ f.write(" "*nin + "real(ki) :: acc\n")
+
+ tens_lines = {}
+ registers = set()
+
+ for r in range(0, (R-4)+1):
+ res_first = True
+ momenta = ["momenta(%d,%%d)" % m for m in range(1, r+1)]
+ lines = []
+ for key, value in coeff_by_rank[r+4].iteritems():
+ k, i = value
+ mult = coeff_lsts[k-1][i-1]
+
+ for mi, mj in select_two_pairs(mult):
+ new_mult = [mm for mm in mult]
+ new_mult[mi] -= 2
+ new_mult[mj] -= 2
+ if mi == mj:
+ gsymm = 3 * len([X for X in select(range(mult[mi]), 4)])
+ else:
+ gsymm = len([X for X in select(range(mult[mi]), 2)]) * \
+ len([X for X in select(range(mult[mj]), 2)])
+ j = 0
+ for idx in select(range(d), k):
+ j += 1
+ terms = []
+
+ if idx[mi] == 0:
+ g_mi_mi = 1
+ else:
+ g_mi_mi = -1
+
+ if idx[mj] == 0:
+ g_mj_mj = 1
+ else:
+ g_mj_mj = -1
+
+ symm = 0
+ for p in permutations(new_mult):
+ tmp = map(lambda (m, mu): m % mu,
+ zip(momenta, [idx[pi] for pi in p]))
+ tmp = [g_mi_mi*g_mj_mj*gsymm] + tmp
+ terms.append(tmp)
+
+ symm += 1
+
+ if symm > 1:
+ lines.append("acc = acc / %d.0_ki" % symm)
+
+ calculate_tensor_terms(lines, terms, registers)
+ res_accu_line(lines, i, j, k, res_first)
+ res_first = False
+
+ tens_lines[r] = lines
+
+ for reg in registers:
+ f.write(" "*nin + "real(ki) :: %s\n" % reg)
+
+ f.write(" "*nin + "if (present(momenta)) then\n")
+ f.write(" "*(nin+3) + "rk = size(momenta, 1)\n")
+ f.write(" "*nin + "else\n")
+ f.write(" "*(nin+3) + "rk = 0\n")
+ f.write(" "*nin + "end if\n")
+ f.write(" "*nin + "select case(rk)\n")
+ nin += 3
+
+ for r in range(0, (R-4)+1):
+ f.write(" "*(nin-3) + "case(%d)\n" % r)
+
+ for line in tens_lines[r]:
+ f.write(" "*nin + line + "\n")
+
+ f.write(" "*(nin-3) + "case default\n")
+ f.write(" "*nin + "res = 0.0_ki\n")
+ nin -= 3
+ f.write(" "*nin + "end select\n")
+ f.write(" "*indent + "end function %s\n" % name)
+
+def calculate_tensor_terms(lines, terms, registers, level=0):
+ """
+ Computes a multi-variate Horner-scheme for a set of terms,
+ which represent monomials in the components of q.
+
+ PARAMETER
+
+ lines -- a list in which the generated commands are stored
+ terms -- a list of terms (a list of lists of factors)
+ registers -- a set in which the names of intermediate expressions are
+ stored
+ level -- internal parameter, level of recursion
+ """
+ count_factors = {}
+ for term in terms:
+ for factor in term:
+ if isinstance(factor, int):
+ continue
+ if factor in count_factors:
+ count_factors[factor] += 1
+ else:
+ count_factors[factor] = 1
+ if len(count_factors) == 0:
+ gain = 0
+ else:
+ gain = max(count_factors.values())
+ if gain <= 1:
+ if len(terms) == 0:
+ lines.append("acc = 0.0_ki")
+ else:
+ is_first = True
+ for term in terms:
+ assert len(term) > 0
+ if isinstance(term[0], int):
+ factor = term[0]
+
+ if factor == -1:
+ sign = -1
+ ofs = 1
+ elif factor == 1:
+ sign = 1
+ ofs = 1
+ elif factor < 0:
+ sign = -1
+ term[0] = abs(factor)
+ ofs = 0
+ else:
+ sign = 1
+ ofs = 0
+ else:
+ sign = 1
+ ofs = 0
+
+ if is_first:
+ if sign == -1:
+ lhs = "acc = -"
+ else:
+ lhs = "acc = "
+ is_first = False
+ else:
+ if sign == -1:
+ lhs = "acc = acc - "
+ else:
+ lhs = "acc = acc + "
+
+ if len(term[ofs:]) == 0:
+ lines.append(lhs + "1.0_ki")
+ else:
+ lines.append(lhs + "*".join(map(str,term[ofs:])))
+ else:
+ pivot = max(count_factors.keys(), key=lambda x: count_factors[x])
+ A0 = []
+ A1 = []
+
+ for term in terms:
+ if pivot in term:
+ tcp = term[:]
+ tcp.remove(pivot)
+ A1.append(tcp)
+ else:
+ A0.append(term)
+ assert len(A1) > 0
+
+ if len(A0) > 0:
+ calculate_tensor_terms(lines, A1, registers, level+1)
+ register = "reg%d" % level
+ registers.add(register)
+ lines.append(register + " = acc * " + pivot)
+ calculate_tensor_terms(lines, A0, registers, level+1)
+ lines.append("acc = acc + " + register)
+ else:
+ calculate_tensor_terms(lines, A1, registers, level+1)
+ lines.append("acc = acc * " + pivot)
+
+def write_function_contract(f, indent, name, N, R, d, shift=0):
+ """
+ Writes a function to contract the coefficients with the form factors.
+
+ shift -- 0: normal contraction
+ 1: contract integrals with mu^2
+ 2: contract integrals with mu^4
+ """
+ nin = indent + 3
+ if shift == 0:
+ coeff_type = R
+ else:
+ coeff_type = R - 2
+
+
+ if coeff_type > 0:
+ CT = PAT["coefftype"] % coeff_type
+ else:
+ CT = "complex(ki)"
+
+ if shift > 0:
+ SHI = "with (mu^2)^%d in the numerator " % shift
+ else:
+ SHI = ""
+
+ for line in DOC.function_contract(name, N, R, CT, SHI, d-1):
+ f.write(" "*indent+line+"\n")
+ f.write(" "*indent
+ + "function %s(coeffs, momenta, b_set) result(amp)\n" % name)
+ f.write(" "*nin+"! generated by: write_function_contract\n")
+ f.write(" "*nin + "implicit none\n")
+ if coeff_type > 0:
+ f.write(" "*nin + "type(%s), intent(in) :: coeffs\n" % CT)
+ else:
+ f.write(" "*nin + "complex(ki), intent(in) :: coeffs\n")
+ f.write(" "*nin + "real(ki), dimension(:,0:), intent(in) :: momenta\n")
+ f.write(" "*nin + "integer, intent(in) :: b_set\n")
+ f.write(" "*nin + "type(form_factor) :: amp\n")
+
+ if N >= 6:
+ assert shift == 0
+ write_contract_split(f, nin, N, R, d)
+ else:
+ write_contract_simple(f, nin, N, R, d, shift)
+
+ f.write(" "*indent + "end function %s\n" % name)
+
+def write_module_combine(name, tens_rec, max_legs, max_rank, d=4):
+ f = open("%s.f90" % name, 'w')
+ for line in DOC.module_combine():
+ f.write(line + "\n")
+ f.write("module %s\n" % name)
+ f.write("! This module has been generated using a script.\n")
+ f.write("! Please, refrain from modifying it directly!\n")
+ f.write("use %s, only: ki\n" % precision_golem)
+ f.write("use %s, only: b_ref, inv_s\n" % matrice_golem)
+ f.write("use %s, only: packb, unpackb, countb, pminus, punion\n"
+ % array_golem)
+ f.write("use %s, only: form_factor, operator(+), operator(-), &\n"
+ % ff_golem)
+ f.write(" & operator(*), assignment(=)\n")
+ for N in range(golem_minlegs,max_legs+1):
+ write_list(f, "use %s, only:" % (ffp_golem % N),
+ map(lambda s: s + ff_suffix, ff_list(N)))
+
+ lst = []
+
+ write_import_list(f, "use %s, only:" % tens_rec)
+ f.write("implicit none\n")
+ f.write("private :: ki, b_ref, unpackb, packb, pminus, form_factor\n")
+ write_import_list(f, "private ::")
+
+ for N in range(golem_minlegs,max_legs+1):
+ write_list(f, "private ::",
+ map(lambda s: s + ff_suffix, ff_list(N)))
+
+
+ f.write("real(ki), dimension(0:%d), parameter, private :: null_vec = &\n"
+ % (d-1))
+ f.write(" & (/%s/)\n" % ",".join(["0.0_ki"]*d))
+
+ f.write("interface %s\n" % PAT['evaluate'])
+ f.write(" module procedure %s_b\n" % PAT['evaluate'])
+ f.write(" module procedure %s_s\n" % PAT['evaluate'])
+ f.write("end interface\n")
+
+ f.write("contains\n")
+
+ write_function_evaluate(f, 0, PAT["evaluate"], max_legs, max_rank, d)
+
+ for N in range(golem_minlegs, max_legs + 1):
+ for R in range(1, min(max_rank, N) + 1):
+ write_function_contract(f, 0, PAT['contract'] % (N, R), N, R, d)
+ if N <= 4 and R >= 2:
+ write_function_contract(f, 0, PAT['contract'] % (N, R) + "s1",
+ N, R, d, 1)
+ if N == 4 and R == 4:
+ write_function_contract(f, 0, PAT['contract'] % (N, R) + "s2",
+ N, R, d, 2)
+
+ for R in range(1, min(5,max_rank) + 1):
+ write_function_a_tensor_contract(f, 0, PAT['tenscontracta'] % R, R, d)
+ if 2 <= R:
+ write_function_b_tensor_contract(f, 0, PAT['tenscontractb'] % R, R, d)
+ if 4 <= R:
+ write_function_c_tensor_contract(f, 0, PAT['tenscontractc'] % R, R, d)
+ f.write("end module %s\n" % name)
+ f.close()
+
+def permutations(mult):
+ """
+ Iterates over all permutations of [0]*mult[0]+...[n]*mult[n].
+ """
+ N = sum(mult)
+
+ def recselect(positions, i):
+ for i_positions in select(positions, mult[i]):
+ other_positions = positions[:]
+ result = {}
+ for p in i_positions:
+ other_positions.remove(p)
+ result[p] = i
+ if len(other_positions) > 0:
+ for dic in recselect(other_positions, i+1):
+ result.update(dic)
+ yield result
+ else:
+ yield result
+
+ lst = [0] * N
+ for dic in recselect(range(N), 0):
+ for idx, value in dic.iteritems():
+ lst[idx] = value
+ yield lst
+
+class RoboDocInfo:
+ """
+ Class which reads text templates from a file.
+
+ The file to be read must be in the format:
+
+ @method_name(param1,param2,....)
+ text which may contain format instructions like %(param1)s etc.
+
+ The generated object will have methods with the same names and parameters
+ iterating over the formatted lines
+
+ EXAMPLE
+
+ -------- file test.txt -------------
+ @foo(name, age)
+ Mr. %(name)s is %(age)d years old.
+ @baz(name,size,cdate,mdate)
+ The file %(name)s has a size of %(size)5.2f MB.
+ It has been created on %(cdate)s.
+ Its last modification was on %(mdate).
+ ---------------------------------------
+
+ >>> DOC = RoboDoc('test.txt')
+ >>> for line in DOC.baz("autoexec.bat", 3.053, "1980-01-01", "1981-03-17"):
+ ... print line
+ The file autoexec.bat has a size of 3.05 MB.
+ It has been created on 1980-01-01.
+ Its last modification was on 1981-03-17.
+ """
+ def __init__(self, fname):
+ """
+ Create a new object from a file
+
+ PARAMETER
+
+ fname -- the name of the file to be read.
+ """
+ self._info = {}
+ self._args = {}
+ self._read(fname)
+
+ def _read(self, fname):
+ f = open(fname, "r")
+ key = None
+ for line in f.readlines():
+ if line.startswith("@"):
+ if "(" in line:
+ tmp = line.split("(")
+ line = tmp[0]
+ args = map(lambda s: s.strip(),
+ tmp[1].strip(" )\t\r\n").split(","))
+ else:
+ args = []
+ key = line[1:].strip()
+ self._args[key] = args
+ self._info[key] = []
+ elif key is not None:
+ self._info[key].append(line.rstrip())
+ f.close()
+
+ def __getattr__(self, name):
+ if name in self._info:
+ lines = self._info[name]
+ param = self._args[name]
+
+ def meth(*args):
+ if len(param) != len(args):
+ raise TypeError, \
+ "RoboDocInfo.%s(%s) expects exactly %d arguments (%d given)" \
+ % (name, ", ".join(list(param)), len(param), len(args))
+
+ opts = dict(zip(param, args))
+ for line in lines:
+ yield line % opts
+
+ return meth
+ else:
+ raise AttributeError, \
+ "This RoboDocInfo does not contain an entry for %r." % name
+
+DOC = RoboDocInfo("robodoc.txt")
+
+if __name__ == "__main__":
+ max_legs = 6
+ max_rank = 6
+ write_module_solve("tens_rec", max_rank)
+ write_module_combine("tens_comb", "tens_rec", max_legs, max_rank)
Index: 95/branches/golem95_without_olo_cmake/tool/tens_rec/robodoc.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/tens_rec/robodoc.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/tens_rec/robodoc.txt (revision 119)
@@ -0,0 +1,456 @@
+@module_solve
+!****h* src/interface/tens_rec
+! NAME
+!
+! Module tens_rec
+!
+! USAGE
+!
+! use tens_rec
+!
+! DESCRIPTION
+!
+! This module offers the possibility of reconstructing the tensor
+! coefficients that have to be contracted with tensor integrals in
+! order to reproduce a diagram, which has been specified by a set
+! of denominators and a numerator N(q, mu^2). This module is typically
+! used in connection with the module tens_comb.
+!
+! Please, note that this module is generated by a script and should not
+! be modified manually. In order to make changes to this module rerun
+! the Python script
+!
+! tool/tens_rec/tens.py
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+@module_combine
+!****h* src/interface/tens_comb
+! NAME
+!
+! Module tens_comb
+!
+! USAGE
+!
+! use tens_comb
+!
+! DESCRIPTION
+!
+! This module contains the routines necessary for the contraction
+! of the tensor coefficients as reconstructed by the module tens_rec
+! with the according tensor integrals.
+!
+! Please, note that this module is generated by a script and should not
+! be modified manually. In order to make changes to this module rerun
+! the Python script
+!
+! tool/tens_rec/tens.py
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * matrice_s (src/kinematics/matrice_s.f90)
+! * array (src/module/array.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * form_factor_2p (src/form_factor/form_factor_2p.f90)
+! * form_factor_3p (src/form_factor/form_factor_3p.f90)
+! * form_factor_4p (src/form_factor/form_factor_4p.f90)
+! * form_factor_5p (src/form_factor/form_factor_5p.f90)
+! * form_factor_6p (src/form_factor/form_factor_6p.f90)
+! * tens_rec (src/interface/tens_rec.f90)
+!
+!*****
+@subroutine_solve(name,xtra,lname,rname,dmin1,coeff_type)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Subroutine %(name)s
+!
+! USAGE
+!
+! call %(name)s(numeval, indices, mu2, coeffs, idx%(xtra)s)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array %(rname)s.
+! The matrix %(lname)s is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:%(dmin1)d) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type %(coeff_type)s to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+@function_recon(name,k,dmin1,qtype,dim)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Function %(name)s
+!
+! USAGE
+!
+! result = %(name)s(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! %(k)d non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a %(qtype)s vector of dimension(0:%(dmin1)d)
+! * indices -- array of dimension(%(k)d): the set of non-zero indices.
+! * coeffs -- an array of dimension(%(dim)s) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the %(k)d entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+@coeff_type(name,R,maxk)
+!****t* src/interface/tens_rec/%(name)s
+!
+! NAME
+!
+! Type %(name)s
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank %(R)d.
+!
+! ENTRIES
+!
+! * c0, ..., c%(maxk)d -- coefficients of terms with 0,...,%(maxk)d
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+@function_glob_recon(name,type_name,R,dmin1)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Function %(name)s
+!
+! USAGE
+!
+! result = %(name)s(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:%(dmin1)d)
+! * coeffs -- a record of type %(type_name)s
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+@function_glob_recon_complex(name,type_name,R,dmin1)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Function %(name)s
+!
+! USAGE
+!
+! result = %(name)s(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:%(dmin1)d)
+! * coeffs -- a record of type %(type_name)s
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+@subroutine_glob_solve(name,type_name,R,dmin1,xtra)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Subroutine %(name)s
+!
+! USAGE
+!
+! call %(name)s(numeval, mu2, coeffs%(xtra)s)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank %(R)d
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type %(type_name)s used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+@subroutine_print_coeffs(name,R,type_name)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Subroutine %(name)s
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank %(R)d
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type %(type_name)s
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+@subroutine_reconstruct(name,coeff_type,coeff_type2,R)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Subroutine %(name)s
+!
+! USAGE
+!
+! call %(name)s(numeval, cm0, cm1, cm2)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank %(R)d,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type %(coeff_type)s, representing the
+! numerator at mu2=0
+! * cm1 -- coefficients of type %(coeff_type2)s, representing the
+! tensor in front of mu2 [optional]
+! * cm2 -- coefficients of type %(coeff_type2)s, representing the
+! tensor in front of mu2^2 [optional]
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+! only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+! is at most linear in mu2.
+!
+! EXAMPLE
+!
+!
+!*****
+@subroutine_reconstruct_dummy(name,coeff_type,R)
+!****f* src/interface/tens_rec/%(name)s
+! NAME
+!
+! Subroutine %(name)s
+!
+! USAGE
+!
+! call %(name)s(numeval, cm0)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank %(R)d,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! In the given case the rank is too low in order to allow for mu2 pieces.
+!
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type %(coeff_type)s, representing the
+! numerator
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0.
+!
+! EXAMPLE
+!
+!
+!*****
+@function_evaluate(name,set_name,set_type,dmin1)
+!****f* src/interface/tens_comb/%(name)s
+! NAME
+!
+! Function %(name)s
+!
+! Accessible through interface evaluate
+!
+! USAGE
+!
+! amp = evaluate(numeval, momenta, %(set_name)s, rank)
+!
+! DESCRIPTION
+!
+! Evaluates a diagram by first reconstructing its tensor coefficients
+! and then contracting with the tensor integrals.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * momenta -- real array of dimension(:,0:%(dmin1)d) containing the
+! momenta r_i of the loop propagators
+! * %(set_name)-7s -- the set of pinched propagators as %(set_type)s
+! * rank -- optional integer, specifying the maximum rank of the diagram
+! If omitted, rank is assumed to be the equal to the number of
+! loop propagators.
+! RETURN VALUE
+!
+! Value of the diagram as a type(form_factor)
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+@function_contract(name,N,r,coeff_type,shift, dmin1)
+!****f* src/interface/tens_comb/%(name)s
+! NAME
+!
+! Function %(name)s
+!
+! USAGE
+!
+! amp = %(name)s(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the %(N)d-point rank %(r)d tensor integral
+! %(shift)swith its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(%(coeff_type)s)
+! * momenta -- real array of dimension(:,%(dmin1)d) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+@function_tenscontractX(name,letter,R,coeff_type,dmin1)
+!****f* src/interface/tens_comb/%(name)s
+! NAME
+!
+! Function %(name)s
+!
+! USAGE
+!
+! ans = %(name)s(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an %(letter)s-type tensor
+! of rank %(R)d constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(%(coeff_type)s)
+! * momenta -- real array of dimension(:,%(dmin1)d) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+@end_of_file
Index: 95/branches/golem95_without_olo_cmake/tool/I3Result.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/I3Result.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/I3Result.m (revision 119)
@@ -0,0 +1,423 @@
+#
+DivUneMass:=table(symmetric,[
+ 1 = 'x -> (1-2*epsilon)/epsilon*H0(x,epsilon)',
+ 2 = 'x -> (1-2*epsilon+4*epsilon^2)/epsilon^2*H0(x,epsilon)',
+ 3 = 'x -> (1-2*epsilon)/epsilon*H0(x,epsilon)',
+ (1,1) = 'x -> (1/2-epsilon)/epsilon*H0(x,epsilon)',
+ (2,2) = 'x -> (1-3*epsilon+7*epsilon^2)/epsilon^2*H0(x,epsilon)',
+ (3,3) = 'x -> (1/2-epsilon)/epsilon*H0(x,epsilon)',
+ (1,2) = 'x -> (1/2-3/2*epsilon)/epsilon*H0(x,epsilon)',
+ (1,3) = 'x -> 1/2*H0(x,epsilon)',
+ (2,3) = 'x -> (1/2-3/2*epsilon)/epsilon*H0(x,epsilon)',
+ (1,1,1) = 'x -> (1/3-13/18*epsilon)/epsilon*H0(x,epsilon)',
+ (2,2,2) = 'x -> (1-11/3*epsilon+85/9*epsilon^2)/epsilon^2*H0(x,epsilon)',
+ (3,3,3) = 'x -> (1/3-13/18*epsilon)/epsilon*H0(x,epsilon)',
+ (1,1,2) = 'x -> (1/6-4/9*epsilon)/epsilon*H0(x,epsilon)',
+ (1,2,2) = 'x -> (1/3-11/9*epsilon)/epsilon*H0(x,epsilon)',
+ (1,1,3) = 'x -> 1/6*H0(x,epsilon)',
+ (2,2,3) = 'x -> (1/3-11/9*epsilon)/epsilon*H0(x,epsilon)',
+ (1,3,3) = 'x -> 1/6*H0(x,epsilon)',
+ (2,3,3) = 'x -> (1/6-4/9*epsilon)/epsilon*H0(x,epsilon)',
+ (1,2,3) = 'x -> 1/6*H0(x,epsilon)'
+ ]);
+#
+DivDeuxMass:=table(symmetric,[
+ 1 = '(x,y) -> (1-epsilon+2*epsilon^2)/epsilon^2*H2(x,y,epsilon)',
+ 2 = '(x,y) -> (1-epsilon+2*epsilon^2)/epsilon^2*
+ (H1(x,y,epsilon)-H2(x,y,epsilon))',
+ 3 = '(x,y) -> (1-2*epsilon)/epsilon*H1(x,y,epsilon)',
+ (1,1) = '(x,y) -> (1-3/2*epsilon+3*epsilon^2)/epsilon^2*H3(x,y,epsilon)',
+ (2,2) = '(x,y) -> (1-3/2*epsilon+3*epsilon^2)/epsilon^2*
+ (H3(x,y,epsilon)-2*H2(x,y,epsilon)+H1(x,y,epsilon))',
+ (3,3) = '(x,y) -> (1/2-epsilon)/epsilon*H1(x,y,epsilon)',
+ (1,2) = '(x,y) -> (1-3/2*epsilon+3*epsilon^2)/epsilon^2*
+ (H2(x,y,epsilon)-H3(x,y,epsilon))',
+ (1,3) = '(x,y) -> (1/2-epsilon)/epsilon*H2(x,y,epsilon)',
+ (2,3) = '(x,y) -> (1/2-epsilon)/epsilon*
+ (H1(x,y,epsilon)-H2(x,y,epsilon))',
+ (1,1,1) = '(x,y) -> (1-11/6*epsilon+67/18*epsilon^2)/epsilon^2*
+ H4(x,y,epsilon)',
+ (2,2,2) = '(x,y) -> (1-11/6*epsilon+67/18*epsilon^2)/epsilon^2*
+ (-H4(x,y,epsilon)+3*H3(x,y,epsilon)-3*H2(x,y,epsilon)+
+ H1(x,y,epsilon))',
+ (3,3,3) = '(x,y) -> (1/3-13/18*epsilon)/epsilon*H1(x,y,epsilon)',
+ (1,1,2) = '(x,y) -> (1-11/6*epsilon+67/18*epsilon^2)/epsilon^2*
+ (H3(x,y,epsilon)-H4(x,y,epsilon))',
+ (1,2,2) = '(x,y) -> (1-11/6*epsilon+67/18*epsilon^2)/epsilon^2*
+ (H4(x,y,epsilon)-2*H3(x,y,epsilon)+H2(x,y,epsilon))',
+ (1,1,3) = '(x,y) -> (1/3-13/18*epsilon)/epsilon*H3(x,y,epsilon)',
+ (2,2,3) = '(x,y) -> (1/3-13/18*epsilon)/epsilon*
+ (H3(x,y,epsilon)-2*H2(x,y,epsilon)+H1(x,y,epsilon))',
+ (1,3,3) = '(x,y) -> (1/6-5/18*epsilon)/epsilon*H2(x,y,epsilon)',
+ (2,3,3) = '(x,y) -> (1/6-5/18*epsilon)/epsilon*
+ (H1(x,y,epsilon)-H2(x,y,epsilon))',
+ (1,2,3) = '(x,y) -> (1/3-13/18*epsilon)/epsilon*
+ (H2(x,y,epsilon)-H3(x,y,epsilon))'
+ ]);
+DivUneMassNP2:=table(symmetric,[
+ 1 = 'x -> (1/6+4/9*epsilonUv)/epsilonUv*H0(x,1-epsilonUv)',
+ 2 = 'x -> (1/6+11/18*epsilonUv)/epsilonUv*H0(x,1-epsilonUv)',
+ 3 = 'x -> (1/6+4/9*epsilonUv)/epsilonUv*H0(x,1-epsilonUv)'
+ ]);
+#
+DivDeuxMassNP2:=table(symmetric,[
+ 1 = '(x,y) -> (1/3+19/18*epsilonUv)/epsilonUv*H2(x,y,1-epsilonUv)',
+ 2 = '(x,y) -> (1/3+19/18*epsilonUv)/epsilonUv*H2(y,x,1-epsilonUv)',
+ 3 = '(x,y) -> (1/6+4/9*epsilonUv)/epsilonUv*H1(x,y,1-epsilonUv)'
+ ]);
+#
+# H0 := (x,epsilon) -> H0D(x)+epsilon*H0E(x)+epsilon^2/2*H0F(x);
+# H1 := (x,y,epsilon) -> epsilon*H1E(x,y)+epsilon^2/2*H1F(x,y);
+# H2 := (x,y,epsilon) -> epsilon*H2E(x,y)+epsilon^2/2*H2F(x,y);
+# H3 := (x,y,epsilon) -> epsilon*H3E(x,y)+epsilon^2/2*H3F(x,y);
+# H4 := (x,y,epsilon) -> epsilon*H4E(x,y)+epsilon^2/2*H4F(x,y);
+H0 := (x,epsilon) -> (-x)^epsilon/x;
+H1 := (x,y,epsilon) -> ((-x)^epsilon-(-y)^epsilon)/(x-y);
+H2 := (x,y,epsilon) -> (-x)^epsilon/(x-y)
++ 1/(1+epsilon)*((-x)^(1+epsilon)-(-y)^(1+epsilon))/(x-y)^2;
+H3 := (x,y,epsilon) -> (-x)^epsilon/(x-y)
++ 2/(1+epsilon)*(-x)^(1+epsilon)/(x-y)^2
++ 2/((1+epsilon)*(2+epsilon))*((-x)^(2+epsilon)-(-y)^(2+epsilon))/(x-y)^3;
+H4 := (x,y,epsilon) -> (-x)^epsilon/(x-y)
++ 3/(1+epsilon)*(-x)^(1+epsilon)/(x-y)^2
++ 6/((1+epsilon)*(2+epsilon))*(-x)^(2+epsilon)/(x-y)^3
++ 6/((1+epsilon)*(2+epsilon)*(3+epsilon))
+*((-x)^(3+epsilon)-(-y)^(3+epsilon))/(x-y)^4;
+#
+ExtractDiv:=proc(func::function)
+ local nb_point,Ltest,Lnum,m1,m2,m3,m4,nb_mass,remaining_arg,LZ,res;
+ if ((op(0,func) = ISca) or (op(0,func) = IScaZ)) then
+ nb_point := op(2,func);
+ if (nb_point = 3) then
+ remaining_arg := nops(func)-5;
+ if ( (op(-2,func)=0) and (op(-3,func)=0) ) then
+ nb_mass := TroisPointUneMass;
+ elif ((op(-3,func)=0)) then
+ nb_mass := TroisPointDeuxMass;
+ else
+ nb_mass := TroisPointTroisMass;
+ end if;
+ if (op(1,func) = n) then
+ if (remaining_arg = 0) then
+ if (nb_mass = TroisPointUneMass) then
+ res := H0(op(-1,func),epsilon)/epsilon^2;
+ elif (nb_mass = TroisPointDeuxMass) then
+ res := H1(op(-1,func),op(-2,func),epsilon)/epsilon^2;
+ elif (nb_mass = TroisPointTroisMass) then
+ res := 0;
+ end if
+ elif (remaining_arg = 1) then
+ if (nb_mass = TroisPointUneMass) then
+ res := DivUneMass[op(3,func)](op(-1,func));
+ elif (nb_mass = TroisPointDeuxMass) then
+ res := DivDeuxMass[op(3,func)](op(-1,func),op(-2,func));
+ elif (nb_mass = TroisPointTroisMass) then
+ res := 0;
+ end if
+ elif (remaining_arg = 2) then
+ if (nb_mass = TroisPointUneMass) then
+ res := DivUneMass[op(3,func),op(4,func)](op(-1,func));
+ elif (nb_mass = TroisPointDeuxMass) then
+ res := DivDeuxMass[op(3,func),op(4,func)](op(-1,func),op(-2,func));
+ elif (nb_mass = TroisPointTroisMass) then
+ res := 0;
+ end if
+ elif (remaining_arg = 3) then
+ if (nb_mass = TroisPointUneMass) then
+ res := DivUneMass[op(3,func),op(4,func),op(5,func)](op(-1,func));
+ elif (nb_mass = TroisPointDeuxMass) then
+ res := DivDeuxMass[op(3,func),op(4,func),op(5,func)]
+ (op(-1,func),op(-2,func));
+ elif (nb_mass = TroisPointTroisMass) then
+ res := 0;
+ end if
+ end if
+ elif (op(1,func) = n+2) then
+ if (remaining_arg = 0) then
+ if (nb_mass = TroisPointUneMass) then
+ res := (1+3*epsilonUv)/2*H0(op(-1,func),1-epsilonUv)/epsilonUv;
+ elif (nb_mass = TroisPointDeuxMass) then
+ res := (1+3*epsilonUv)/2
+ *H1(op(-1,func),op(-2,func),1-epsilonUv)/epsilonUv;
+ elif (nb_mass = TroisPointTroisMass) then
+ res := 0;
+ end if
+ elif (remaining_arg = 1) then
+ if (nb_mass = TroisPointUneMass) then
+ res := DivUneMassNP2[op(3,func)](op(-1,func));
+ elif (nb_mass = TroisPointDeuxMass) then
+ res := DivDeuxMassNP2[op(3,func)](op(-1,func),op(-2,func));
+ elif (nb_mass = TroisPointTroisMass) then
+ res := 0;
+ end if
+ elif (remaining_arg = 2) then
+ ERROR(`not implemented`,remaining_arg);
+# if (nb_mass = TroisPointUneMass) then
+# res := DivUneMass[op(3,func),op(4,func)](op(-1,func));
+# elif (nb_mass = TroisPointDeuxMass) then
+# res := DivDeuxMass[op(3,func),op(4,func)](op(-1,func),op(-2,func));
+# elif (nb_mass = TroisPointTroisMass) then
+# res := 0;
+# end if
+ elif (remaining_arg = 3) then
+ ERROR(`not implemented`,remaining_arg);
+# if (nb_mass = TroisPointUneMass) then
+# res := DivUneMass[op(3,func),op(4,func),op(5,func)](op(-1,func));
+# elif (nb_mass = TroisPointDeuxMass) then
+# res := DivDeuxMass[op(3,func),op(4,func),op(5,func)]
+# (op(-1,func),op(-2,func));
+# elif (nb_mass = TroisPointTroisMass) then
+# res := 0;
+# end if
+ end if
+ end if;
+ else
+ ERROR(`only three point function diverge in ExtractDiv`,nb_point);
+ end if;
+ else
+ ERROR(`wrong type of function in ExtractDiv`,func);
+ end if;
+ res := expand(convert(taylor(res*epsilon^2,epsilon=0,3),polynom)/epsilon^2);
+ res := expand(convert(taylor(res*epsilonUv,epsilonUv=0,2),polynom)/epsilonUv);
+ RETURN(res);
+end proc;
+#
+#
+CompTroisMass:=proc(Lz::list,Dim,m1,m2,m3)
+ local Un3,Sa,b3,InvS3,B3,nn,Set3,K2,K3,j,A1,A2,AI2,l1,l2,l3,
+ FinI3NP2r1,I3NP2r1,FinI3NP2r2,AB1,AB2,AB3,res;
+# on definit les b et l'inverse de la matrice S
+ Un3:=linalg[vector]([1,1,1]);
+ Sa:=linalg[matrix](3,3,[
+ 0,m2,m1,
+ m2,0,m3,
+ m1,m3,0] );
+ b3:=linalg[linsolve](Sa,Un3);
+ InvS3:=linalg[inverse](Sa);
+ B3:=add(b3[i],i=1..3);
+# dimension de l'espace-temps
+ nn := 4-2*epsilonUv;
+ Set3 := {1,2,3};
+# K2 est la partie finie de I_2^n:
+# I_2^n(S-{j}) = (1/epsilonUv+2-gamma)-K2(S-{j})
+ K2({1,2}) := ln(-m2);
+ K2({2,3}) := ln(-m3);
+ K2({1,3}) := ln(-m1);
+# K3 est la partie finie de I_3^{n+2}:
+# I_3^{n+2}(S) = 1/(2-n) ( (1/epsilonUv+2-gamma)-K3(S) )
+ K3 := (add(b3[j]*K2(Set3 minus {j}),j=1..3)+I3Mass(m1,m2,m3))/B3;
+# I_3^{n+2}(l;S):
+ I3NP2r1 := 'l1 -> -1/(2*(nn-1))*(1/epsilonUv+2) + (b3[l1]/2*(K3-1/3)
+ -1/3*add((InvS3[j,l1]-b3[j]*kronB(j,l1)/2)
+ *K2(Set3 minus {j}),j=1..3))/B3';
+# partie finie de I_3^{n+2}(l1,l2;S):
+ FinI3NP2r2 := '(l1,l2) -> (-1/6*(b3[l1]+b3[l2])+5/2*(K3-1/3-1/3
+ *add((InvS3[j,l1]*b3[l2]+InvS3[j,l2]*b3[l1]
+ -1/2*(kronB(j,l1)*b3[j]*b3[l2]
+ +kronB(j,l2)*b3[j]*b3[l1]))
+ *K2(Set3 minus {j}),j=1..3))/B3
+ +1/2*InvS3[l1,l2]*(1-K3)-1/2*add((1/2
+ *(kronB[j,l1]*InvS3[j,l2]+kronB[j,l2]
+ *InvS3[j,l1])+1/3*b3[j]*kronB(j,l1)*kronB(j,l2))
+ *K2(Set3 minus {j}),j=1..3))/(4*B3)';
+# A1 et A2: pour le calcul de I_3^n(l1,l2;S)
+ A1 := '(l1,l2) -> ( b3[l1]*b3[l2]*(3*K3-1) -
+ add((InvS3[j,l1]*b3[l2]+InvS3[j,l2]*b3[l1]-
+ 1/2*(kronB(j,l1)*b3[j]*b3[l2]+kronB(j,l2)*b3[j]*b3[l1]))
+ *K2(Set3 minus {j}),j=1..3) )/B3';
+ A2 := '(l1,l2) -> InvS3[l1,l2]*(1-K3)-
+ 1/2*add((kronB(j,l1)*InvS3[j,l2]+kronB(j,l2)*InvS3[j,l1])
+ *K2(Set3 minus {j}),j=1..3)';
+# c'est parti
+ if (nops(Lz)=0) then
+ if (Dim = n) then
+# I_3^n(S)
+ res := I3Mass(m1,m2,m3);
+ elif (Dim = n+2) then
+# I_3^{n+2}(S)
+ res := 1/(2-nn)*(1/epsilonUv+2-K3);
+ end if;
+ elif (nops(Lz)=1) then
+ l1 := Lz[1];
+ if (Dim = n) then
+# I_3^n(l1;S)
+ res := b3[l1]*K3
+ - ( add(InvS3[j,l1]*K2(Set3 minus {j}),j=1..3) );
+ elif (Dim = n+2) then
+# I_3^{n+2}(l1;S)
+# res := -1/(2*(nn-1))*(1/epsilonUv+2) + FinI3NP2r1(l1);
+ res := I3NP2r1(l1);
+ end if;
+ elif (nops(Lz)=2) then
+ l1 := Lz[1];
+ l2 := Lz[2];
+ if (Dim = n) then
+# I_3^n(l1,l2;S)
+ res := (A1(l1,l2)+A2(l1,l2))/2;
+ elif (Dim = n+2) then
+# I_3^{n+2}(l1,l2;S) pas necessaire
+ ERROR(`not implemented`,Dim,Lz);
+ end if;
+ elif (nops(Lz)=3) then
+ l1 := Lz[1];
+ l2 := Lz[2];
+ l3 := Lz[3];
+ if (Dim = n) then
+# I_3^n(l1,l2,l3;S)
+ AI2[1,2] := (nn-2)/(4*(nn-1));
+ AI2[2,1] := (nn-2)/(4*(nn-1));
+ AI2[1,1] := nn/(4*(nn-1));
+ AI2[2,2] := nn/(4*(nn-1));
+ AB1 := (2*b3[l1]*b3[l3]*I3NP2r1(l2)+2*b3[l2]*b3[l3]*I3NP2r1(l1)
+ +2*b3[l1]*b3[l2]*I3NP2r1(l3)
+ +b3[l3]*(A1(l1,l2)+A2(l1,l2))/2+b3[l2]*(A1(l1,l3)+A2(l1,l3))/2
+ +b3[l1]*(A1(l2,l3)+A2(l2,l3))/2
+# -add((b3[l3]*b3[j]*kronB(j,l1)*kronB(j,l2)*AI2[l1,l2]
+# +b3[l2]*b3[j]*kronB(j,l1)*kronB(j,l3)*AI2[l1,l3]
+# +b3[l1]*b3[j]*kronB(j,l2)*kronB(j,l3)*AI2[l2,l3])
+# *((1/epsilonUv+2)-K2(Set3 minus {j})),j=1..3)
+ -add((b3[l3]*b3[j]*kronB(j,l1)*kronB(j,l2)
+ *AI2[position_set(l1,Set3 minus {j}),
+ position_set(l2,Set3 minus {j})]
+ +b3[l2]*b3[j]*kronB(j,l1)*kronB(j,l3)
+ *AI2[position_set(l1,Set3 minus {j}),
+ position_set(l3,Set3 minus {j})]
+ +b3[l1]*b3[j]*kronB(j,l2)*kronB(j,l3)
+ *AI2[position_set(l2,Set3 minus {j}),
+ position_set(l3,Set3 minus {j})])
+ *((1/epsilonUv+2)-K2(Set3 minus {j})),j=1..3)
+ )/B3;
+ AB2 := (-2*(InvS3[l1,l3]*I3NP2r1(l2)+InvS3[l2,l3]*I3NP2r1(l1)
+ +InvS3[l1,l2]*I3NP2r1(l3))+add(
+# (InvS3[l3,j]*kronB(j,l1)*kronB(j,l2)*AI2[l1,l2]
+# +InvS3[l2,j]*kronB(j,l1)*kronB(j,l3)*AI2[l1,l3]
+# +InvS3[l1,j]*kronB(j,l2)*kronB(j,l3)*AI2[l2,l3])
+ (InvS3[l3,j]*kronB(j,l1)*kronB(j,l2)
+ *AI2[position_set(l1,Set3 minus {j}),
+ position_set(l2,Set3 minus {j})]
+ +InvS3[l2,j]*kronB(j,l1)*kronB(j,l3)
+ *AI2[position_set(l1,Set3 minus {j}),
+ position_set(l3,Set3 minus {j})]
+ +InvS3[l1,j]*kronB(j,l2)*kronB(j,l3)
+ *AI2[position_set(l2,Set3 minus {j}),
+ position_set(l3,Set3 minus {j})])
+ *((1/epsilonUv+2)-K2(Set3 minus {j})),j=1..3));
+ res := (AB1+AB2)/3;;
+ elif (Dim = n+2) then
+# I_3^{n+2}(l1,l2,l3;S) pas necessaire
+ ERROR(`not implemented`,Dim,Lz);
+ end if;
+ end if;
+ RETURN(res);
+end proc;
+#
+#
+Compute3p:=proc(func::function)
+ local nb_point,Ltest,Lnum,m1,m2,m3,m4,nb_mass,remaining_arg,LZ,res;
+# ne marche que pour ISca et IScaZ
+ if ((op(0,func) = ISca) or (op(0,func) = IScaZ)) then
+# on teste le nombre de point, cette routine n'accepte que
+# les fonctions a trois points
+ nb_point := op(2,func);
+ if (nb_point = 3) then
+# on determine le nombre de parametre de Feynman au numerateur
+ remaining_arg := nops(func)-5;
+# on determine le nombre de masse
+ if ( (op(-2,func)=0) and (op(-3,func)=0) ) then
+ nb_mass := TroisPointUneMass;
+ elif ((op(-3,func)=0)) then
+ nb_mass := TroisPointDeuxMass;
+ else
+ nb_mass := TroisPointTroisMass;
+ end if;
+# c'est parti
+# cas scalaire (sans parametre de Feynman au numerateur)
+ if (remaining_arg = 0) then
+ if (nb_mass = TroisPointUneMass) then
+ if (op(1,func) = n) then
+ res := H0(op(-1,func),epsilon)/epsilon^2;
+ elif (op(1,func) = n+2) then
+ res := (1+3*epsilonUv)/2*H0(op(-1,func),1-epsilonUv)/epsilonUv;
+ end if
+ elif (nb_mass = TroisPointDeuxMass) then
+ if (op(1,func) = n) then
+ res := H1(op(-1,func),op(-2,func),epsilon)/epsilon^2;
+ elif (op(1,func) = n+2) then
+ res := (1+3*epsilonUv)/2
+ *H1(op(-1,func),op(-2,func),1-epsilonUv)/epsilonUv;
+ end if
+ elif (nb_mass = TroisPointTroisMass) then
+ res := CompTroisMass([],op(1,func),op(-3,func),
+ op(-2,func),op(-1,func));
+ end if
+# cas rank 1 (un parametre de Feynman au numerateur)
+ elif (remaining_arg = 1) then
+ if (nb_mass = TroisPointUneMass) then
+ if (op(1,func) = n) then
+ res := DivUneMass[op(3,func)](op(-1,func));
+ elif (op(1,func) = n+2) then
+ res := DivUneMassNP2[op(3,func)](op(-1,func));
+ end if
+ elif (nb_mass = TroisPointDeuxMass) then
+ if (op(1,func) = n) then
+ res := DivDeuxMass[op(3,func)](op(-1,func),op(-2,func));
+ elif (op(1,func) = n+2) then
+ res := DivDeuxMassNP2[op(3,func)](op(-1,func),op(-2,func));
+ end if
+ elif (nb_mass = TroisPointTroisMass) then
+ res := CompTroisMass([op(3,func)],op(1,func),op(-3,func),
+ op(-2,func),op(-1,func));
+ end if
+# cas rank 2 (deux parametres de Feynman au numerateur)
+ elif (remaining_arg = 2) then
+ if (nb_mass = TroisPointUneMass) then
+ if (op(1,func) = n) then
+ res := DivUneMass[op(3,func),op(4,func)](op(-1,func));
+ if ((op(3,func) =0) or (op(4,func)=0)) then
+ end if;
+ elif (op(1,func) = n+2) then
+ ERROR(`not implemented`,remaining_arg);
+ end if
+ elif (nb_mass = TroisPointDeuxMass) then
+ if (op(1,func) = n) then
+ res := DivDeuxMass[op(3,func),op(4,func)]
+ (op(-1,func),op(-2,func));
+ elif (op(1,func) = n+2) then
+ ERROR(`not implemented`,remaining_arg);
+ end if
+ elif (nb_mass = TroisPointTroisMass) then
+ res := CompTroisMass([op(3,func),op(4,func)],op(1,func),op(-3,func),
+ op(-2,func),op(-1,func));
+ end if
+# cas rank 3 (trois parametres de Feynman au numerateur)
+ elif (remaining_arg = 3) then
+ if (nb_mass = TroisPointUneMass) then
+ if (op(1,func) = n) then
+ res := DivUneMass[op(3,func),op(4,func),op(5,func)](op(-1,func));
+ elif (op(1,func) = n+2) then
+ ERROR(`not implemented`,remaining_arg);
+ end if
+ elif (nb_mass = TroisPointDeuxMass) then
+ if (op(1,func) = n) then
+ res := DivDeuxMass[op(3,func),op(4,func),op(5,func)]
+ (op(-1,func),op(-2,func));
+ elif (op(1,func) = n+2) then
+ ERROR(`not implemented`,remaining_arg);
+ end if
+ elif (nb_mass = TroisPointTroisMass) then
+ res := CompTroisMass([op(3,func),op(4,func),op(5,func)],op(1,func),
+ op(-3,func),op(-2,func),op(-1,func));
+ end if
+ end if
+ else
+# ERROR(`only three point function diverge in Compute3p`,nb_point);
+ res := func;
+ end if;
+ else
+ ERROR(`wrong type of function in Compute3p`,func);
+ end if;
+ res := expand(convert(taylor(res*epsilon^2,epsilon=0,3),polynom)/epsilon^2);
+ res := expand(convert(taylor(res*epsilonUv,epsilonUv=0,2),polynom)/epsilonUv);
+ RETURN(res);
+end proc;
+#
Index: 95/branches/golem95_without_olo_cmake/tool/I4Result.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/I4Result.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/I4Result.m (revision 119)
@@ -0,0 +1,130 @@
+#
+# a faire avant BonOrdre (fct de qi)
+Compute4p:=proc(func::function)
+ local nb_point,Ltest,Lnum,m1,m2,m3,m4,nb_mass,remaining_arg,res,
+ l1,l2,l3,l4,S,Ltemp,Set,Dim,nn;
+ global LCor,rang,t_rang1,t_rang2;
+ nn := 4-2*epsilonUv;
+# ne marche que pour ISca et IScaZ
+ if ((op(0,func) = IScaZ) or (op(0,func) = ISca)) then
+# on teste le nombre de point, cette routine n'accepte que
+# les fonctions a quatre points
+ nb_point := op(2,func);
+ if (nb_point = 4) then
+# on determine le nombre de parametre de Feynman au numerateur
+ remaining_arg := nops(func)-6;
+# on determine le nombre de masse
+ nb_mass := DetermineNumbMass(func);
+# on determine la dimension de l'espace-temps
+ Dim := op(1,func);
+# lprint ("Dim",Dim,nb_mass,remaining_arg);
+ Ltemp := Correspond([op(-4,func),op(-3,func),op(-2,func),op(-1,func)],
+ LCor);
+ S := convert(Ltemp,set);
+ Set := Compl(S,S_i);
+# lprint("S=",S,"Set=",Set);
+ lprint("test:",rang);
+ if (rang = 1) then
+ I4Nr1 := 'l1 -> (b4(l1,Set)*ISca(n+2,4,seq(q||i,i=S)) + 1/2*
+ add(
+ InvS4(j,l1,Set)*ISca(n,3,seq(q||i,i=S minus {j}))
+ ,j=S) - 1/2*
+ add(
+ b4(j,Set)*kronB(j,l1)
+ *IScaZ(n,3,position_set(l1,S minus {j}),
+ seq(q||i,i=S minus {j}))
+ ,j=S) )/SumB4(Set)' ;
+ elif ( (rang = 2) or (rang = 3) ) then
+ I4Nr1 := 'l1 -> t_rang1[l1]' ;
+ end if;
+ if (rang = 2) then
+ I4Nr2 := '(l1,l2) -> ( b4(l1,Set)*I4Nr1(l2) + b4(l2,Set)*I4Nr1(l1)
+ - 1/2*InvS4(l1,l2,Set)*ISca(n+2,4,seq(q||i,i=S))
+ + add( ( InvS4(j,l2,Set)*kronB(j,l1)*IScaZ(n,3,
+ position_set(l1,S minus {j}),seq(q||i,i=S minus {j}))
+ + InvS4(j,l1,Set)*kronB(j,l2)*IScaZ(n,3,
+ position_set(l2,S minus {j}),seq(q||i,i=S minus {j})) )
+ ,j=S )/4
+ - add( b4(j,Set)*kronB(j,l1)*kronB(j,l2)
+ *IScaZ(n,3,position_set(l1,S minus {j}),
+ position_set(l2,S minus {j}),
+ seq(q||i,i=S minus {j}))
+ ,j=S)/2 )*2/(3*SumB4(Set))';
+ elif (rang = 3) then
+ lprint("coucou:",t_rang2[1,2]);
+ I4Nr2 := '(l1,l2) -> t_rang2[l1,l2]' ;
+ end if;
+ I4N4r0 := '( ISca(n+2,op(2,func),op(-4,func),op(-3,func),
+ op(-2,func),op(-1,func)) - (1-(nn-4)/3)
+ * add(
+ b4(j,Set)*ISca(n+2,3,seq(q||i,i=S minus {j}))
+ ,j=S) )/(3*SumB4(Set))';
+# c'est parti
+ if (remaining_arg = 0) then
+ if (Dim = n+2) then
+ res := func;
+ elif (Dim = n+4) then
+ res := I4N4r0;
+ end if;
+# cas rank 1 (un parametre de Feynman au numerateur)
+ elif (remaining_arg = 1) then
+ l1 := S[op(3,func)];
+ if (Dim = n+2) then
+ res := I4Nr1(l1);
+ elif (Dim = n+4) then
+ res := ( (1-(nn-4)/12)*b4(l1,Set)*I4N4r0 + 1/3*I4Nr1(l1)
+ - 1/2*(1-(nn-4)/4)*
+ add(
+ b4(j,Set)*kronB(j,l1)
+ *IScaZ(n+2,3,position_set(l1,S minus {j}),
+ seq(q||i,i=S minus {j}))
+ ,j=S) + 1/6*(1-(nn-4)/4)*
+ add(
+ InvS4(j,l1,Set)*ISca(n+2,3,seq(q||i,i=S minus {j}))
+ ,j=S) )/(2*SumB4(Set));
+ ;
+ end if;
+# cas rank 2 (deux parametres de Feynman au numerateur)
+ elif (remaining_arg = 2) then
+ l1 := S[op(3,func)];
+ l2 := S[op(4,func)];
+ res := I4Nr2(l1,l2);
+# cas rank 3 (trois parametres de Feynman au numerateur)
+ elif (remaining_arg = 3) then
+ l1 := S[op(3,func)];
+ l2 := S[op(4,func)];
+ l3 := S[op(5,func)];
+ res := ( b4(l1,Set)*I4Nr2(l2,l3) + b4(l2,Set)*I4Nr2(l1,l3)
+ + b4(l3,Set)*I4Nr2(l1,l2) -1/3*( InvS4(l1,l2,Set)*I4Nr1(l3)
+ + InvS4(l1,l3,Set)*I4Nr1(l2)+ InvS4(l2,l3,Set)*I4Nr1(l1) )
+ + 1/6*(
+ + add( InvS4(j,l3,Set)*kronB(j,l1)*kronB(j,l2)
+ *IScaZ(n,3,position_set(l1,S minus {j}),
+ position_set(l2,S minus {j}),
+ seq(q||i,i=S minus {j})),j=S )
+ + add( InvS4(j,l2,Set)*kronB(j,l1)*kronB(j,l3)
+ *IScaZ(n,3,position_set(l1,S minus {j}),
+ position_set(l3,S minus {j}),
+ seq(q||i,i=S minus {j})),j=S )
+ + add( InvS4(j,l1,Set)*kronB(j,l2)*kronB(j,l3)
+ *IScaZ(n,3,position_set(l2,S minus {j}),
+ position_set(l3,S minus {j}),
+ seq(q||i,i=S minus {j})),j=S ) )
+ - 1/2*(
+ + add( b4(j,Set)*kronB(j,l1)*kronB(j,l2)*kronB(j,l3)
+ *IScaZ(n,3,position_set(l1,S minus {j}),
+ position_set(l2,S minus {j}),
+ position_set(l3,S minus {j}),
+ seq(q||i,i=S minus {j})),j=S ) ) )/(2*SumB4(Set));
+ end if
+ else
+# ERROR(`only three point function diverge in ExtractDiv`,nb_point);
+ res := func;
+ end if;
+ elif (op(0,func) = ISca) then
+ res := func;
+ else
+ ERROR(`wrong type of function in ExtractDiv`,func);
+ end if;
+ RETURN(res);
+end proc;
Index: 95/branches/golem95_without_olo_cmake/tool/translate.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/translate.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/translate.pl (revision 119)
@@ -0,0 +1,123 @@
+use Text::Wrap qw($columns &wrap);
+#
+# $fichier_in = "../phase";
+$fichier_in = "/home1/guillet/diagramme/old_six-point/six_photon/fortran/tot.out";
+$fichier_out = "essai_trans.f90";
+$nb_point = 6;
+open(EWRITE,">$fichier_out") || die "$!";
+open(EREAD,"$fichier_in") || die "$!";
+$ewrite = *EWRITE;
+@l_temp = ();
+$temp = "";
+while(<EREAD>) {
+ chomp;
+ if ( m/=/ ) {
+ s/^\s+//g;
+ s/\s//g;
+ $l_temp[$i] = $_;
+ $i++;
+ }
+ else {
+ s/^\s+//g;
+ s/\s//g;
+ $l_temp[$i-1] = $l_temp[$i-1].$_;
+ }
+}
+close(EREAD);
+$cont_line = "&";
+@temp_real = ();
+@temp_ar = ();
+$ii = 0;
+#debugging
+# $test = "GA33(1,2,3,4,5,6)";
+# $test = translate("GA33(1,2,3,4,5,6)",$cont_line,6);
+# $test =~ s/GA33\((\d,\d,\d),(\d,\d,\d)\)/a33\($1,\(\/$2\/\)\)/g;
+# print "test: $test\n";
+#
+foreach $term (@l_temp) {
+ $term = translate($term,$cont_line,$nb_point);
+ print_fortran($term,$ewrite);
+#debugging
+# if($term =~ m/(ar_t\d\d\d)/) {
+# print EWRITE "write (*,*) \'$1:\',$1\n";
+# }
+ print EWRITE "\n";
+}
+close(EWRITE);
+#
+#
+sub print_fortran {
+ my ($string,$df) = @_;
+ my (@l_car) = split("",$string);
+ my ($count) = 0;
+ my ($s_count) = 0;
+ my ($columns) = 72;
+ my ($rest) = $#l_car;
+ foreach $car (@l_car) {
+ $count++;
+ $s_count++;
+ $rest--;
+ if ($count == $columns) {
+ if ($rest == -1) {
+ $car = $car."\n!";
+ }
+ else {
+ $car = $car."&\n &";
+ }
+ $count = 2;
+ }
+ print $df "$car";
+ }
+ print $df "\n";
+}
+#
+sub translate {
+ my ($term,$cont_line,$nb_point) = @_;
+ $term =~ s/$cont_line//g;
+# cas en partant d'une amplitude a quatre points
+ if ($nb_point == 4) {
+ $term =~ s/GA42\((\d,\d)\)/a42\($1,s_null\)/g;
+ $term =~ s/GB42/b42\(s_null\)/g;
+ $term =~ s/GA44\((\d,\d,\d,\d)\)/a44\($1,s_null\)/g;
+ $term =~ s/GB44\((\d,\d)\)/b44\($1,s_null\)/g;
+ $term =~ s/GC44/c44\(s_null\)/g;
+ $term =~ s/GA40/a40\(s_null\)/g;
+ $term =~ s/GA32\((\d,\d),(\d)\)/a32\($1,\(\/$2\/\)\)/g;
+ $term =~ s/GA30\((\d)\)/a30\(\(\/$1\/\)\)/g;
+ $term =~ s/GB32\((\d)\)/b32\(\(\/$1\/\)\)/g;
+ $term =~ s/GA20\((\d),(\d)\)/a20\(\(\/$1,$2\/\)\)/g;
+ }
+ elsif ($nb_point == 6) {
+# $term =~ s/GC54\((\d)\)/c54\(\{$1\}\)/g;
+# $term =~ s/GB54\((\d,\d),(\d)\)/b54\($1,\{$2\}\)/g;
+# $term =~ s/GB53\((\d),(\d)\)/b53\($1,\{$2\}\)/g;
+# $term =~ s/GB52\((\d)\)/b52\(\{$1\}\)/g;
+# $term =~ s/GA54\((\d,\d,\d,\d),(\d)\)/a54\($1,\{$2\}\)/g;
+# $term =~ s/GA53\((\d,\d,\d),(\d)\)/a53\($1,\{$2\}\)/g;
+# $term =~ s/GA52\((\d,\d),(\d)\)/a52\($1,\{$2\}\)/g;
+# $term =~ s/GA51\((\d),(\d)\)/a51\($1,\{$2\}\)/g;
+# $term =~ s/GA42\((\d,\d),(\d,\d)\)/a42\($1,\{$2\}\)/g;
+# $term =~ s/GB42\((\d,\d)\)/b42\(\{$1\}\)/g;
+# $term =~ s/GA44\((\d,\d,\d,\d),(\d,\d)\)/a44\($1,\{$2\}\)/g;
+# $term =~ s/GB44\((\d,\d),(\d,\d)\)/b44\($1,\{$2\}\)/g;
+# $term =~ s/GC44\((\d,\d)\)/c44\(\{$1\}\)/g;
+ $term =~ s/GA63\((\d,\d,\d)\)/a63\($1,s_null\)/g;
+ $term =~ s/GA33\((\d,\d,\d),(\d,\d,\d)\)/a33\($1,\(\/$2\/\)\)/g;
+ $term =~ s/GB33\((\d),(\d,\d,\d)\)/b33\($1,\(\/$2\/\)\)/g;
+ }
+# on transforme les entiers en reels dans le cas ou ceux-ci:
+# 1) ne sont pas precedes par une lettre ou la chaine "**"
+# 2) ne sont pas suivis par les caracteres ",",")","]"
+# $term =~ s/(?<![\w,\*\*])(\d+)(?=\*)/$1.d0/g;
+# $term =~ s/(?<![\w,\*\*])(\d+)(?=\/)/$1.d0/g;
+ $term =~ s/(?<![\w,\*\*])(\d+\.)(?![\,,\),\]])/$1d0/g;
+ $term =~ s/(?<![\w,\*\*])(\d+)(?![\,,\),\],\.,\d])/$1.d0/g;
+ $term =~ s/dble//g;
+ $term =~ tr/[A-Z]/[a-z]/;
+ $term =~ s/epsprodsca/eps_prod_sca/g;
+ $term =~ s/epsprodeps/eps_prod_eps/g;
+ $term =~ s/S/s_mat/g;
+ $term =~ s/dets/det_s/g;
+ return($term)
+}
+#
Index: 95/branches/golem95_without_olo_cmake/tool/int_rep_he.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/int_rep_he.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/int_rep_he.m (revision 119)
@@ -0,0 +1,25 @@
+# rt1:=alpha*(y*A+(1-y)*B)^(alpha-1);
+# rt1:=(y*A+(1-y)*B)^(-1)+(1-y*A-(1-y)*B)^(-1);
+# assume(A>0,B>0);
+# rt1:=(y*A+(1-y)*B)^(-1);
+# rt1:=(y*A+(1-y)*B)^(-1)*ln(y*A+(1-y)*B);
+# rt1:=y*(y*A+(1-y)*B)^(-1);
+# rt1:=y^2*(y*A+(1-y)*B)^(-1);
+# rt1:=ln(1-1/(y*A+(1-y)*B))*(y*A+(1-y)*B)^(-1);
+# rt1:=(A*y+B)*ln(1-(y*A+(1-y)*B))*(y*A+(1-y)*B)^(-1);
+# rt1:=ln(1-(y*A+(1-y)*B))*(y*A+(1-y)*B)^(-1);
+# rt1:=ln(1-(y*A+(1-y)*B))*(y*A+(1-y)*B)^(-1);
+rt1:=( y*ln(1-(y*A+(1-y)*B)) )/(y*A+(1-y)*B)^2;
+# rt1:=( ln(1-(y*A+(1-y)*B)) )/(y*A+(1-y)*B);
+# rt1:=y/(y*A+(1-y)*B)^3;
+# rt1:=ln(1-A*B/(y*B+(1-y)*A))/(y*B+(1-y)*A);
+# rt1:=y^2*ln((y*a1+(1-y)*a3));
+# rt1:=ln(y)/(y*A+(1-y)*B);
+# rt1:=y*ln(y*A+(1-y)*B)/(y*A+(1-y)*B);
+# rt1:= ln( (y*A+(1-y)*B)/((y*A+(1-y)*B)-A*B) )/(y*A+(1-y)*B);
+# rt1:=ln((y*A+(1-y)*B))*(1-(y*A+(1-y)*B))^(-1);
+# assume(A>B,A<0,B<0);
+rt2:=simplify(int(rt1,y=0..1),log);
+lprint(rt2);
+# rt2:=subs(A=B+alpha,rt2);
+# rt3:=simplify(taylor(rt2,alpha=0,3));
Index: 95/branches/golem95_without_olo_cmake/tool/resu_3m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/resu_3m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/resu_3m.f90 (revision 119)
@@ -0,0 +1,122 @@
+b(1)=-(-s_mat(1,4)*s_mat(2,3)**2-s_mat(2,4)**2*s_mat(1,3)+s_mat(1&
+ &,2)*s_mat(3,4)*s_mat(2,3)-s_mat(1,2)*s_mat(3,4)**2+s_mat(3,4)*s&
+ &_mat(2,3)*s_mat(1,4)+s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(1,2&
+ &)*s_mat(3,4)*s_mat(2,4)-2.d0*s_mat(2,4)*s_mat(3,4)*s_mat(2,3)+s&
+ &_mat(2,3)*s_mat(1,3)*s_mat(2,4)+s_mat(2,3)*s_mat(2,4)*s_mat(1,4&
+ &))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2&
+ &)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(&
+ &1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4&
+ &)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3)**2)
+!
+b(2)=-(-s_mat(1,4)**2*s_mat(2,3)-s_mat(2,4)*s_mat(1,3)**2+s_mat(1&
+ &,2)*s_mat(3,4)*s_mat(1,4)+s_mat(1,2)*s_mat(3,4)*s_mat(1,3)-s_ma&
+ &t(1,2)*s_mat(3,4)**2+s_mat(3,4)*s_mat(2,3)*s_mat(1,4)+s_mat(3,4&
+ &)*s_mat(1,3)*s_mat(2,4)+s_mat(2,3)*s_mat(1,3)*s_mat(1,4)-2.d0*s&
+ &_mat(1,3)*s_mat(3,4)*s_mat(1,4)+s_mat(2,4)*s_mat(1,3)*s_mat(1,4&
+ &))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2&
+ &)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(&
+ &1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4&
+ &)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3)**2)
+!
+b(3)=(s_mat(1,4)**2*s_mat(2,3)+s_mat(2,4)**2*s_mat(1,3)-s_mat(1,2&
+ &)*s_mat(3,4)*s_mat(2,4)+s_mat(1,2)**2*s_mat(3,4)-s_mat(2,4)*s_m&
+ &at(1,3)*s_mat(1,2)-s_mat(2,4)*s_mat(1,3)*s_mat(1,4)-s_mat(2,3)*&
+ &s_mat(2,4)*s_mat(1,4)-s_mat(1,4)*s_mat(2,3)*s_mat(1,2)-s_mat(1,&
+ &2)*s_mat(3,4)*s_mat(1,4)+2.d0*s_mat(2,4)*s_mat(1,4)*s_mat(1,2))&
+ &/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)*&
+ &*2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,&
+ &4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)*&
+ &*2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3)**2)
+!
+b(4)=(2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(1,2)-s_mat(1,4)*s_mat(2,3)&
+ &*s_mat(1,2)-s_mat(2,3)*s_mat(1,3)*s_mat(2,4)-s_mat(2,3)*s_mat(1&
+ &,3)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)-s_mat(1,2)*s_mat(3,4)*s&
+ &_mat(1,3)+s_mat(2,4)*s_mat(1,3)**2-s_mat(1,2)*s_mat(3,4)*s_mat(&
+ &2,3)-s_mat(2,4)*s_mat(1,3)*s_mat(1,2)+s_mat(1,4)*s_mat(2,3)**2)&
+ &/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)*&
+ &*2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,&
+ &4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)*&
+ &*2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3)**2)
+!
+sumb=2.d0*(-s_mat(1,4)*s_mat(2,3)*s_mat(1,2)+s_mat(1,4)**2*s_mat(&
+ &2,3)-s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-s_mat(2,3)*s_mat(1,3)*s_m&
+ &at(2,4)-s_mat(1,2)*s_mat(3,4)*s_mat(1,3)+s_mat(1,2)**2*s_mat(3,&
+ &4)+s_mat(2,4)*s_mat(1,3)**2+s_mat(1,4)*s_mat(2,3)**2+s_mat(2,3)&
+ &*s_mat(1,3)*s_mat(1,2)-s_mat(2,3)*s_mat(1,3)*s_mat(1,4)-s_mat(1&
+ &,2)*s_mat(3,4)*s_mat(2,3)-s_mat(2,4)*s_mat(1,3)*s_mat(1,2)-s_ma&
+ &t(3,4)*s_mat(1,3)*s_mat(2,4)-s_mat(2,3)*s_mat(2,4)*s_mat(1,4)+s&
+ &_mat(2,4)*s_mat(3,4)*s_mat(2,3)+s_mat(2,4)**2*s_mat(1,3)-s_mat(&
+ &2,4)*s_mat(1,3)*s_mat(1,4)-s_mat(1,2)*s_mat(3,4)*s_mat(2,4)-s_m&
+ &at(1,2)*s_mat(3,4)*s_mat(1,4)+s_mat(2,4)*s_mat(1,4)*s_mat(1,2)+&
+ &s_mat(1,3)*s_mat(3,4)*s_mat(1,4)+s_mat(1,2)*s_mat(3,4)**2)/(-2.&
+ &d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)**2*s_&
+ &mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-2.&
+ &d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)**2*s_&
+ &mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3)**2)
+!
+invs(1,1)=2.d0*s_mat(2,4)*s_mat(3,4)*s_mat(2,3)/(-2.d0*s_mat(2,3)&
+ &*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2&
+ &.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)&
+ &*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s&
+ &_mat(1,4)**2*s_mat(2,3)**2)
+!
+invs(1,2)=s_mat(3,4)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3)&
+ &-s_mat(1,4)*s_mat(2,3))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)&
+ &*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3&
+ &,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)&
+ &*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3&
+ &)**2)
+!
+invs(1,3)=-s_mat(2,4)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3&
+ &)+s_mat(1,4)*s_mat(2,3))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4&
+ &)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(&
+ &3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3&
+ &)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,&
+ &3)**2)
+!
+invs(1,4)=-s_mat(2,3)*(s_mat(2,4)*s_mat(1,3)+s_mat(1,2)*s_mat(3,4&
+ &)-s_mat(1,4)*s_mat(2,3))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4&
+ &)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(&
+ &3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3&
+ &)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,&
+ &3)**2)
+!
+invs(2,2)=2.d0*s_mat(1,3)*s_mat(3,4)*s_mat(1,4)/(-2.d0*s_mat(2,3)&
+ &*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2&
+ &.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)&
+ &*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s&
+ &_mat(1,4)**2*s_mat(2,3)**2)
+!
+invs(2,3)=-s_mat(1,4)*(s_mat(2,4)*s_mat(1,3)+s_mat(1,2)*s_mat(3,4&
+ &)-s_mat(1,4)*s_mat(2,3))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4&
+ &)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(&
+ &3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3&
+ &)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,&
+ &3)**2)
+!
+invs(2,4)=-s_mat(1,3)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3&
+ &)+s_mat(1,4)*s_mat(2,3))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4&
+ &)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(&
+ &3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3&
+ &)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,&
+ &3)**2)
+!
+invs(3,3)=2.d0*s_mat(2,4)*s_mat(1,4)*s_mat(1,2)/(-2.d0*s_mat(2,3)&
+ &*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2&
+ &.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)&
+ &*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s&
+ &_mat(1,4)**2*s_mat(2,3)**2)
+!
+invs(3,4)=s_mat(1,2)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3)&
+ &-s_mat(1,4)*s_mat(2,3))/(-2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)&
+ &*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2.d0*s_mat(1,2)*s_mat(3&
+ &,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)&
+ &*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3&
+ &)**2)
+!
+invs(4,4)=2.d0*s_mat(2,3)*s_mat(1,3)*s_mat(1,2)/(-2.d0*s_mat(2,3)&
+ &*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)**2-2&
+ &.d0*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-2.d0*s_mat(1,2)&
+ &*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)**2*s_mat(1,3)**2+s&
+ &_mat(1,4)**2*s_mat(2,3)**2)
+!
Index: 95/branches/golem95_without_olo_cmake/tool/ninteg1D_f4p1m.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/ninteg1D_f4p1m.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/ninteg1D_f4p1m.m (revision 119)
@@ -0,0 +1,98 @@
+########################################################################
+#
+# initialisation
+#
+########################################################################
+kron:=proc(i::integer,j::integer)
+ local res;
+ if (i = j) then
+ res := 1;
+ else
+ res := 0;
+ end if;
+ RETURN(res);
+end proc:
+#
+je := table([
+2 = 'z -> ln(1-z)/z',
+3 = 'z -> (-ln(1-z)+z/(1-z))/z/2',
+4 = 'z -> (ln(1-z)+ 1/2*(3*z^2-4*z)/(1-z)^2)/z/3'
+]);
+#
+Feyn_int := proc(func::function)
+ local n1,n3,m,z1,z3,res,A,Y,temp,j,y;
+# ne marche que pour le
+ if ((op(0,func) = le) ) then
+ n1 := op(1,func);
+ n3 := op(2,func);
+ m := op(3,func);
+ z1 := op(4,func);
+ z3 := op(5,func);
+ temp := expand( ((Y+1)/A)^m/Y^(n1+n3) );
+ res := (n1+n3-1)!/(n1-1)!/(n3-1)!*x^(n1-1)*(1-x)^(n3-1)*temp*ln(y);
+ res := applyrule(ln(y)*Y^(j::nonunit(integer))=je[-j](A),expand(res));
+ res := factor(coeff(res,ln(1-A),1))*ln(1-A)+factor(coeff(res,ln(1-A),0));
+ res := subs(A=(z1*x+z3*(1-x)),res);
+ else
+ ERROR(`wrong type of function in Feyn_int`,func);
+ end if;
+ RETURN(res);
+end proc;
+#
+########################################################################
+`diff/le`:=proc(n1,n3,m,z1,z3,alpha) -n1*diff(z1,alpha)*le(n1+1,n3,m+1,z1,z3)-n3*diff(z3,alpha)*le(n1,n3+1,m+1,z1,z3) end proc:
+#
+rang0 := -( al[2]*al[4]*le(1,1,0,1-al[2]/al[3],-al[2]*al[4]/al[1]/al[3])
+ + al[1]*al[3]*le(1,1,0,1-al[1]/al[4],-al[1]*al[3]/al[2]/al[4]) );
+# rang 1
+# for l1 from 1 to 4 do
+# t_rang1[l1] := 1/2*(rang0-al[l1]*diff(rang0,al[l1]));
+# end do:
+# # le := (n1,n3,m,z1,z3) -> y^m/(z1*y-1)^n1/(z3*y-1)^n3;
+# for l1 from 1 to 4 do
+# r_rang1[l1] := algsubs(1-al[2]/al[3]=z1,t_rang1[l1],exact);
+# r_rang1[l1] := algsubs(1-al[1]/al[4]=z2,r_rang1[l1],exact);
+# r_rang1[l1] := algsubs(-al[2]*al[4]/al[1]/al[3]=z3,r_rang1[l1],exact);
+# r_rang1[l1] := algsubs(-al[1]*al[3]/al[2]/al[4]=z4,r_rang1[l1],exact);
+# r_rang1[l1] := factor(subs(al[1]=S[3,4]*al[4]/S[1,3],
+# al[2]=-1/al[4]/S[2,4],al[3]=-1/S[3,4]/al[4],r_rang1[l1])):
+# r_rang1[l1]:=expand(r_rang1[l1]);
+# # r_rang1[l1]:=applyrule(le(1,2,1,z1,z3)=(le(1,1,0,z1,z3)+le(1,2,0,z1,z3))/z3,
+# # r_rang1[l1]);
+# # r_rang1[l1]:=applyrule(le(1,2,1,z2,z4)=(le(1,1,0,z2,z4)+le(1,2,0,z2,z4))/z4,
+# # r_rang1[l1]);
+# # r_rang1[l1]:=applyrule(z4*le(1,2,1,z2,z4)-le(1,1,0,z2,z4)=le(1,2,0,z2,z4),
+# # r_rang1[l1],exact);
+# # r_rang1[l1];
+# end do;
+l1 := 1;
+# le := (n1,n3,m,z1,z3) -> y^m/(z1*y-1)^n1/(z3*y-1)^n3;
+test:=le(2,1,1,z1,z3);
+# trace(Feyn_int);
+test:=subsindets(test,'specfunc(anything,le)',f -> Feyn_int(f));
+quit;
+r_rang[l1] :=
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"res_ie = %a\n",r_rang1[l1]);
+end do;
+# rang 2
+for l1 from 1 to 1 do
+ for l2 from 1 to 4 do
+ t_rang2[l1,l2] := 1/3*( (1+kron(l1,l2))*t_rang1[l1]
+ -al[l2]*diff(t_rang1[l1],al[l2]) );
+ end do;
+end do:
+l1:=1;
+for l2 from 1 to 4 do
+ r_rang2[l1,l2] := algsubs(1-al[2]/al[3]=z1,t_rang2[l1,l2],exact);
+ r_rang2[l1,l2] := algsubs(1-al[1]/al[4]=z2,r_rang2[l1,l2],exact);
+ r_rang2[l1,l2] := algsubs(-al[2]*al[4]/al[1]/al[3]=z3,r_rang2[l1,l2],exact);
+ r_rang2[l1,l2] := algsubs(-al[1]*al[3]/al[2]/al[4]=z4,r_rang2[l1,l2],exact);
+ r_rang2[l1,l2] := factor(subs(al[1]=S[3,4]*al[4]/S[1,3],
+ al[2]=-1/al[4]/S[2,4],al[3]=-1/S[3,4]/al[4],r_rang2[l1,l2])):
+ r_rang1[l1,l2]:=expand(r_rang2[l1,l2]);
+ a[l2]:=collect(r_rang2[l1,l2],le,factor);
+end do;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_4m_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_4m_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_4m_6d_r0.m (revision 119)
@@ -0,0 +1,121 @@
+I6_4p3m := y*x/(A+B*y);
+#
+I6_4p3m := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p3m));
+I6_4p3m := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p3m);
+#
+I6_4p3m := I6_4p3m;
+quit;
+I6_4p3m := algsubs(A+B=C+D*x,I6_4p3m,exact);
+I6_4p3m := subs(A=C+F*x,B=x*G,I6_4p3m);
+I6_4p3m := expand(I6_4p3m);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p3m := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p3m);
+I6_4p3m := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p3m);
+I6_4p3m := expand(int(I6_4p3m,x=0..1));
+I6_4p3m := I6_4p3m;
+#
+reste := I6_4p3m:
+result := 0;
+set_ln := indets(I6_4p3m,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+# if (func = ln(TC)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+# ctemp := algsubs(D-F=G,numer(ctemp),exact)/denom(ctemp);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p3m,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p3m,func,1));
+ reste := factor(reste-ctemp*func);
+ end if;
+ result := result + ctemp*func;
+# reste := factor(reste-ctemp*func);
+end do:
+result;
+# reste:=algsubs(D-F=G,numer(reste),exact)/denom(reste);
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(C+F=E,result,exact);
+#
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := coeff(result,D,-2)/D^2+coeff(result,D,-1)/D;
+result2[l1] := coeff(result,G,-2)/G^2+coeff(result,G,-1)/G;
+reste_f[l1] := factor(result-result1[l1]-result2[l1]);
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = z*s12+(1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24-s12)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-z*s12-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+fprintf(fd,"select case(flag)\n");
+truc1:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-result1[l1]):
+truc2:=subs(C = c_var,F = f_var,
+ G = g_var,D = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ H = h_var,-(result2[l1]+reste_f[l1])):
+fprintf(fd,"case(%d)\n",1);
+fprintf(fd,"fg = %a\n",truc2);
+fprintf(fd,"case(%d)\n",2);
+fprintf(fd,"fg = %a\n",truc1);
+fprintf(fd,"end select\n");
+#
+# pole pour F=0
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d1):
+ dtot := factor(subs(z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ res_fin := w12*z_log(t1*s23/t2^2)
+ - tq1*q(1,(t2*t3-t1*s23)/t2/t3,sign_arg);
+ res_fin := res_fin/t2;
+# fprintf(fd,"residue1 = %a\n",res_fin);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin));
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/procedure.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/procedure.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/procedure.m (revision 119)
@@ -0,0 +1,366 @@
+#
+mod_me:=proc(i::integer,j::integer)
+ local res,im1;
+ im1:=i-1;
+ res:= (im1 mod j);
+ res:=res+1;
+ RETURN(res);
+end proc:
+#
+position_list:=proc(j::symbol,List::list)
+ local k;
+ if (member(j,List,'k')) then
+ RETURN(k)
+ else
+ ERROR(`invalid k for the list List`,k,List)
+ end if;
+end;
+#
+position_set:=proc(j::integer,Set::set)
+ local k;
+ if (member(j,Set,'k')) then
+ RETURN(k)
+ else
+# ERROR(`invalid k for the set Set`,k,Set)
+ RETURN(0)
+ end if;
+end;
+#
+Correspond:=proc(Lq::list,LCor::list)
+ local LRet,i;
+# local LCor,LRet,i;
+# LCor:=[q1,q2,q3,q4,q5,q6];
+ LRet:=[];
+ for i from 1 to nops(Lq) do
+ LRet:=[op(LRet),position_list(op(i,Lq),LCor)];
+ end do;
+ RETURN(LRet);
+end;
+#
+kron:=proc(i::integer,j::integer)
+ local res;
+ if (i = j) then
+ res := 1;
+ else
+ res := 0;
+ end if;
+ RETURN(res);
+end proc:
+#
+kronB:=proc(i::integer,j::integer)
+ local res;
+ if (i = j) then
+ res := 0;
+ else
+ res := 1;
+ end if;
+ RETURN(res);
+end proc:
+#
+eM:=proc(i::integer,a::integer,Se::set)
+ local res,uni_set;
+ if (not(member(a,Se))) then
+ res := kron(i,a);
+ else
+ uni_set := Se minus {a};
+ res := Y(i,a,uni_set);
+ end if;
+ RETURN(res);
+end proc:
+#
+fM:=proc(a::integer,Se::set)
+ local res,uni_set;
+ if (not(member(a,Se))) then
+ res := 1;
+ else
+ uni_set := Se minus {a};
+ res := X(a,uni_set)+1;
+ end if;
+ RETURN(res);
+end proc:
+#
+# calcul le complementaire du set Se par rapport au set Si
+Compl:=proc(Se::set,Si::set)
+ local res;
+ res:=Si minus Se;
+ RETURN(res);
+end proc:
+#
+SumB6:=proc(Se::set)
+ local res;
+ res:=0;
+ RETURN(res);
+end proc:
+#
+DetermineNumbMass:=proc(func::function)
+ local nb_point,Ltest,Lnum,m1,m2,m3,m4,nb_mass;
+ global LCor;
+ if ((op(0,func) = ISca) or (op(0,func) = IScaZ)) then
+ nb_point := op(2,func);
+ if (nb_point = 2) then
+ Ltest := [op(-2,func),op(-1,func)];
+ Lnum := Correspond(Ltest,LCor);
+ m1 := S[op(1,Lnum),op(2,Lnum)];
+ if (m1 = 0 ) then
+ ERROR(`wrong type of function in DetermineNumbMass`,m1);
+ else
+ nb_mass := DeuxPointUneMass;
+ end if;
+ elif (nb_point = 3) then
+ Ltest := [op(-3,func),op(-2,func),op(-1,func)];
+ Lnum := Correspond(Ltest,LCor);
+ m1 := S[op(1,Lnum),op(2,Lnum)];
+ m2 := S[op(2,Lnum),op(3,Lnum)];
+ m3 := S[op(3,Lnum),op(1,Lnum)];
+ if ( (m1 = 0 ) and (m2 = 0) and (m3 = 0) ) then
+ ERROR(`wrong type of function in DetermineNumbMass`,m1,m2,m3);
+ elif ( ((m1 = 0 ) and (m2 = 0)) or
+ ((m1 = 0 ) and (m3 = 0)) or
+ ((m2 = 0 ) and (m3 = 0)) ) then
+ nb_mass := TroisPointUneMass;
+ elif ( (m1 = 0 ) or (m2 = 0) or (m3 = 0) ) then
+ nb_mass := TroisPointDeuxMass;
+ else
+ nb_mass := TroisPointTroisMass;
+ end if;
+ elif (nb_point = 4) then
+ Ltest := [op(-4,func),op(-3,func),op(-2,func),op(-1,func)];
+# lprint("test0:",Ltest);
+ Lnum := Correspond(Ltest,LCor);
+# lprint("test1:",Lnum);
+ m1 := S[op(1,Lnum),op(4,Lnum)];
+ m2 := S[op(2,Lnum),op(1,Lnum)];
+ m3 := S[op(3,Lnum),op(2,Lnum)];
+ m4 := S[op(4,Lnum),op(3,Lnum)];
+ if ( (m1 = 0 ) and (m2 = 0) and (m3 = 0) and (m4 = 0) ) then
+ nb_mass := QuatrePointZeroMass;
+ elif ( ((m1 = 0 ) and (m2 = 0) and (m3 = 0)) or
+ ((m1 = 0 ) and (m2 = 0) and (m4 = 0)) or
+ ((m1 = 0 ) and (m3 = 0) and (m4 = 0)) or
+ ((m2 = 0 ) and (m3 = 0) and (m4 = 0)) ) then
+ nb_mass := QuatrePointUneMass;
+ elif ( ((m1 = 0 ) and (m2 = 0)) or
+ ((m1 = 0 ) and (m4 = 0)) or
+ ((m2 = 0 ) and (m3 = 0)) or
+ ((m3 = 0 ) and (m4 = 0)) ) then
+ nb_mass := QuatrePointDeuxMass_Adj;
+ elif ( ((m1 = 0 ) and (m3 = 0)) or
+ ((m2 = 0 ) and (m4 = 0)) ) then
+ nb_mass := QuatrePointDeuxMass_Opp;
+ elif ( (m1 = 0 ) or (m2 = 0) or (m3 = 0) or (m4 = 0) ) then
+ nb_mass := QuatrePointTroisMass;
+ else
+ nb_mass := QuatrePointQuatreMass;
+ end if;
+ end if;
+ end if;
+ RETURN(nb_mass);
+end proc:
+#
+# Change les valeurs de la liste L de L[i]+kshift mod m
+Change:=proc(kshift::integer,m::integer,L::list)
+ local pk,k,Ltemp;
+ Ltemp:=L;
+ pk:=1;
+ for k in L do
+ Ltemp:=subsop(pk=mod_me(k+kshift,m),Ltemp);
+ pk := pk+1;
+ end do;
+ RETURN(Ltemp);
+end proc:
+#
+# remet les fonction a 3 et 4 points dans le bon ordre
+BonOrdre:=proc(func::function)
+ local nb_point,Ltest,Lnum,m1,m2,m3,m4,nb_mass,remaining_arg,LZ,
+ sm,tm,res;
+ global LCor;
+ if ((op(0,func) = ISca) or (op(0,func) = IScaZ)) then
+ nb_point := op(2,func);
+ if (nb_point = 2) then
+ Ltest := [op(-2,func),op(-1,func)];
+ remaining_arg := nops(func)-4;
+ nb_mass := DetermineNumbMass(func);
+ if (remaining_arg=0) then
+ LZ := [];
+ elif (remaining_arg=1) then
+ LZ := [op(3,func)];
+ elif (remaining_arg=2) then
+ LZ := [op(3,func),op(4,func)];
+ end if;
+ Lnum := Correspond(Ltest,LCor);
+ m1 := S[op(1,Lnum),op(2,Lnum)];
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m1);
+ elif (nb_point = 3) then
+ Ltest := [op(-3,func),op(-2,func),op(-1,func)];
+ remaining_arg := nops(func)-5;
+ nb_mass := DetermineNumbMass(func);
+ if (remaining_arg=0) then
+ LZ := [];
+ elif (remaining_arg=1) then
+ LZ := [op(3,func)];
+ elif (remaining_arg=2) then
+ LZ := [op(3,func),op(4,func)];
+ elif (remaining_arg=3) then
+ LZ := [op(3,func),op(4,func),op(5,func)];
+ end if;
+ Lnum := Correspond(Ltest,LCor);
+# attention differentes conventions entre 3p-3M et 3p-2M 3p-1M
+ m1 := S[op(1,Lnum),op(2,Lnum)];
+ m2 := S[op(2,Lnum),op(3,Lnum)];
+ m3 := S[op(3,Lnum),op(1,Lnum)];
+# m1 := S[op(1,Lnum),op(3,Lnum)];
+# m2 := S[op(1,Lnum),op(2,Lnum)];
+# m3 := S[op(2,Lnum),op(3,Lnum)];
+ if (nb_mass = TroisPointUneMass) then
+ if (m1 <> 0) then
+ LZ := Change(2,3,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m2,m3,m1);
+ elif (m2 <> 0) then
+ LZ := Change(1,3,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m3,m1,m2);
+ elif (m3 <> 0) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m1,m2,m3);
+ end if;
+ elif (nb_mass = TroisPointDeuxMass) then
+ if (m1 = 0) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m1,m2,m3);
+ elif (m2 = 0) then
+ LZ := Change(2,3,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m2,m3,m1);
+ elif (m3 = 0) then
+ LZ := Change(1,3,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m3,m1,m2);
+ end if;
+ elif (nb_mass = TroisPointTroisMass) then
+# res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m1,m2,m3);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),m3,m1,m2);
+ end if;
+ elif (nb_point = 4) then
+ Ltest := [op(-4,func),op(-3,func),op(-2,func),op(-1,func)];
+ remaining_arg := nops(func)-6;
+ nb_mass := DetermineNumbMass(func);
+ lprint("test1",Ltest,remaining_arg,nb_mass);
+ if (remaining_arg=0) then
+ LZ := [];
+ elif (remaining_arg=1) then
+ LZ := [op(3,func)];
+ elif (remaining_arg=2) then
+ LZ := [op(3,func),op(4,func)];
+ elif (remaining_arg=3) then
+ LZ := [op(3,func),op(4,func),op(5,func)];
+ end if;
+ Lnum := Correspond(Ltest,LCor);
+ m1 := S[op(1,Lnum),op(4,Lnum)];
+ m2 := S[op(1,Lnum),op(2,Lnum)];
+ m3 := S[op(2,Lnum),op(3,Lnum)];
+ m4 := S[op(3,Lnum),op(4,Lnum)];
+ sm := S[op(2,Lnum),op(4,Lnum)];
+ tm := S[op(1,Lnum),op(3,Lnum)];
+ if (nb_mass = QuatrePointZeroMass) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m2,m3,m4,m1);
+ elif (nb_mass = QuatrePointUneMass) then
+ if (m1 <> 0) then
+ LZ := Change(3,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m2,m3,m4,m1);
+ elif (m2 <> 0) then
+ LZ := Change(2,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m3,m4,m1,m2);
+ elif (m3 <> 0) then
+ LZ := Change(1,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m4,m1,m2,m3);
+ elif (m4 <> 0) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m1,m2,m3,m4);
+ end if;
+ elif (nb_mass = QuatrePointDeuxMass_Adj) then
+ if ((m1 = 0) and (m4 = 0)) then
+ LZ := Change(1,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m4,m1,m2,m3);
+ elif ((m2 = 0) and (m3 = 0)) then
+ LZ := Change(3,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m2,m3,m4,m1);
+ elif ((m3 = 0) and (m4 = 0)) then
+ LZ := Change(2,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m3,m4,m1,m2);
+ elif ((m1 = 0) and (m2 = 0)) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m1,m2,m3,m4);
+ end if;
+ elif (nb_mass = QuatrePointDeuxMass_Opp) then
+ if ((m2 = 0) and (m4 = 0)) then
+ LZ := Change(3,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m2,m3,m4,m1);
+ elif ((m1 = 0) and (m3 = 0)) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m1,m2,m3,m4);
+ end if;
+ elif (nb_mass = QuatrePointTroisMass) then
+ if (m2 = 0) then
+ LZ := Change(3,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m2,m3,m4,m1);
+ elif (m3 = 0) then
+ LZ := Change(2,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m3,m4,m1,m2);
+ elif (m4 = 0) then
+ LZ := Change(1,4,LZ);
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ tm,sm,m4,m1,m2,m3);
+ elif (m1 = 0) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m1,m2,m3,m4);
+ end if;
+ elif (nb_mass = QuatrePointQuatreMass) then
+ res := op(0,func)(op(1,func),op(2,func),seq(i,i= LZ),
+ sm,tm,m1,m2,m3,m4);
+ end if;
+ end if;
+ end if;
+ RETURN(res);
+end proc;
+#
+# ExtractDiv:=proc(func::function)
+# local nb_point,Ltest,Lnum,m1,m2,m3,m4,nb_mass,remaining_arg,LZ,res;
+# if ((op(0,func) = ISca) or (op(0,func) = IScaZ)) then
+# nb_point := op(2,func);
+# if (nb_point = 3) then
+# remaining_arg := nops(func)-5;
+# nb_mass := DetermineNumbMass(func);
+# if (remaining_arg = 0) then
+# if (nb_mass = TroisPointUneMass) then
+# res := H0(op(-1,func),epsilon)/epsilon^2;
+# elif (nb_mass = TroisPointDeuxMass) then
+# res := HD1(op(-1,func),(op(-2,func))/epsilon;
+# end if
+# elif (remaining_arg = 1) then
+# if (nb_mass = TroisPointUneMass) then
+# res := Div[op(3,func),op(-1,func)]
+# elif (nb_mass = TroisPointDeuxMass) then
+# end if
+# elif (remaining_arg = 2) then
+# if (nb_mass = TroisPointUneMass) then
+# elif (nb_mass = TroisPointDeuxMass) then
+# end if
+# elif (remaining_arg = 3) then
+# if (nb_mass = TroisPointUneMass) then
+# elif (nb_mass = TroisPointDeuxMass) then
+# end if
+# end if
+# else
+# ERROR(`only three point function diverge in ExtractDiv`,nb_point);
+# end if;
+# else
+# ERROR(`wrong type of function in ExtractDiv`,func);
+# end if;
+# RETURN(res);
+# end proc;
+#
Index: 95/branches/golem95_without_olo_cmake/tool/cal_hem.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/cal_hem.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/cal_hem.m (revision 119)
@@ -0,0 +1,99 @@
+# -2*S[2,4]*S[1,3]*(3*S[3,4]^2-3*S[3,4]*S[2,4]+S[2,4]^2)*A^2+S[2,4]^2*S[1,3]*(-3*
+# S[3,4]+S[2,4])*(S[1,3]-S[3,4])*A-2*S[2,4]^3*(S[1,3]-S[3,4])^2*S[1,3]
+NC[1,2]:= -2*S[2,4]*S[1,3]*(3*S[3,4]^2-3*S[3,4]*S[2,4]+S[2,4]^2);
+NC[1,1]:= S[2,4]^2*S[1,3]*(-3*S[3,4]+S[2,4])*(S[1,3]-S[3,4]);
+NC[1,0]:= -2*S[2,4]^3*(S[1,3]-S[3,4])^2*S[1,3];
+# DC[1] := 24*(S[1,2]-S[2,4])^2*S[3,4]^2;
+DC[1] := 24*S[3,4]^2;
+#
+# -S[2,4]^2*S[1,3]*(-3*S[3,4]+S[2,4])*A^2-S[2,4]^3*S[1,3]*(S[2,4]-S[3,4])*A+2*S[2
+# ,4]^4*(S[1,3]-S[3,4])*S[1,3]
+NC[2,2]:= -S[2,4]^2*S[1,3]*(-3*S[3,4]+S[2,4]);
+NC[2,1]:= -S[2,4]^3*S[1,3]*(S[2,4]-S[3,4]);
+NC[2,0]:= 2*S[2,4]^4*(S[1,3]-S[3,4])*S[1,3];
+# DC[2] := 8*(S[1,2]-S[2,4])^2*S[1,2]*S[3,4]^2;
+DC[2] := 8*S[1,2]*S[3,4]^2;
+#
+# S[2,4]*(-4*S[3,4]+S[2,4])*A^2+S[2,4]^2*(S[2,4]+S[1,3]-2*S[3,4])*A-2*(S[1,3]-S[3
+# ,4])*S[2,4]^3
+NC[3,2]:= S[2,4]*(-4*S[3,4]+S[2,4]);
+NC[3,1]:= S[2,4]^2*(S[2,4]+S[1,3]-2*S[3,4]);
+NC[3,0]:= -2*(S[1,3]-S[3,4])*S[2,4]^3;
+# DC[3] := 24*(S[1,2]-S[2,4])^2*S[1,2]*S[3,4]^2;
+DC[3] := 24*S[1,2]*S[3,4]^2;
+#
+# hem := (n,m,A,B,C,D) -> Int(y^(n-1)/(A*y+B*(1-y))^m/(C*y+D*(1-y)),y=0..1);
+# he := (n,A,B) -> Int(y^(n-1)/(A*y+B*(1-y)),y=0..1);
+hem := (n,m,A,B,C,D) -> y^(n-1)/(A*y+B*(1-y))^m/(C*y+D*(1-y));
+he := (n,A,B) -> y^(n-1)/(A*y+B*(1-y));
+#
+# partie en A^0
+#
+res[0] := t[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +t[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +t[3];
+nres[0]:=numer(res[0]);
+nres[0]:=subs(S[1,2]=S[2,4]+A,nres[0]);
+nres1[0]:=coeff(nres[0],A,1);
+nres0[0]:=coeff(nres[0],A,0);
+nres[0]:=collect(nres0[0],y,factor);
+dres[0]:=denom(res[0]);
+quit;
+#
+# partie en A^0
+#
+res[0] := NC[1,0]/DC[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +NC[2,0]/DC[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +NC[3,0]/DC[3];
+nres[0]:=numer(res[0]);
+nres[0]:=subs(S[1,2]=S[2,4]+A,nres[0]);
+nres1[0]:=coeff(nres[0],A,1);
+nres0[0]:=coeff(nres[0],A,0);
+nres[0]:=collect(nres0[0],y,factor);
+dres[0]:=denom(res[0]);
+#
+res[1] := NC[1,1]/DC[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +NC[2,1]/DC[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +NC[3,1]/DC[3];
+w0:=((S[1,2]-S[2,4])*nres1[0]+nres0[0]*y*S[1,3]*(S[1,2]-S[2,4])/S[1,2]/(S[1,3]*y+S[3,4]*(1-y)))/dres[0]+res[1]*(S[1,2]-S[2,4]):
+# factor(w0);
+w1:=factor(w0/(S[1,2]-S[2,4]));
+nw1:=subs(S[1,2]=S[2,4]+A,numer(w1));
+dw1:=denom(w1);
+nw12:=coeff(nw1,A,2);
+nw11:=coeff(nw1,A,1);
+nw10:=coeff(nw1,A,0);
+# w1:=collect(numer(w0)/(S[1,2]-S[2,4]),y,factor);
+# w1:=subs(S[1,2]=S[2,4],w1);
+nw12:=collect(numer(nw12),y,factor);
+nw11:=collect(numer(nw11),y,factor);
+nw10:=collect(numer(nw10),y,factor);
+#
+quit;
+res[2] := NC[1,2]/DC[1]*hem(4,1,S[1,3]*S[2,4],S[1,2]*S[3,4],S[1,3],S[3,4])
+ +NC[2,2]/DC[2]*he(3,S[1,3]*S[2,4],S[1,2]*S[3,4])
+ +NC[3,2]/DC[3];
+q0:=(nw12*(S[1,2]-S[2,4])^2+nw11*(S[1,2]-S[2,4])+nw10*y*S[1,3]*(S[1,2]-S[2,4])/S[1,2]/(S[1,3]*y+S[3,4]*(1-y)))/dw1+res[2]*(S[1,2]-S[2,4]):
+factor(q0);
+quit;
+w2:=nw10/subs(S[1,2]=S[2,4],dw1);
+u:=numer(w2);
+du:=factor(diff(numer(w2),y));
+collect(du,y,factor);
+dv:=1/denom(w2);
+v:=int(dv,y);
+factor(subs(y=1,u*v)-subs(y=0,u*v));
+# factor(int(du*v,y=0..1));
+#
+Digits := 15;
+#
+# S[1,2] := -67.01;
+# S[1,3] := -110;
+# S[2,4] := -200;
+# S[3,4] := (S[2,4]+S[1,3]-S[1,2])+0.1;
+S[1,2] := 2;
+S[1,3] := 1;
+S[2,4] := 5;
+S[3,4] := 4;
+#
+int(w2,y=0..1);
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r1.m (revision 119)
@@ -0,0 +1,66 @@
+#
+# rang 1
+#
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+# l1 := 3;
+F := unapply(L_z[l1],x,y);
+result_div2[l1] := 1/C/2*F(0,0);
+result_dv1a := -ln(-C)/C/2*F(0,0);
+result_dv1b := -1/C*(F(0,y)-F(0,0))/y;
+result_dv1c := 1/2*1/x*(F(x,0)/(-C+B*x)-F(0,0)/(-C));
+result_dv1 := -(result_dv1a + factor(result_dv1b) + factor(result_dv1c) );
+result_dv1 := applyrule(y^n::integer*(A::anything+B::anything*x)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(result_dv1));
+result_dv1 := applyrule(1/(A::anything+B::anything*x)='I_sur_y(0,1,A,B)',result_dv1);
+result_dv1 := int(result_dv1,y=0..1);
+result_dv1 := subs(B=m3s+C,result_dv1);
+result_div1[l1] := collect(result_dv1,[Li2,ln],factor);
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+terma1 := 1/(2*x)*ln(-C+B*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+terma2 := 1/(2*x)*F(0,0)/(-C)*ln(1-D*x) ;
+termb := ln(x)/(2*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+termc := 2/(-C)*ln(y)/y*(F(0,y)-F(0,0));
+term3 := (F(x,y)/(-C+B*x)-F(x,0)/(-C+B*x)-F(0,y)/(-C)+F(0,0)/(-C))/(x*y);
+term4 := 1/4*F(0,0)*ln(-C)^2/(-C);
+term5 := (F(0,y)-F(0,0))/y*ln(-C)/(-C);
+#
+I4_3p1m_1mi := -(factor(terma1) + terma2 + factor(termb) + factor(termc) + factor(term3) + term4 + factor(term5) );
+I4_3p1m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)*(C::anything+B::anything*x)^(-1)='L_log(0,0,1,C,B)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(1-D::anything*x)*(x)^(-1)=-Li2(D),I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule((C::anything+D::anything*x)^(m::negint) = 'I_sur_y(0,-m,C,D)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := subs(D=(m3s+C)/C,B=m3s+C,I4_3p1m_1mi);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-1)=he_c(1,C,-m3s)+ln(m3s)/(m3s+C),I4_3p1m_1mi);
+result2[l1] := factor(I4_3p1m_1mi);
+#
+end do;
+# quit;
+#
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2[l1]):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
Index: 95/branches/golem95_without_olo_cmake/tool/matrix5.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/matrix5.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/matrix5.m (revision 119)
@@ -0,0 +1,70 @@
+with(linalg);
+# only with one external mass or zero external mass
+Sa:=matrix(5,5,[
+0,0,S[1,3],S[1,4],0,
+0,0,0,S[2,4],S[2,5],
+S[1,3],0,0,0,S[3,5],
+S[1,4],S[2,4],0,0,S[4,5],
+0,S[2,5],S[3,5],S[4,5],0] );
+set5 := {1,2,3,4,5};
+#
+#
+# on calcule les b5
+Un5:=vector([1,1,1,1,1]);
+B5M:=linsolve(Sa,Un5);
+InvSa:=inverse(Sa);
+Determi5 := det(Sa);
+for i from 1 to 5 do
+ b5(i,{}) := B5M[i];
+end do;
+for i from 1 to 5 do
+ for j from 1 to 5 do
+ InvS5(i,j,{}) := factor(InvSa[i,j]*Determi5);
+ end do:
+end do:
+invs5 := evalm(InvSa*Determi5);
+b5 := evalm(B5M*Determi5);
+sumb5 := factor(b5[1]+b5[2]+b5[3]+b5[4]+b5[5]);
+#
+# on calcul les b4
+Un4:=vector([1,1,1,1]);
+for ic from 1 to 5 do
+ set4 := set5 minus {ic};
+ Sa||ic:=delcols(delrows(Sa,ic..ic),ic..ic);
+ factor(det(Sa||ic));
+ B4M||ic:=linsolve(Sa||ic,Un4);
+ InvSa||ic:=inverse(Sa||ic);
+ for j from 1 to 4 do
+ vj := set4[j];
+ b4(vj,{ic}) := B4M||ic[j];
+ for k from 1 to 4 do
+ vk := set4[k];
+ InvS4(vj,vk,{ic}):=InvSa||ic[j,k]
+ end do;
+ end do;
+end do;
+#
+# b4[1][2];
+# b4;
+# quit;
+with(CodeGeneration);
+Fortran(Determi5,resultname="dets");
+Fortran(invs5,declare=[S::float]);
+Fortran(b5,declare=[S::float]);
+# Fortran(sumb5,declare=[S::float],resultname="dets");
+for ic from 1 to 5 do
+ set4 := set5 minus {ic};
+ for j from 1 to 4 do
+ vj := set4[j]:
+ printf("b4(%d,%d) =\n",vj,ic);
+ Fortran(b4(vj,{ic}),declare=[S::float]);
+ for k from 1 to 4 do
+ vk := set4[k];
+ printf("invs4(%d,%d,%d) =\n",vj,vk,ic);
+ Fortran(InvS4(vj,vk,{ic}));
+ end do;
+ end do;
+end do;
+quit;
+
+
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par.m (revision 119)
@@ -0,0 +1,220 @@
+# # integral du type \int^1_0 dy y^n/(A+B*y)
+# I_sur_y:=proc(n::integer,A,B)
+# local temp;
+# if (n = 0) then
+# temp := (ln(A+B)-ln(A))/B;
+# else
+# temp := 1/(B*n)-A/B*I_sur_y(n-1,A,B);
+# end if;
+# return temp;
+# end proc;
+# integral du type \int^1_0 dy y^n/(A+B*y)^m
+I_sur_y:=proc(n::integer,m::integer,A,B)
+ local temp;
+ if (m = 1) then
+ if (n = 0) then
+ temp := (ln(A+B)-ln(A))/B;
+ else
+ temp := 1/(B*n)-A/B*I_sur_y(n-1,1,A,B);
+ end if;
+ elif (m > 1) then
+ if (n = 0) then
+ temp := -(1/(A+B)^(m-1) - 1/A^(m-1))/B/(m-1);
+ else
+ temp := -1/(B*(m-1)*(A+B)^(m-1))+n/(m-1)/B*I_sur_y(n-1,m-1,A,B);
+ end if;
+ else
+ return 'procname (args)';
+ end if;
+ return temp;
+end proc;
+#
+# integral du type \int^1_0 dx x^n*ln(A+B*x)
+I_log:=proc(n::integer,A,B)
+ local temp;
+ if (A = 0) then
+ if (n = 0) then
+# error "la valeur de A et n sont incompatibles :%1 %2";
+ temp := ( B*ln(B) - B )/B;
+ else
+ temp := B*ln(B)/(n+1)/B - 1/(n+1)^2;
+ end if;
+ elif (A = -B) then
+ temp := add((-1)^i*binomial(n,i)*I_log(i,0,1),i=0..n);
+ else
+ if (n = 0) then
+ temp := ( (A+B)*ln(A+B) - A*ln(A) -B )/B;
+ else
+ temp := ( (A+B)*ln(A+B)-n*A*I_log(n-1,A,B) )/((n+1)*B) - 1/(n+1)^2;
+ end if;
+ end if;
+ return temp;
+end proc;
+# integral du type \int^1_0 dx ln(A+B*x)/(A+B*x)/(A+C+B*x)^n+1
+K_log:=proc(n::integer,A,B,C)
+ local temp;
+ if (n = 0) then
+ temp := ln(-C)*I_sans_log(0,A,B,C)-1/B/C*(Li2((A+C+B)/(A+B))-Li2((A+C)/A));
+ else
+ temp := 1/C*(K_log(n-1,A,B,C)-J_log(n,A,B,C));
+ end if;
+ return temp;
+end proc;
+#
+# integral du type \int^1_0 dx ln(A+B*x)/(A+C+B*x)^n+1
+J_log:=proc(n::integer,A,B,C)
+ local temp;
+ if (n = 0) then
+ if (C = 0) then
+ temp := 1/2*(ln(A+B)^2-ln(A)^2)/B;
+ else
+ temp := HF1(A+B,A)-C*K_log(0,A,B,C);
+ end if;
+ else
+ temp := -1/(n*B)*(ln(A+B)/(A+C+B)^n-ln(A)/(A+C)^n)+1/n*I_sans_log(n-1,A,B,C);
+ end if;
+ return temp;
+end proc;
+#
+# # integral du type \int^1_0 dx ln(x)/(A+B*x)
+# # L_log:=proc(n::integer,A,B,C)
+# L_log:=proc(A,B)
+# local temp;
+# temp := Li2(-B/A)/B;
+# return temp;
+# end proc;
+# integral du type \int^1_0 dx x ln(A+B*x)/(C+D*x)^(n+1)
+L_log:=proc(n::integer,A,B,C,D)
+ local temp;
+ if (n = 0) then
+ if (A = 0) then
+ temp := ( Li2(-D/C) + ln(B)*ln((C+D)/C) )/D;
+ elif (C = 0) then
+ return 'procname (args)';
+ else
+ temp := ( Li2(D*(A+B)/(D*A-C*B)) - Li2(D*A/(D*A-C*B))
+ + ln(A+B)*ln(-B*(C+D)/(D*A-C*B)) - ln(A)*ln(-B*C/(D*A-C*B))
+ )/D;
+ end if;
+ elif (n = 1) then
+ if (C = 0) then
+ temp := ( I_log(0,A,B) )/D;
+ else
+ temp := ( I_log(0,A,B) - C*L_log(0,A,B,C,D) )/D;
+ end if;
+ end if;
+ return temp;
+end proc;
+
+#
+# integral du type \int^1_0 dx 1/(A+B*x)/(A+C+B*x)^(n+1)
+I_sans_log:=proc(n::integer,A,B,C)
+ local temp;
+ if (n = 0) then
+# temp := 1/B/C*(ln((A+B)/A)-ln((A+C+B)/(A+C)));
+ temp := 1/B/C*(ln(A+B)-ln(A)-ln(A+C+B)+ln(A+C));
+ else
+ temp := 1/C*(I_sans_log(n-1,A,B,C)+1/(n*B)*(1/(A+C+B)^n-1/(A+C)^n));
+ end if;
+ return temp;
+end proc;
+#
+rat_part:=proc(exp)
+ local truc;
+ truc:=exp;
+ truc:=applyrule(zdilog(A::anything)=0,truc):
+ truc:=applyrule(z_log(A::anything)=0,truc):
+ truc:=applyrule(z_log2(A::anything)=0,truc):
+ truc:=applyrule(he_c(1,B::anything,C::anything)=0,truc):
+ truc:=applyrule(he_c(n::integer,B::anything,C::anything)=1/(n-1)/(B-C),truc):
+ truc:=factor(truc):
+ return(truc);
+end proc;
+#
+# \int^1_0 dx x^n (1-x)^m x^{-2+2*epsilon} = B(n+1-2+2 \epsilon,m+1)
+# a = n+1 et b = m+1
+Beta_x := proc(a::integer,b::integer)
+ local t1,t2,den,res;
+ t1 := a-2+2*epsilon;
+ t2 := b;
+ den := mul(t1+t2-i,i=1..b);
+ res := factorial(t2-1)/den;
+ res := factor(res*epsilon);
+ res := convert(taylor(res,epsilon=0,3),polynom);
+ res := expand(res/epsilon);
+ return(res);
+end proc;
+#
+# \int^1_0 dy y^n (1-y)^m y^{-1+2*epsilon} = B(n+1-1+2 \epsilon,m+1)
+# a = n+1 et b = m+1
+Beta_y := proc(a::integer,b::integer)
+ local t1,t2,den,res;
+ t1 := a-1+2*epsilon;
+ t2 := b;
+ den := mul(t1+t2-i,i=1..b);
+ res := factorial(t2-1)/den;
+ res := factor(res*epsilon);
+ res := convert(taylor(res,epsilon=0,3),polynom);
+ res := expand(res/epsilon);
+ return(res);
+end proc;
+#
+########################## I_4^6 #############################################
+# rang 0
+# $include "integ_Feyn_par_3p0m_1mi_4d_r0.m";
+# $include "integ_Feyn_par_3p1m_1mi_4d_r0.m";
+# $include "integ_Feyn_par_3p2m_1mi_4d_r0.m";
+# $include "integ_Feyn_par_4m_6d_r0.m";
+# $include "integ_Feyn_par_3m_6d_r0.m";
+# $include "integ_Feyn_par_2madj_6d_r0.m";
+# $include "integ_Feyn_par_2madj_3mi_6d_r0.m";
+# $include "integ_Feyn_par_2mopp_6d_r0.m";
+# $include "integ_Feyn_par_1m_6d_r0.m";
+# $include "integ_Feyn_par_3p3m_4d_r0.m";
+# rang 1
+# $include "integ_Feyn_par_3p0m_1mi_4d_r1.m";
+# $include "integ_Feyn_par_3p1m_1mi_4d_r1.m";
+# $include "integ_Feyn_par_3p2m_1mi_4d_r1.m";
+# $include "integ_Feyn_par_3m_6d_r1.m";
+# $include "integ_Feyn_par_2madj_6d_r1.m";
+# $include "integ_Feyn_par_2mopp_6d_r1.m";
+# $include "integ_Feyn_par_1m_6d_r1.m";
+# $include "integ_Feyn_par_3p3m_4d_r1.m";
+# rang 2
+# $include "integ_Feyn_par_3p0m_1mi_4d_r2.m";
+# $include "integ_Feyn_par_3p1m_1mi_4d_r2.m";
+# $include "integ_Feyn_par_3p2m_1mi_4d_r2.m";
+# $include "integ_Feyn_par_3m_6d_r2.m";
+# $include "integ_Feyn_par_2madj_6d_r2.m";
+# $include "integ_Feyn_par_2mopp_6d_r2.m";
+# $include "integ_Feyn_par_1m_6d_r2.m";
+# $include "integ_Feyn_par_3p3m_4d_r2.m";
+# rang 3
+# $include "integ_Feyn_par_3p0m_1mi_4d_r3.m";
+# $include "integ_Feyn_par_3p1m_1mi_4d_r3.m";
+# $include "integ_Feyn_par_3p2m_1mi_4d_r3.m";
+# $include "integ_Feyn_par_3m_6d_r3.m";
+# $include "integ_Feyn_par_2madj_6d_r3.m";
+# $include "integ_Feyn_par_2mopp_6d_r3.m";
+# $include "integ_Feyn_par_1m_6d_r3.m";
+# $include "integ_Feyn_par_3p3m_4d_r3.m";
+########################## I_4^8 #############################################
+# rang 0
+# $include "integ_Feyn_par_3p0m_1mi_6d_r0.m";
+# $include "integ_Feyn_par_3p1m_1mi_6d_r0.m";
+# $include "integ_Feyn_par_3p2m_1mi_6d_r0.m";
+# $include "integ_Feyn_par_3m_8d_r0.m";
+# $include "integ_Feyn_par_2madj_8d_r0.m";
+# $include "integ_Feyn_par_2mopp_8d_r0.m";
+# $include "integ_Feyn_par_1m_8d_r0.m";
+# $include "integ_Feyn_par_3p3m_6d_r0.m";
+# rang 1
+# $include "integ_Feyn_par_3p0m_1mi_6d_r1.m";
+$include "integ_Feyn_par_3p1m_1mi_6d_r1.m";
+# $include "integ_Feyn_par_3p2m_1mi_6d_r1.m";
+# $include "integ_Feyn_par_3m_8d_r1.m";
+# $include "integ_Feyn_par_2madj_8d_r1.m";
+# $include "integ_Feyn_par_2mopp_8d_r1.m";
+# $include "integ_Feyn_par_1m_8d_r1.m";
+# $include "integ_Feyn_par_3p3m_6d_r1.m";
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r3.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r3.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_4d_r3.m (revision 119)
@@ -0,0 +1,84 @@
+#
+# rang 1
+#
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+# l2 := 1;
+# l3 := 3;
+F := unapply(L_z[l1]*L_z[l2]*L_z[l3],x,y);
+result_div2[l1,l2,l3] := 1/C/2*F(0,0);
+result_dv1a := -ln(-C)/C/2*F(0,0);
+result_dv1b := -1/C*(F(0,y)-F(0,0))/y;
+result_dv1c := 1/2*1/x*(F(x,0)/(-C+B*x)-F(0,0)/(-C));
+result_dv1 := -(result_dv1a + factor(result_dv1b) + factor(result_dv1c) );
+result_dv1 := applyrule(y^n::integer*(A::anything+B::anything*x)^m::negint='I_sur_y(n,-m,A,B)',
+ expand(result_dv1));
+result_dv1 := applyrule(1/(A::anything+B::anything*x)='I_sur_y(0,1,A,B)',result_dv1);
+result_dv1 := int(result_dv1,y=0..1);
+result_dv1 := subs(B=m3s+C,result_dv1);
+result_div1[l1,l2,l3] := collect(result_dv1,[Li2,ln],factor);
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+terma1 := 1/(2*x)*ln(-C+B*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+terma2 := 1/(2*x)*F(0,0)/(-C)*ln(1-D*x) ;
+termb := ln(x)/(2*x)*(F(x,0)/(-C+B*x)-F(0,0)/(-C)) ;
+termc := 2/(-C)*ln(y)/y*(F(0,y)-F(0,0));
+term3 := (F(x,y)/(-C+B*x)-F(x,0)/(-C+B*x)-F(0,y)/(-C)+F(0,0)/(-C))/(x*y);
+term4 := 1/4*F(0,0)*ln(-C)^2/(-C);
+term5 := (F(0,y)-F(0,0))/y*ln(-C)/(-C);
+#
+I4_3p1m_1mi := -(factor(terma1) + terma2 + factor(termb) + factor(termc) + factor(term3) + term4 + factor(term5) );
+I4_3p1m_1mi := applyrule(ln(A::anything+B::anything*x)*(C::anything+B::anything*x)^n::negint='J_log(-n-1,A,B,C-A)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)*(C::anything+B::anything*x)^(-1)='L_log(0,0,1,C,B)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(1-D::anything*x)*(x)^(-1)=-Li2(D),I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(x^n::integer*(C::anything+D::anything*x)^(m::negint) = 'I_sur_y(n,-m,C,D)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule((C::anything+D::anything*x)^(m::negint) = 'I_sur_y(0,-m,C,D)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := int(I4_3p1m_1mi,y=0..1);
+I4_3p1m_1mi := subs(D=(m3s+C)/C,B=m3s+C,I4_3p1m_1mi);
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-3)=(he_c(3,C,-m3s)-m3s/(m3s+C)^2-1/2/(m3s+C))/m3s^2+ln(m3s)/(m3s+C)^3,I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-2)=(he_c(2,C,-m3s)-1/(m3s+C))/m3s+ln(m3s)/(m3s+C)^2,I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-1)=he_c(1,C,-m3s)+ln(m3s)/(m3s+C),I4_3p1m_1mi);
+result2[l1,l2,l3] := factor(I4_3p1m_1mi);
+#
+end do;
+end do;
+end do;
+# quit;
+#
+#
+#
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+for l2 from l1 to 3 do
+for l3 from l2 to 3 do
+# l1 := 1;
+ fprintf(fd,"case(%d,%d,%d)\n",l1,l2,l3);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1,l2,l3]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc2:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div2[l1,l2,l3]):
+ trucp2:=rat_part(truc2):
+ fprintf(fd,"c_temp_d2 = %a\n",truc2);
+ fprintf(fd,"c_temp_d2_rat = %a\n",trucp2);
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1,l2,l3]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
+end do;
+end do;
+#
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_6d_r1.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_6d_r1.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_3p1m_1mi_6d_r1.m (revision 119)
@@ -0,0 +1,53 @@
+#
+# rang 1
+#
+L_z := [(1-x)*y,1-y,x*y];
+#
+for l1 from 1 to 3 do
+# l1 := 3;
+F := unapply(L_z[l1],x,y);
+result_dv1 := -y*F(x,y);
+result_dv1 := int(result_dv1,x=0..1);
+result_dv1 := int(result_dv1,y=0..1);
+result_div1[l1] := collect(result_dv1,[Li2,ln],factor);
+# result_div1 := applyrule(ln(-C)*C^(-1)=h0e(C),expand(result_dv1));
+# C = p1^2-m3^2
+# B = m3^2 + C
+# D = (m3s+C)/C
+term1 := -y*F(x,y)*ln(x) ;
+term2 := -2*y*F(x,y)*ln(y) ;
+term3 := -y*F(x,y)*ln(-C+B*x);
+I4_3p1m_1mi := -(term1 + term2 + term3);
+I4_3p1m_1mi := applyrule(x^n::integer*ln(A::anything+B::anything*x)='I_log(n,A,B)',expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule(ln(A::anything+B::anything*x)='I_log(0,A,B)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(y)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(x)='I_log(0,0,1)',I4_3p1m_1mi);
+I4_3p1m_1mi := int(I4_3p1m_1mi,y=0..1);
+I4_3p1m_1mi := int(I4_3p1m_1mi,x=0..1);
+I4_3p1m_1mi := subs(D=(m3s+C)/C,B=m3s+C,I4_3p1m_1mi);
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-2)=(he_c(2,C,-m3s)-1/(m3s+C))/m3s+ln(m3s)/(m3s+C)^2,expand(I4_3p1m_1mi));
+I4_3p1m_1mi := applyrule(ln(-C)*(m3s+C)^(-1)=he_c(1,C,-m3s)+ln(m3s)/(m3s+C),expand(I4_3p1m_1mi));
+I4_3p1m_1mi := collect(I4_3p1m_1mi,[Li2,ln],factor);
+result2[l1] := I4_3p1m_1mi;
+#
+end do;
+# quit;
+#
+#
+fd:=fopen("test.res",WRITE);
+for l1 from 1 to 3 do
+ fprintf(fd,"case(%d)\n",l1);
+ truc1:=applyrule(ln(A::anything)^(2)=z_log2(A),result2[l1]):
+ truc1:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,truc1):
+ trucp1:=rat_part(truc1):
+ truc3:=subs(C = s13, ln = z_log, Li2 = zdilog,
+ m3s = m3_sq,result_div1[l1]):
+ trucp3:=rat_part(truc3):
+ fprintf(fd,"c_temp_d1 = %a\n",truc3);
+ fprintf(fd,"c_temp_d1_rat = %a\n",trucp3);
+ fprintf(fd,"c_temp = %a\n",truc1);
+ fprintf(fd,"c_temp_rat = %a\n",trucp1);
+end do;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r0.m (revision 119)
@@ -0,0 +1,114 @@
+I6_4p2madj := x/(A+B*y);
+#
+I6_4p2madj := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2madj));
+I6_4p2madj := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2madj);
+#
+I6_4p2madj := I6_4p2madj;
+I6_4p2madj := algsubs(A+B=C+D*x,I6_4p2madj,exact);
+I6_4p2madj := subs(A=C+F*x,B=x*G,I6_4p2madj);
+I6_4p2madj := expand(I6_4p2madj);
+# C = (1-z)*s13
+# F = z*s24+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = (1-z)*(z*s23-s13)
+I6_4p2madj := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2madj);
+I6_4p2madj := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2madj);
+I6_4p2madj := expand(int(I6_4p2madj,x=0..1));
+I6_4p2madj := I6_4p2madj;
+#
+reste := I6_4p2madj:
+result := 0;
+set_ln := indets(I6_4p2madj,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2madj,func,1));
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ end if;
+ result := result + ctemp*func;
+# reste := factor(reste-ctemp*func);
+end do:
+result;
+# reste:=algsubs(D-F=G,numer(reste),exact)/denom(reste);
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(CP+DP=HP,result,exact);
+result := algsubs(C+F=E,result,exact);
+result := algsubs(CP-z*CP+F=E,result,exact);
+#
+result1[l1] := result;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = (1-z)*s13\n");
+fprintf(fd,"f_var = z*(s24)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*(1-z)*s23-(1-z)*s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*(1-z)*s23\n");
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),CP = c_var,F = f_var,
+ G = g_var,DP = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ HP = h_var,-result1[l1]):
+# truc1:=subs(ln(C) = ln(1-z)+z_log(s13),C = c_var,F = f_var,
+# G = g_var,D = d_var,
+# E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+# H = h_var,-result1[l1]):
+ mach1 := factor(subs(z=1,g_var=-f_var,h_var=c_var+d_var,coeff(truc1,ln(1-z),1)));
+fprintf(fd,"fg = %a\n",truc1);
+#
+# pole pour F=0
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c1 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1));
+ c0 := subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d1):
+ dtot := factor(subs(z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ res_fin := w12*z_log(t1*s23/t2^2)
+ - tq1*q(1,(t2*t3-t1*s23)/t2/t3,sign_arg);
+ res_fin := res_fin/t2;
+# fprintf(fd,"residue1 = %a\n",res_fin);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin));
+close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/tool/ch_var.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/ch_var.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/ch_var.m (revision 119)
@@ -0,0 +1,22 @@
+with(linalg);
+z1 := w*(1-xp)*yp;
+z2 := w*(1-xp)*(1-yp)*zp;
+z3 := w*(1-xp)*(1-yp)*(1-zp);
+z4 := w*xp;
+#
+verif := factor(z1+z2+z3+z4);
+#
+Mat := matrix(4,4,[
+diff(z1,w),diff(z1,xp),diff(z1,yp),diff(z1,zp),
+diff(z2,w),diff(z2,xp),diff(z2,yp),diff(z2,zp),
+diff(z3,w),diff(z3,xp),diff(z3,yp),diff(z3,zp),
+diff(z4,w),diff(z4,xp),diff(z4,yp),diff(z4,zp) ] );
+jacob := factor(subs(w=1,det(Mat)));
+form_quad := factor(subs(w=1,z2*z4*s+z1*z3*t+z1*z4*m1^2));
+res := jacob*form_quad^n;
+res :=subs(xp=x,yp=y/(1-x),zp=z/(1-x-y),res);
+res := factor(res);
+z1 := factor(subs(w=1,xp=x,yp=y/(1-x),zp=z/(1-x-y),z1));
+z2 := factor(subs(w=1,xp=x,yp=y/(1-x),zp=z/(1-x-y),z2));
+z3 := factor(subs(w=1,xp=x,yp=y/(1-x),zp=z/(1-x-y),z3));
+z4 := factor(subs(w=1,xp=x,yp=y/(1-x),zp=z/(1-x-y),z4));
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r2.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r2.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_6d_r2.m (revision 119)
@@ -0,0 +1,189 @@
+#
+# rang 2
+L_z := [1-x,x*y*z,x*y*(1-z),x*(1-y)];
+for l1 from 1 to 4 do
+for l2 from l1 to 4 do
+# l1 := 1;
+# l2 := 4;
+I6_4p2madj := x/(A+B*y)*L_z[l1]*L_z[l2];
+#
+I6_4p2madj := applyrule(y^n::integer/(A::symbol+B::symbol*y)='I_sur_y(n,A,B)',
+ expand(I6_4p2madj));
+I6_4p2madj := applyrule(1/(A::symbol+B::symbol*y)='I_sur_y(0,A,B)',I6_4p2madj);
+#
+I6_4p2madj := I6_4p2madj;
+I6_4p2madj := algsubs(A+B=C+D*x,I6_4p2madj,exact);
+I6_4p2madj := subs(A=C+F*x,B=x*G,I6_4p2madj);
+I6_4p2madj := expand(I6_4p2madj);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I6_4p2madj := applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I6_4p2madj);
+I6_4p2madj := applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I6_4p2madj);
+I6_4p2madj := expand(int(I6_4p2madj,x=0..1));
+I6_4p2madj := I6_4p2madj;
+#
+reste := I6_4p2madj:
+result := 0;
+set_ln := indets(I6_4p2madj,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(C)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(C+D)) then
+ ctemp := coeff(I6_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I6_4p2madj,func,1));
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,reste);
+reste:=factor(reste):
+reste:=expand(reste);
+# factor(subs(z=1,reste));
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(CP+DP=HP,result,exact);
+result := algsubs(C+F=E,result,exact);
+result := algsubs(CP-z*CP+F=E,result,exact);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+result1[l1,l2] := result;
+# result1[l1,l2] := collect(subs(G=D-F,result1[l1,l2]),[ln(C),ln(H),ln(E)],factor);
+result1[l1,l2] := collect(result1[l1,l2],[ln(C),ln(H),ln(E)],factor);
+end do:
+end do:
+# quit;
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = s13\n");
+fprintf(fd,"f_var = z*(s24)+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*s23-s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*s23\n");
+fprintf(fd,"select case(par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(par4)\n");
+for l2 from l1 to 4 do
+# l1 := 1;
+ fprintf(fd,"case(%d)\n",l2);
+ truc1:=subs(ln(C) = ln(1-z)+z_log(s13),CP = c_var,F = f_var,
+ G = g_var,DP = d_var,
+ E = e_var,ln(H) = ln(z)+ln(1-z)+z_log(s23),
+ HP = h_var,-result1[l1,l2]):
+ mach1 := factor(subs(z=1,g_var=-f_var,h_var=c_var+d_var,coeff(truc1,ln(1-z),1)));
+ truc1 := algsubs(1-z=umz,truc1):
+ fprintf(fd,"fg = %a\n",truc1);
+end do;
+fprintf(fd,"end select\n");
+end do;
+fprintf(fd,"end select\n");
+close(fd);
+quit;
+#
+# pole pour F=0
+fd:=fopen("test.res",APPEND);
+fprintf(fd,"select case(glob_par3)\n");
+for l1 from 1 to 4 do
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"select case(glob_par4)\n");
+for l2 from l1 to 4 do
+# l1 := 3;
+# l2 := 3;
+ expr := result1[l1,l2];
+ deg := -ldegree(expr,F);
+ c5 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-5)));
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d5 := subs(diff(Cf(z),z,z,z,z)=0,diff(Ff(z),z,z,z,z)=0,
+ diff(Df(z),z,z,z,z)=0,diff(c5,z,z,z,z));
+# d5 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d5));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+# d4 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d4));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d5/24/Fprime^4+d4/6/Fprime^3+d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot)):
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+ # reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(t3/t2),1);
+ w2 := coeff(dresult,ln(t1*s23/t2^2),1);
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(2*(t2*t3-t1*s23)/t2/t3+((t2*t3-t1*s23)/t2/t3)^2));
+ tq2 :=factor(tq1/2+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1,l2] := (w12*z_log(t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^3/t2^3/t3^3)
+ *q(3,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2)/t2;
+ fprintf(fd,"case(%d)\n",l2);
+ close(fd);
+ codegen[fortran](subs(s23=t6,res_fin[l1,l2]),filename="test.res");
+ fd:=fopen("test.res",APPEND);
+# fprintf(fd,"residue1 = %a\n",subs(s23=glob_s23,res_fin[l1,l2]));
+end do:
+fprintf(fd,"end select\n");
+end do:
+fprintf(fd,"end select\n");
+#######################
+# a faire : changer s23 en glob_s23
+#######################
+close(fd);
+#
+# end if;
+quit;
Index: 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_8d_r0.m
===================================================================
--- 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_8d_r0.m (revision 0)
+++ 95/branches/golem95_without_olo_cmake/tool/integ_Feyn_par_2madj_8d_r0.m (revision 119)
@@ -0,0 +1,152 @@
+########################## I_4^8 #############################################
+l1 := 0;
+I8_4p2madj := x^2*y*(ln(x)+ln(y)+ln(A+B*y));
+# I8_4p2madj := x^2*y*(ln(x)+ln(y)+ln(-A-B*y));
+# I8_4p2madj := x^2*y*(ln(x)+ln(y));
+# I8_4p2madj := x^2*y*(ln(A+B*y));
+I8_4p2madj:=applyrule(y^n::integer*ln(A::symbol+B::symbol*y)='I_log(n,A,B)',expand(I8_4p2madj));
+I8_4p2madj:=applyrule(ln(A::symbol+B::symbol*y)='I_log(0,A,B)',I8_4p2madj);
+I8_4p2madj:=applyrule(y^n::integer*ln(y)='I_log(n,0,1)',I8_4p2madj);
+I8_4p2madj:=applyrule(ln(y)='I_log(0,0,1)',I8_4p2madj);
+I8_4p2madj := expand(int(I8_4p2madj,y=0..1));
+#
+I8_4p2madj := algsubs(A+B=C+D*x,I8_4p2madj,exact);
+I8_4p2madj := subs(A=C+F*x,B=x*G,I8_4p2madj);
+I8_4p2madj := expand(I8_4p2madj);
+# C = z*s12+(1-z)*s13
+# F = z*(s24-s12)+(1-z)*(s34-s13)
+# G = z*(1-z)*s23-z*s24-(1-z)*s34
+# D = z*(1-z)*s23-z*s12-(1-z)*s13
+I8_4p2madj:=applyrule(x^n::integer*ln(E::symbol+F::symbol*x)='I_log(n,E,F)',I8_4p2madj);
+I8_4p2madj:=applyrule(ln(E::symbol+F::symbol*x)='I_log(0,E,F)',I8_4p2madj);
+I8_4p2madj:=applyrule(x^n::integer*ln(x)='I_log(n,0,1)',I8_4p2madj);
+I8_4p2madj:=applyrule(ln(x)='I_log(0,0,1)',I8_4p2madj);
+I8_4p2madj := expand(int(I8_4p2madj,x=0..1));
+I8_4p2madj := subs(C=-C,F=-F,G=-G,D=-D,I8_4p2madj);
+#
+reste := I8_4p2madj:
+result := 0;
+set_ln := indets(I8_4p2madj,'specfunc(anything,ln)');
+for func in set_ln do
+ if (func = ln(-C)) then
+ ctemp := coeff(I8_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := factor(ctemp);
+ ctemp := subs(G=D-F,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ elif (func = ln(-C-D)) then
+ ctemp := coeff(I8_4p2madj,func,1);
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(F=D-G,numer(ctemp))/denom(ctemp);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ else
+ ctemp := factor(coeff(I8_4p2madj,func,1));
+ reste := factor(reste-ctemp*func);
+ ctemp := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,ctemp);
+ ctemp := factor(ctemp);
+ end if;
+ result := result + ctemp*func;
+end do:
+result;
+reste:=subs(F=D-G,numer(reste))/denom(reste):
+reste := subs(C=(1-z)*CP,H=(1-z)*HP,D=(1-z)*DP,reste);
+reste:=factor(reste):
+reste:=expand(reste);
+result := result+reste;
+result := algsubs(C+D=H,result,exact);
+result := algsubs(CP+DP=HP,result,exact);
+result := algsubs(C+F=E,result,exact);
+result := algsubs(CP-z*CP+F=E,result,exact);
+#
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+# result := algsubs(1/G/D=1/F/G-1/F/D,result,exact);
+#
+# separation
+result1[l1] := result;
+# result1[l1] := collect(result1[l1],[ln(-C),ln(-H),ln(-E)],factor);
+# pour le programme fortran
+fd:=fopen("test.res",WRITE);
+fprintf(fd,"c_var = s13\n");
+fprintf(fd,"f_var = z*s24+(1-z)*(s34-s13)\n");
+fprintf(fd,"g_var = z*(1-z)*s23-z*s24-(1-z)*s34\n");
+fprintf(fd,"d_var = z*s23-s13\n");
+fprintf(fd,"e_var = z*s24+(1-z)*s34\n");
+fprintf(fd,"h_var = z*s23\n");
+truc1:=subs(ln(-C) = ln(1-z)+z_log(-s13),CP = c_var,F = f_var,
+ G = g_var,DP = d_var,
+ E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+ HP = h_var,-result1[l1]):
+# truc1 := algsubs(1-z=umz,truc1,exact):
+# truc1 := algsubs(1-z=umz,truc1):
+# truc1:=subs(C = c_var,F = f_var,
+# G = g_var,D = d_var,
+# E = e_var,ln(-H) = ln(z)+ln(1-z)+z_log(-s23),
+# H = h_var,-result1[l1]):
+fprintf(fd,"fg = %a\n",truc1);
+#
+quit;
+# pole pour F=0
+# expr := result1[l1]+result2[l1];
+ expr := result1[l1];
+ deg := -ldegree(expr,F);
+ c4 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-4)));
+ c3 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-3)));
+ c2 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-2)));
+ c1 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,-1)));
+ c0 := factor(subs(C = Cf(z), F = Ff(z),
+ G = Df(z)-Ff(z), E = Cf(z)+Ff(z),
+ D = Df(z), H = Cf(z)+Df(z), coeff(expr,F,0)));
+ d4 := subs(diff(Cf(z),z,z,z)=0,diff(Ff(z),z,z,z)=0,
+ diff(Df(z),z,z,z)=0,diff(c4,z,z,z));
+ d3 := subs(diff(Cf(z),z,z)=0,diff(Ff(z),z,z)=0,diff(c3,z,z));
+ d3 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d3));
+ d2 := diff(c2,z);
+ d2 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d2));
+ d1 := c1;
+ d1 := factor(subs(Ef(z)=Cf(z),Gf(z)=Df(z),d1));
+ dtot := factor(d3/2/Fprime^2+d2/Fprime+d1):
+ dtot := factor(subs(diff(Ff(z),z)=Fprime,diff(Cf(z),z)=Cprime,
+ diff(Df(z),z,z)=Dsecond,diff(Df(z),z)=Dprime(z),z=z0,dtot)):
+ dtot := factor(subs(Df(z0)=(t1*s23-t2*t3)/t2^2,Cf(z0)=t3/t2,
+ Ff(z0)=0,Fprime=t2,Cprime=t5,
+ Dprime(z0)=(t2-2*t4)*s23/t2-t5,
+ Dsecond=-2*s23,z0=t4/t2,dtot));
+ dreste := dtot:
+ dresult := 0;
+ set_ln := indets(dtot,'specfunc(anything,ln)');
+ for func in set_ln do
+ ctemp := factor(coeff(dtot,func,1));
+ dreste := factor(dreste-ctemp*func);
+ dresult := dresult + ctemp*func;
+# reste := factor(reste-ctemp*func);
+ end do:
+ dresult;
+ dreste;
+ w1 := coeff(dresult,ln(-t3/t2),1);
+ w2 := coeff(dresult,ln(-t1*s23/t2^2),1);
+# factor(subs(s23=0,dreste));
+ w12 := factor(w1+w2);
+# qw1 := factor(subs(t1=t2*t3/s23,numer(w12)));
+ tq1 := factor(w1*(t2*t3-t1*s23)/t2/t3);
+ tq2 := factor(tq1+dreste);
+# qw2 := factor(subs(t1=t2*t3/s23,numer(tq2)));
+ res_fin[l1] := w12*z_log(-t1*s23/t2^2)
+ - factor(w1*(t2*t3-t1*s23)^2/t2^2/t3^2)
+ *q(2,(t2*t3-t1*s23)/t2/t3,sign_arg)
+ + tq2;
+ res_fin[l1] := res_fin[l1]/t2;
+ fprintf(fd,"case(%d)\n",l1);
+ fprintf(fd,"temp0 = %a\n",subs(s23=t6,res_fin[l1]));
+ close(fd);
+
Index: 95/branches/golem95_without_olo_cmake/aclocal.m4
===================================================================
--- 95/branches/golem95_without_olo_cmake/aclocal.m4 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/aclocal.m4 (revision 119)
@@ -0,0 +1,956 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
Property changes on: 95/branches/golem95_without_olo_cmake/aclocal.m4
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/test/maketest.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/maketest.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/maketest.pl (revision 119)
@@ -0,0 +1,284 @@
+#! /usr/bin/perl -w
+#
+# launch all z-numerators for a certain rank automatically
+#
+use Getopt::Long;
+GetOptions("parameter=s" => \$paramfile);
+# default name:
+unless ($paramfile) {
+ $paramfile = "param.input";
+}
+# file to generate random momenta
+#$rambofile="mom_rambo.f";
+#
+# makenmerator.pl will read paramtemp; if only a particular
+# numerator should be calculated, paramtemp is equal to
+# the original input file
+system("cp $paramfile paramtemp");
+#$exename="comp.exe";
+# flagexe =1 also runs make and comp.exe
+$flagexe=1;
+#
+%hash_var = ();
+@hash_var_keyint = qw(N rank dim Feypars momentafile point);
+@hash_var_key=@hash_var_keyint;
+$ivar = 0;
+# read parameter input file and fill hash %hash_var
+open (EREAD,$paramfile) || die "cannot open $paramfile";
+#open (ET,">param_tmp");
+while(<EREAD>) {
+ chomp;
+# chop white spaces at beginning of lines (and between words)
+ s/^\s+//;
+ unless (/^#/) {
+ s/\s+//g;
+ $hash_var{$hash_var_key[$ivar]} = "$_";
+# print ET "$hash_var_key[$ivar]=$hash_var{$hash_var_key[$ivar]}\n";
+# print "$hash_var_key[$ivar]=$hash_var{$hash_var_key[$ivar]}\n";
+ $ivar++;
+ }
+}
+#close (ET);
+close (EREAD);
+#
+$nlegs=$hash_var{"N"};
+$dim=$hash_var{"dim"};
+$rank=$hash_var{"rank"};
+print "number of legs=$nlegs, rank=$rank\n";
+$momfile=$hash_var{"momentafile"};
+print "momenta will be read in from $momfile\n";
+$point=$hash_var{"point"};
+$znum=$hash_var{"Feypars"};
+if ($znum eq "all" || $znum eq "\"all\"") {
+$flagall=1;
+}
+else {
+$flagall=0;
+@zlist=split(/,/,$hash_var{"Feypars"});
+$jmax=@zlist;
+}
+if ($dim eq "A") {
+$dimvalue=4;
+print "A-type form factors\n";
+}
+elsif ($dim eq "B") {
+$dimvalue=6;
+print "B-type form factors\n";
+}
+elsif ($dim eq "C") {
+$dimvalue=8;
+print "C-type form factors\n";
+}
+else {
+print "invalid type of form factor\n";
+exit;
+}
+if ($nlegs eq 6 and $dim ne "A") {
+print "please check form factor type, 6-point integrals only need type A form factors\n";
+exit;
+}
+$rankFF=eval($rank-$dimvalue+4);
+######### insert correct number of legs into mom_rambo.f #######
+# skip, this is useless because momenta.dat should not
+# be overwritten if user defined it by hand
+#open(EWRITE,">rambotemp") || die "cannot create rambotemp";
+#open(EREAD,"$rambofile") || die "cannot read $rambofile";
+#
+#$Nminusone=eval($nlegs-1);
+#while (<EREAD>) {
+# chomp;
+# if (/nbmom\s*=\s*(\d)/) {
+# s/nbmom\s*=\s*($1)/nbmom=$Nminusone/;
+# }
+# print EWRITE "$_\n";
+#}
+#
+#close(EREAD);
+#close(EWRITE);
+#system("mv rambotemp $rambofile");
+#system("g77 $rambofile");
+#system("a.out");
+#
+################### case all in one go ###########################
+if ($flagall==1) {
+@zlist1=(1 .. $nlegs);
+@zlist2=();
+@zlist3=();
+@zlist4=();
+@zlist5=();
+@zlist6=();
+$ct2=0;
+for $j1 (1 .. $nlegs) {
+ for $j2 (1 .. $j1) {
+ $ct2++;
+# $zlist2[$j1-1][$j2-1] = "${j2},$j1";
+ push(@zlist2,"${j2},$j1");
+# push(@strli2,"$j2$j1");
+ }
+ }
+# foreach $l (@zlist2) {
+# print "l=$l\n";
+# }
+# print the whole list of lists one at a time
+#for $i ( 0 .. $#zlist2 ) {
+# for $j ( 0 .. $#{$zlist2[$i]} ) {
+# print "element $i $j is $zlist2[$i][$j]\n";
+# }
+#}
+$ct3=0;
+for $j1 (1 .. $nlegs) {
+ for $j2 (1 .. $j1) {
+ for $j3 (1 .. $j2) {
+ $ct3++;
+# $zlist3[$j1-1][$j2-1][$j3-1] = "$j3$j2$j1";
+ push(@zlist3,"${j3},${j2},$j1");
+# push(@strli3,"$j3$j2$j1");
+ }
+ }
+ }
+$ct4=0;
+for $j1 (1 .. $nlegs) {
+ for $j2 (1 .. $j1) {
+ for $j3 (1 .. $j2) {
+ for $j4 (1 .. $j3) {
+ $ct4++;
+# $zlist4[$j1-1][$j2-1][$j3-1][$j4-1] = "$j4$j3$j2$j1";
+ push(@zlist4,"${j4},${j3},${j2},$j1");
+# push(@strli4,"$j4$j3$j2$j1");
+ }
+ }
+ }
+ }
+$ct5=0;
+for $j1 (1 .. $nlegs) {
+ for $j2 (1 .. $j1) {
+ for $j3 (1 .. $j2) {
+ for $j4 (1 .. $j3) {
+ for $j5 (1 .. $j4) {
+ $ct5++;
+# $zlist5[$j1-1][$j2-1][$j3-1][$j4-1][$j5-1] = "$j5$j4$j3$j2$j1";
+ push(@zlist5,"${j5},${j4},${j3},${j2},$j1");
+# push(@strli5,"$j5$j4$j3$j2$j1");
+ }
+ }
+ }
+ }
+ }
+$ct6=0;
+for $j1 (1 .. $nlegs) {
+ for $j2 (1 .. $j1) {
+ for $j3 (1 .. $j2) {
+ for $j4 (1 .. $j3) {
+ for $j5 (1 .. $j4) {
+ for $j6 (1 .. $j5) {
+ $ct6++;
+# $zlist6[$j1-1][$j2-1][$j3-1][$j4-1][$j5-1][$j6-1] = "$j6$j5$j4$j3$j2$j1";
+ push(@zlist6,"${j6},${j5},${j4},${j3},${j2},$j1");
+# push(@strli6,"$j6$j5$j4$j3$j2$j1");
+ }
+ }
+ }
+ }
+ }
+ }
+#
+if ($rankFF==1) {
+$jmax=$nlegs;
+}
+elsif ($rankFF==2) {
+$jmax=$ct2;
+print "nb of different z configurations is $ct2\n";
+}
+elsif ($rankFF==3) {
+$jmax=$ct3;
+print "nb of different z configurations is $ct3\n";}
+elsif ($rankFF==4) {
+$jmax=$ct4;
+print "nb of different z configurations is $ct4\n";}
+elsif ($rankFF==5) {
+$jmax=$ct5;
+print "nb of different z configurations is $ct5\n";}
+elsif ($rankFF==6) {
+$jmax=$ct6;
+print "nb of different z configurations is $ct6\n";}
+elsif ($rankFF==0) {
+$jmax=1;
+}
+else {
+print "invalid choice of rank\n";
+exit;
+}
+#
+#print "jmax=$jmax\n";
+#$jmax=1;
+########### create new input file ########
+#
+for ($j=0;$j<$jmax;$j++) {
+#$j=0;
+open(EWRITE,">paramtemp") || die "cannot create paramtemp";
+open(EREAD,"$paramfile") || die "cannot read $paramfile";
+#
+while (<EREAD>) {
+ chomp;
+ if ($rankFF==1) {
+ if (/all/) {
+ s/all/$zlist1[$j]/;
+ }
+ } # end if rank1
+ elsif ($rankFF==2) {
+ if (/all/) {
+ s/all/$zlist2[$j]/;
+# print "zlist52=$zlist2[$j]\n";
+ }
+ } # end if rank2
+ elsif ($rankFF==3) {
+ if (/all/) {
+ s/all/$zlist3[$j]/;
+ }
+ } # end if rank3
+ elsif ($rankFF==4) {
+ if (/all/) {
+ s/all/$zlist4[$j]/;
+ }
+ } # end if rank4
+ elsif ($rankFF==5) {
+ if (/all/) {
+ s/all/$zlist5[$j]/;
+ }
+ } # end if rank5
+ elsif ($rankFF==6) {
+ if (/all/) {
+ s/all/$zlist6[$j]/;
+ }
+ } # end if rank6
+ elsif ($rankFF==0) {
+ s/all/0/;
+ }
+#
+ print EWRITE "$_\n";
+}
+#
+close(EREAD);
+close(EWRITE);
+#
+#system("mv temp param.input");
+ if ($flagexe==1) {
+# create Makefile, compile and run
+ system("perl makenumerator.pl --parameter paramtemp");
+ system("make");
+ system("./comp.exe");
+ system("unlink paramtemp");
+ } # end if flagexe=1
+#
+ } # end $j loop
+} # end if flagall=1
+######################################################
+else { #flagall=0: only a particular numerator
+ system("perl makenumerator.pl --parameter paramtemp");
+ system("make");
+ system("./comp.exe");
+ system("unlink paramtemp");
+}
+print "the result is written to the files N${nlegs}rank${rank}*_pt${point}.out and N${nlegs}rank${rank}_pt${point}.numbers\n";
+
+
Index: 95/branches/golem95_without_olo_cmake/test/mask_3point
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/mask_3point (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/mask_3point (revision 119)
@@ -0,0 +1,279 @@
+! to be read by maketest.pl
+! computes the one-, two- or three- external mass three-point functions
+! in n and n+2 dimensions.
+! For the normalisation, a factor
+! Gamma(1+eps)*Gamma(1-eps)^2/Gamma(1-2eps)*(4pi)^eps
+! is factorised out.
+! Note that the integral measure is d^n k/(i*Pi^(n/2))
+!
+program main
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor, operator(-), operator(*)
+ use cache
+ use parametre
+ use constante, only: s_null
+ use array, only: packb
+ use spinor, only: scalar ! definition of scalar product
+ !
+ ! module containing the three point form factors
+ use form_factor_3p
+ ! module containing the generic three-point function
+ use generic_function_3p
+ !
+ implicit none
+ !
+ type(form_factor) :: res6
+ complex(ki), dimension(3) :: verif
+ real(ki) :: mass_sq_1,mass_sq_2,mass_sq_3,delta,dels
+ real(ki), dimension(4) :: p1,p2,p3,p4,p5,p6,sump
+ real(ki), dimension(4,6) :: p
+ integer :: ndim,rank,i,j,n
+ !
+ ! Opening of the file containing the external momenta
+ !
+ open(unit=16,file='momentafile',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='outfile',status='unknown')
+ open(unit=18,file='compfile',status='old',position='append')
+ !
+ ! Opening of the error file
+ !
+ open(unit=19,file='error.txt',status='unknown')
+ !write (19,*) 'errors'
+ !
+ ! 3-point:
+ n=3
+ !
+ ! These are the entries of the S matrix
+ ! They are related to the cuts of the following diagram
+ !
+ ! |
+ ! | p1
+ ! |
+ ! /\
+ ! / \
+ ! (1) / \ (3)
+ ! / \
+ ! /--->----\
+ ! / (2) \
+ ! p2 / \ p3
+ !
+ ! S(1,2) = p2^2
+ ! S(2,3) = p3^2
+ ! S(3,1) = p1^2
+ !
+ ! allocated memory to store the set of initial propagators, the S matrix,
+ ! its inverse and the b coefficients
+ !
+ call initgolem95(3)
+ !
+ !
+ ! p1 = (/ ee1,xx1,yy1,zz1 /)
+ ! p2 = (/ ee2,xx2,yy2,zz2 /)
+ ! p3 = (/ ee3,xx3,yy3,zz3 /)
+ !
+ ! i labels components, j labels momenta
+ do, j=1,n
+ read(16,101) (p(i,j),i=1,4)
+! write(6,101) (p(i,j),i=1,4)
+ end do
+ !
+ ! rambo ordering is (x,y,z,E), do relabelling to (E,x,y,z) here
+ !
+ p1 = (/ p(4,1),p(1,1),p(2,1),p(3,1) /)
+ p2 = (/ p(4,2),p(1,2),p(2,2),p(3,2) /)
+ p3 = (/ p(4,3),p(1,3),p(2,3),p(3,3) /)
+ !
+! if momenta are generated with mom_rambo.f:
+! sum_{j=1^N} p_j=0 is automatically fulfilled
+! but always test momentum conservation
+!
+ delta=1.d-12
+ dels= 1.d-8
+!
+!
+! do, i=1,4
+! sump(i)=p1(i)+p2(i)+p3(i)
+! write(6,*) 'component i=',i
+! write (6,*) 'p1(i)+p2(i)+p3(i)=',sump(i)
+! write (17,*)'p1+p2+p3=',sump(i)
+! end do
+!
+ mass_sq_1 = scalar(p1,p1)
+ mass_sq_2 = scalar(p2,p2)
+ mass_sq_3 = scalar(p3,p3)
+!
+ if (abs(mass_sq_1).lt.delta.and.abs(mass_sq_1).ne.0d0) then
+ mass_sq_1=0.d0
+ write (*,*) 'warning, as p1^2 < 1d-12, it has been set to zero'
+ endif
+ mass_sq_2 = scalar(p2,p2)
+ if (abs(mass_sq_2).lt.delta.and.abs(mass_sq_2).ne.0d0) then
+ mass_sq_2=0.d0
+ write (*,*) 'warning, as p2^2 < 1d-12, it has been set to zero'
+ endif
+ mass_sq_3 = scalar(p3,p3)
+ if (abs(mass_sq_3).lt.delta.and.abs(mass_sq_3).ne.0d0) then
+ mass_sq_3=0.d0
+ write (*,*) 'warning, as p3^2 < 1d-12, it has been set to zero'
+ endif
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.d0
+ s_mat(1,2) = mass_sq_2
+ s_mat(1,3) = mass_sq_1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.d0
+ s_mat(2,3) = mass_sq_3
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.d0
+ !
+ !
+ rank=rank
+ ndim=dim
+ !
+ write (*,*) 'you have chosen the following kinematics:'
+ write (*,*) 'p1^2=',scalar(p1,p1)
+ write (*,*) 'p2^2=',scalar(p2,p2)
+ write (*,*) 'p3^2=',scalar(p3,p3)
+ write (*,*) ''
+ if (ndim==4) write (*,*) 'A-type form factors'
+ if (ndim==6) write (*,*) 'B-type form factors'
+ if (ndim==8) write (*,*) 'C-type form factors are not needed for triangles'
+ !
+ call preparesmatrix
+ !
+ if (ndim == 4) then
+ !
+ if (rank == 0) then
+ !
+ ! Result for the scalar integral in n dimensions
+ !
+ res6 = a30(s_null)
+ verif = f3p(s_mat_p,b_ref)
+ !
+ ! the labels 1,2,3 correspond to Feynman parameter z1,z2,z3
+ else if (rank == 1) then
+ !
+ ! Results for integrals in n dimension with one Feynman parameter
+ ! in the numerator:
+ !
+ res6 = -a31(znum1,s_null)
+ verif = f3p(s_mat_p,b_ref,znum1)
+ !
+ else if (rank == 2) then
+ !
+ ! Results for integrals in n dimension with two Feynman parameters
+ ! in the numerator
+ !
+ res6 = a32(znum1,znum2,s_null)
+ verif = f3p(s_mat_p,b_ref,znum1,znum2)
+ !
+ else if (rank == 3) then
+ !
+ ! Results for integrals in n dimension with three Feynman parameters
+ ! in the numerator
+ !
+ res6 = -a33(znum1,znum2,znum3,s_null)
+ verif = f3p(s_mat_p,b_ref,znum1,znum2,znum3)
+ !
+ end if ! end rank cases
+ !
+ else if (ndim == 6) then
+ !
+ rank=rank-2
+ if (rank == 0) then
+ ! Results for form factor B32 with no Feynman parameters
+ ! in the numerator:
+ !
+ res6 = b32(s_null)
+ verif = 0.d0
+ verif(2:3) = -0.5d0*f3p_np2(s_mat_p,b_ref)
+ !
+ else if (rank == 1) then
+ !
+ ! Results for integrals in n+2 dimension with one Feynman parameter
+ ! in the numerator
+ !
+ res6 = b33(znum1,s_null)
+ verif = 0.d0
+ verif(2:3) = 0.5d0*f3p_np2(s_mat_p,b_ref,znum1)
+ !
+ else if (rank == 2) then
+ !
+ write(6,*) 'b34 not needed, therefore not implemented'
+ !
+ end if ! end rank cases
+ !
+ else if (ndim == 8) then
+ !
+ write(6,*) 'not implemented, rank four triangles are not needed'
+ !
+ end if ! end ndim cases
+ !
+ 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,*) ''
+ write (17,*) '(p1)^2 =',mass_sq_1
+ write (17,*) '(p2)^2 =',mass_sq_2
+ write (17,*) '(p3)^2 =',mass_sq_3
+ 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,*) ''
+ !
+ if (ndim == 4) then
+ write (18,'("a3[znum1,znum2,znum3]={",f18.10,1x,", ",1x,f18.10,",")') verif(1)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') verif(2)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') verif(3)
+ else if (ndim == 6) then
+ write (18,'("b3[znum1,znum2,znum3]={",f18.10,1x,", ",1x,f18.10,",")') verif(1)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') verif(2)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') verif(3)
+ endif
+ !
+ 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,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
+ write (17,*) ''
+ 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,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') verif(3)
+ !
+ ! routine to free the allocated memory
+ !
+ call exitgolem95()
+ !
+ close(16)
+ close(17)
+ close(18)
+ close(19)
+ !
+101 format(4f17.10)
+ !
+end program main
+!
+!
Index: 95/branches/golem95_without_olo_cmake/test/momenta.dat
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/momenta.dat (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/momenta.dat (revision 119)
@@ -0,0 +1,6 @@
+ 0.500000000000000000000000 0.000000000000000000000000 0.000000000000000000000000 0.500000000000000000000000
+ -0.500000000000000000000000 0.000000000000000000000000 0.000000000000000000000000 0.500000000000000000000000
+ 0.044528341650710304144845 -0.043123455944157979002895 0.011120661304927080548222 -0.185986759664738016128993
+ -0.085491975303837994260014 -0.091261176704338545229156 0.244992501253361860680258 -0.326011971996721328093116
+ -0.116776431857305545980452 0.191553925634582344894596 -0.064746566634624344582782 -0.233498949364477625945113
+ 0.157740065510433236095622 -0.057169292986085883112590 -0.191366595923664561951227 -0.254502318974063168610655
Index: 95/branches/golem95_without_olo_cmake/test/mask_4point
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/mask_4point (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/mask_4point (revision 119)
@@ -0,0 +1,362 @@
+! to be read by maketest.pl
+! This program computes the n, n+2 and n+4 dimensional four-point Feynman integrals
+! with or without Feynman parameters in the numerator, correctly
+! normalised, from the four-point form factors. This program can be
+! used as a test to check this type of integrals.
+! It can compute zero, one, two, three- and four external mass four-point functions.
+! For the normalisation, a factor
+! Gamma(1+eps)*Gamma(1-eps)^2/Gamma(1-2eps)*(4pi)^eps
+! is factored out.
+! Note that the integral measure is d^n k/(i*Pi^(n/2)).
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use parametre
+ use form_factor_type
+ use form_factor_4p
+ use cache
+ use constante, only: s_null
+ use generic_function_4p, only: f4p_np2, f4p_np4
+ use function_4p1m, only: f4p1m
+ use function_4p2m_opp, only: f4p2m_opp
+ use function_4p2m_adj, only: f4p2m_adj
+ use function_4p3m, only: f4p3m
+ use function_4p4m, only: f4p4m
+ use spinor, only: scalar
+ !
+ implicit none
+ !
+ integer, dimension(4) :: s
+ type(form_factor) :: res6
+ real(ki), dimension(6) :: verif1,verif2
+ real(ki), dimension(4) :: p1,p2,p3,p4,sump
+ real(ki), dimension(4) :: p23,p34,p12
+ real(ki), dimension(4,6) :: p
+ real(ki) :: t1,t2,delta,dels
+ !~ integer, dimension(0) :: s_null
+ real(ki) :: mass_sq_1,mass_sq_2,mass_sq_3,mass_sq_4
+ real(ki) :: s_var,t_var
+ integer :: rank,i,j,n,ndim
+ !
+ !
+ ! Opening of the file containing the external momenta
+ !
+ open(unit=16,file='momentafile',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='outfile',status='unknown')
+ open(unit=18,file='compfile',status='old',position='append')
+ !
+ ! Opening of the error files
+ !
+ open(unit=19,file='error.txt',status='unknown')
+ !write (19,*) 'errors'
+ !
+ ! 4-point:
+ n=4
+ !
+ ! These are the entries of the S matrix
+ ! They are related to the cuts of the following diagram
+ ! S(1,3) = (p1+p4)^2 = t_var
+ ! S(2,4) = (p1+p2)^2 = s_var
+ ! S(1,2) = p2^2 = mass_sq_2
+ ! S(2,3) = p3^2 = mass_sq_3
+ ! S(3,4) = p4^2 = mass_sq_4
+ ! S(4,1) = p1^2 = mass_sq_1
+ !
+ ! p1 p4
+ ! \ /
+ ! \ (4) /
+ ! |---<---|
+ ! | |
+ ! (1)| |(3)
+ ! | |
+ ! |--->---|
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ !
+ ! Allocated memory to store the set of initial propagators, the S matrix,
+ ! its inverse and the b coefficients
+ !
+ ! p1 = (/ ee1,xx1,yy1,zz1 /)
+ ! p2 = (/ ee2,xx2,yy2,zz2 /)
+ ! p3 = (/ ee3,xx3,yy3,zz3 /)
+ ! p4 = (/ ee4,xx4,yy4,zz4 /)
+ !
+ ! i labels components
+ do, j=1,n
+ read(16,101) (p(i,j),i=1,4)
+! write(6,101) (p(i,j),i=1,4)
+ end do
+ !
+ ! rambo ordering is (x,y,z,E), do relabelling to (E,x,y,z) here
+ !
+ p1 = (/ p(4,1),p(1,1),p(2,1),p(3,1) /)
+ p2 = (/ p(4,2),p(1,2),p(2,2),p(3,2) /)
+ p3 = (/ p(4,3),p(1,3),p(2,3),p(3,3) /)
+ p4 = (/ p(4,4),p(1,4),p(2,4),p(3,4) /)
+!
+! if momenta are generated with mom_rambo.f:
+! sum_{j=1^N} p_j=0 is automatically fulfilled
+! but always test momentum conservation
+!
+ delta=1.d-11
+ dels= 1.d-8
+!
+ sump=p1+p2+p3+p4
+!
+ do, i=1,4
+ if (abs(sump(i)).gt.dels) then
+ write (*,*) 'warning, sum of external momenta is nonzero for component',i
+ write (17,*) 'warning, sum of external momenta is nonzero for component',i
+ write (*,*) 'p1+p2+p3+p4=',sump
+ write (17,*) 'p1+p2+p3+p4=',sump
+ end if
+ end do
+!
+ p12 = p1 + p2
+ p23 = p2 + p3
+ p34 = p3 + p4
+!
+ s_var=scalar(p12,p12)
+ t_var=scalar(p23,p23)
+!
+ mass_sq_1 = scalar(p1,p1)
+ if (abs(mass_sq_1).lt.delta.and.abs(mass_sq_1).ne.0d0) then
+ mass_sq_1=0.d0
+ write (*,*) 'warning, as p1^2 < 1d-11, it has been set to zero'
+ endif
+ mass_sq_2 = scalar(p2,p2)
+ if (abs(mass_sq_2).lt.delta.and.abs(mass_sq_2).ne.0d0) then
+ mass_sq_2=0.d0
+ write (*,*) 'warning, as p2^2 < 1d-11, it has been set to zero'
+ endif
+ mass_sq_3 = scalar(p3,p3)
+ if (abs(mass_sq_3).lt.delta.and.abs(mass_sq_3).ne.0d0) then
+ mass_sq_3=0.d0
+ write (*,*) 'warning, as p3^2 < 1d-11, it has been set to zero'
+ endif
+ mass_sq_4 = scalar(p4,p4)
+ if (abs(mass_sq_4).lt.delta.and.abs(mass_sq_4).ne.0d0) then
+ mass_sq_4=0.d0
+ write (*,*) 'warning, as p4^2 < 1d-11, it has been set to zero'
+ endif
+!
+ call initgolem95(4)
+ !
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.d0
+ ! s_mat(1,2) = scalar(p2,p2)
+ s_mat(1,2) = mass_sq_2
+ s_mat(1,3) = scalar(p23,p23)
+ !s_mat(1,4) = scalar(p1,p1)
+ s_mat(1,4) = mass_sq_1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.d0
+ ! s_mat(2,3) = scalar(p3,p3)
+ s_mat(2,3) = mass_sq_3
+ s_mat(2,4) = scalar(p12,p12)
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.d0
+ ! s_mat(3,4) = scalar(p4,p4)
+ s_mat(3,4) = mass_sq_4
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.d0
+ !
+ !
+ rank=rank
+ ndim=dim
+ !
+ write (*,*) 'you have chosen'
+ if (ndim==4) write (*,*) 'A-type form factors'
+ if (ndim==6) write (*,*) 'B-type form factors'
+ if (ndim==8) write (*,*) 'C-type form factors'
+ write (*,*) 'with the following kinematics:'
+ write (*,*) 'p1^2=',scalar(p1,p1)
+ write (*,*) 'p2^2=',scalar(p2,p2)
+ write (*,*) 'p3^2=',scalar(p3,p3)
+ write (*,*) 'p4^2=',scalar(p4,p4)
+ write (*,*) '(p1+p2)^2 =',s_var
+ write (*,*) '(p2+p3)^2 =',t_var
+ write (*,*) ''
+ !
+ call cpu_time(t1)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix
+ !
+ !
+ ! Results for integrals in n+2 dimension with no Feynman parameters
+ ! at the numerator:
+ ! There are two ways to compute a n+2 dimension four point function,
+ ! either use the generic function f4p_np2 (in module generic_function_4p),
+ ! there are two arguments: the kinematics matrix and the set of the four unpinched
+ ! propagators, in addition there are optional arguments for the label of the Feynman
+ ! parameters
+ ! or use the dedicated function for the different kinematics, the label of the Feynman
+ ! parameters is mandatory (if there is none put 0)
+ ! In the case of the dedicated function, the kinematics is fixed, for example, for
+ ! the one mass four point function, the external legs are labelled as specified in
+ ! picture at the beginning and the massive leg is assumed to be p4. If it is not the case,
+ ! the user must do the crossing by hand. On the contrary, in the case of the generic function
+ ! the program performs automatically the crossing, the user has just to furnish the S matrix.
+ ! Concerning the set of unpinched propagator, the S matrix defines the propagators because
+ ! S_{ij} = (q_i - q_j)^2 (where the qi are the momentum flowing through the propagator i).
+ ! It can happens that one wants to compute a four point function related to a diagram having
+ ! N propagators (just by pinching N-4 propagators), in this case, the argument s_mat is the
+ ! complete S matrix (NxN) and set_ref is the set of unpinched propagators, IT MUST HAVE
+ ! RANK 1 AND SHAPE 4.
+ !
+ if (ndim == 4) then
+
+ if (rank == 0) then
+ !
+ res6 = a40(s_null)
+ !
+ else if (rank == 1) then
+ !
+ !
+ res6 = a41(znum1,s_null)
+ !
+ else if (rank == 2) then
+ !
+ res6 = a42(znum1,znum2,s_null)
+ !
+ else if (rank == 3) then
+ !
+ res6 = a43(znum1,znum2,znum3,s_null)
+ !
+ else if (rank == 4) then
+ !
+ res6 = a44(znum1,znum2,znum3,znum4,s_null)
+ !
+ end if
+ !
+ else if (ndim == 6) then
+ !
+ if (rank < 2) then
+ !
+ write(6,*) 'input error: B-type form factors start from rank=2'
+ !
+ else if (rank == 2) then
+ res6=b42(s_null)
+ ! res6= -0.5d0*f4p_np2(s_mat,b_ref,s_null)
+ else if (rank == 3) then
+ !
+ res6=b43(znum1,s_null)
+ ! res6 = 0.5d0*f4p_np2(s_mat,b_ref,s_null,znum1)
+ !
+ else if (rank == 4) then
+ !
+ res6 = b44(znum1,znum2,s_null)
+ ! res6 = -0.5d0*f4p_np2(s_mat,b_ref,s_null,znum1,znum2)
+ !
+ else if (rank == 5) then
+ !
+ write(6,*) 'rank5 boxes not implemented'
+ !
+ end if ! rank cases
+ !
+ else if (ndim == 8) then
+ !
+ if (rank < 4) then
+ !
+ write(6,*) 'input error: C-type form factors start from rank=4'
+ !
+ else if (rank == 4) then
+ !
+ res6=c44(s_null)
+ ! res6= 0.25d0*f4p_np4(s_mat,b_ref,s_null)
+ !
+ else
+ !
+ write(6,*) ' not implemented'
+ !
+ end if ! rank cases
+ !
+ else
+ !
+ write(6,*) 'dimensions > 8 not needed => not implemented'
+ !
+ end if ! end ndim cases
+!
+ call cpu_time(t2)
+ !
+ ! The results are written in the file with unit 17
+ !
+ write (17,*) 'The kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p4'
+ write (17,*) ' \ / '
+ write (17,*) ' \ (4) / '
+ write (17,*) ' |----<-----| '
+ write (17,*) ' | | '
+ write (17,*) ' (1)| |(3) '
+ write (17,*) ' | | '
+ write (17,*) ' |---->-----| '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3'
+ write (17,*) ''
+ write (17,*) '(p1+p2)^2 =',s_var
+ write (17,*) '(p2+p3)^2 =',t_var
+ write (17,*) '(p1)^2 =',mass_sq_1
+ write (17,*) '(p2)^2 =',mass_sq_2
+ write (17,*) '(p3)^2 =',mass_sq_3
+ write (17,*) '(p4)^2 =',mass_sq_4
+ 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,'("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,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
+ write (17,*) ''
+ !
+ !
+ write (17,*) 'CPU time=',t2-t1
+ !
+ if (ndim == 4) then
+ write (18,'("a4[znum1,znum2,znum3,znum4]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ else if (ndim == 6) then
+ write (18,'("b4[znum1,znum2,znum3,znum4]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ else if (ndim == 8) then
+ write (18,'("b4[znum1,znum2,znum3,znum4]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ endif
+ !
+! routine to free the allocated memory
+ !
+ call exitgolem95()
+ !
+ close(16)
+ close(17)
+ close(18)
+ close(19)
+ !
+ 101 format(4f17.10)
+ !
+end program main
Index: 95/branches/golem95_without_olo_cmake/test/mask_5point
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/mask_5point (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/mask_5point (revision 119)
@@ -0,0 +1,351 @@
+! to be read by maketest.pl
+! This program computes 5-point Feynman integrals
+! with or without Feynman parameters in the numerator.
+! For the normalisation, a factor
+! Gamma(1+eps)*Gamma(1-eps)^2/Gamma(1-2eps)*(4pi)^eps
+! is factored out.
+! Note that the integral measure is d^n k/(i*Pi^(n/2)).
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type
+ use form_factor_3p
+ use form_factor_4p
+ use form_factor_5p
+ use cache
+ use parametre
+ use constante, only: s_null
+ use spinor, only: scalar
+ !
+ implicit none
+ !
+ integer, dimension(4) :: s
+ type(form_factor) :: res6
+ real(ki), dimension(6) :: verif1,verif2
+ real(ki), dimension(4) :: p1,p2,p3,p4,p5,p6,sump,Q
+ real(ki), dimension(4) :: p12,p23,p34,p45,p51
+ real(ki), dimension(4,6) :: p
+ real(ki) :: s1,s2,s3,s4,s5,s6
+ real(ki) :: t1,t2,delta,dels
+ !~ integer, dimension(0) :: s_null
+ integer :: rank,i,j,n,ndim
+ !
+ !
+ ! Opening of the file containing the external momenta
+ !
+ open(unit=16,file='momentafile',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='outfile',status='unknown')
+ open(unit=18,file='compfile',status='old',position='append')
+ !
+ ! Opening of the error files
+ !
+ open(unit=19,file='error.txt',status='unknown')
+ !
+ ! 5-point:
+ n=5
+ !
+ ! These are the entries of the S matrix
+ ! defined as S(i,j) = (q_i - q_j)^2 where the q's are
+ ! the momentum flowing in the propagators
+ ! They are related to the cuts of the following diagram
+ !
+ ! p1 p5
+ ! \ /
+ ! \ (5) /
+ ! |---<---\ (4)
+ ! | \
+ ! | \____ p4
+ ! (1)| /
+ ! | / (3)
+ ! |--->---/
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ ! S(1,3) = (p2+p3)^2
+ ! S(2,4) = (p3+p4)^2
+ ! S(2,5) = (p1+p2)^2
+ ! S(3,5) = (p4+p5)^2
+ ! S(1,4) = (p1+p5)^2
+ ! S(1,2) = p2^2
+ ! S(2,3) = p3^2
+ ! S(3,4) = p4^2
+ ! S(4,5) = p5^2
+ ! S(1,5) = p1^2
+ !
+ ! read in a set of four momenta (should verify momentum conservation)
+ ! rambo generates momenta with sum_i=1^n p_i=Et
+ ! setting Et=1 in mom_rambo.f means that p_n=(1,0,0,0)
+ !
+ !
+ ! i labels components
+ do, j=1,n
+ read(16,101) (p(i,j),i=1,4)
+! write(6,101) (p(i,j),i=1,4)
+ end do
+ !
+ ! rambo ordering is (x,y,z,E), do relabelling to (E,x,y,z) here
+ !
+ p1 = (/ p(4,1),p(1,1),p(2,1),p(3,1) /)
+ p2 = (/ p(4,2),p(1,2),p(2,2),p(3,2) /)
+ p3 = (/ p(4,3),p(1,3),p(2,3),p(3,3) /)
+ p4 = (/ p(4,4),p(1,4),p(2,4),p(3,4) /)
+ p5 = (/ p(4,5),p(1,5),p(2,5),p(3,5) /)
+!
+! if momenta are generated with mom_rambo.f:
+! sum_{j=1^N} p_j=0 is automatically fulfilled
+! but always test momentum conservation
+!
+ delta=1.d-12
+ dels= 1.d-8
+ sump=p1+p2+p3+p4+p5
+!
+ do, i=1,4
+ if (abs(sump(i)).gt.dels) then
+ write (*,*) 'warning, sum of external momenta is not zero'
+ write (*,*) 'sum of components',i,': ',sump(i)
+ write (17,*) 'warning, sum of external momenta is not zero'
+ write (17,*) 'sum of components',i,': ',sump(i)
+ write (*,*) 'p1+p2+p3+p4+p5=',sump
+ write (17,*)'p1+p2+p3+p4+p5=',sump
+ end if
+ end do
+!
+ p12 = p1 + p2
+ p23 = p2 + p3
+ p34 = p3 + p4
+ p45 = p4 + p5
+ p51 = p5 + p1
+!
+ s1=scalar(p1,p1)
+ s2=scalar(p2,p2)
+ s3=scalar(p3,p3)
+ s4=scalar(p4,p4)
+ s5=scalar(p5,p5)
+!
+ if (abs(s1).lt.delta.and.abs(s1).ne.0d0) then
+ s1=0.d0
+ write (*,*) 'warning, as p1^2 < 1d-12, it has been set to zero'
+ endif
+ if (abs(s2).lt.delta.and.abs(s2).ne.0d0) then
+ s2=0.d0
+ write (*,*) 'warning, as p2^2 < 1d-12, it has been set to zero'
+ endif
+ if (abs(s3).lt.delta.and.abs(s3).ne.0d0) then
+ s3=0.d0
+ write (*,*) 'warning, as p3^2 < 1d-12, it has been set to zero'
+ endif
+ if (abs(s4).lt.delta.and.abs(s4).ne.0d0) then
+ s4=0.d0
+ write (*,*) 'warning, as p4^2 < 1d-12, it has been set to zero'
+ endif
+ if (abs(s5).lt.delta.and.abs(s5).ne.0d0) then
+ s5=0.d0
+ write (*,*) 'warning, as p5^2 < 1d-12, it has been set to zero'
+ endif
+ !
+ ! Allocated memory to store the set of initial propagators, the S matrix,
+ ! its inverse and the b coefficients
+ !
+ call initgolem95(5)
+ !
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.d0
+ s_mat(1,2) = s2
+ s_mat(1,3) = scalar(p23,p23)
+ s_mat(1,4) = scalar(p51,p51)
+ s_mat(1,5) = s1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.d0
+ s_mat(2,3) = s3
+ s_mat(2,4) = scalar(p34,p34)
+ s_mat(2,5) = scalar(p12,p12)
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.d0
+ s_mat(3,4) = s4
+ s_mat(3,5) = scalar(p45,p45)
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.d0
+ s_mat(4,5) = s5
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = 0.d0
+ !
+ !
+ rank=rank
+ ndim=dim
+ !
+ call cpu_time(t1)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix()
+ !
+ ! The results are written in the file with unit 17
+ !
+ write (17,*) 'The kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p5 '
+ write (17,*) ' \ / '
+ write (17,*) ' \ (5) / '
+ write (17,*) ' |---<---\ (4) '
+ write (17,*) ' | \ '
+ write (17,*) ' | \____ p4'
+ write (17,*) ' (1)| / '
+ write (17,*) ' | / (3) '
+ write (17,*) ' |--->---/ '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3 '
+ write (17,*) ''
+ write (17,*) ' S(1,3) = (p2+p3)^2',s_mat(1,3)
+ write (17,*) ' S(2,4) = (p3+p4)^2',s_mat(2,4)
+ write (17,*) ' S(2,5) = (p1+p2)^2',s_mat(2,5)
+ write (17,*) ' S(3,5) = (p4+p5)^2',s_mat(3,5)
+ write (17,*) ' S(1,4) = (p1+p5)^2',s_mat(1,4)
+ write (17,*) ' S(1,2) = p2^2',s_mat(1,2)
+ write (17,*) ' S(2,3) = p3^2',s_mat(2,3)
+ write (17,*) ' S(3,4) = p4^2',s_mat(3,4)
+ write (17,*) ' S(4,5) = p5^2',s_mat(4,5)
+ write (17,*) ' S(1,5) = p1^2',s_mat(1,5)
+ 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,*) ''
+ !
+ !
+ if (ndim == 4) then
+
+ if (rank == 0) then
+ !
+ res6 = a50(s_null)
+ !
+ else if (rank == 1) then
+ !
+ !
+ res6 = a51(znum1,s_null)
+ !
+ else if (rank == 2) then
+ !
+ res6 = a52(znum1,znum2,s_null)
+ !
+ else if (rank == 3) then
+ !
+ res6 = a53(znum1,znum2,znum3,s_null)
+ !
+ else if (rank == 4) then
+ !
+ res6 = a54(znum1,znum2,znum3,znum4,s_null)
+ !
+ else if (rank == 5) then
+ !
+ res6 = a55(znum1,znum2,znum3,znum4,znum5,s_null)
+ !
+ end if ! end rank cases
+ !
+ else if (ndim == 6) then
+ !
+ if (rank == 0) then
+ !
+ write(6,*) 'input error: B-type form factors start from rank=2'
+ !
+ else if (rank == 1) then
+ !
+ write(6,*) 'input error: B-type form factors start from rank=2'
+ !
+ else if (rank == 2) then
+ !
+ res6 = b52(s_null)
+ !
+ else if (rank == 3) then
+ !
+ res6 = b53(znum1,s_null)
+ !
+ else if (rank == 4) then
+ !
+ res6 = b54(znum1,znum2,s_null)
+ !
+ else if (rank == 5) then
+ !
+ res6 = b55(znum1,znum2,znum3,s_null)
+ !
+ else
+ write(6,*) 'rank6 pentagons not needed => not implemented'
+ end if ! end rank cases
+ !
+ else if (ndim == 8) then
+ !
+ if (rank < 4) then
+ !
+ write(6,*) 'input error: C-type form factors start from rank=4'
+ !
+ else if (rank == 4) then
+ !
+ res6 = c54(s_null)
+ !
+ else if (rank == 5) then
+ !
+ res6 = c55(znum1,s_null)
+ !
+ else
+ write(6,*) 'rank6 pentagons not needed => not implemented'
+ end if ! end rank cases
+ !
+ end if ! end dim cases
+ !
+ call cpu_time(t2)
+ !
+ 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,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
+ write (17,*) ''
+ !
+ !
+ write (17,*) 'cpu time=',t2-t1
+ !
+ if (ndim == 4) then
+ write (18,'("a5[znum1,znum2,znum3,znum4,znum5]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ else if (ndim == 6) then
+ write (18,'("b5[znum1,znum2,znum3,znum4,znum5]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ else if (ndim == 8) then
+ write (18,'("c5[znum1,znum2,znum3,znum4,znum5]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ endif
+!
+! routine to free the allocated memory
+ !
+ call exitgolem95()
+ !
+ close(16)
+ close(17)
+ close(18)
+ close(19)
+ !
+ 101 format(4f17.10)
+ !
+end program main
Index: 95/branches/golem95_without_olo_cmake/test/mask_6point
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/mask_6point (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/mask_6point (revision 119)
@@ -0,0 +1,342 @@
+! to be read by maketest.pl
+! This program computes 6-point form factors
+! with or without Feynman parameters in the numerator
+! For the normalisation, a factor
+! Gamma(1+eps)*Gamma(1-eps)^2/Gamma(1-2eps)*(4pi)^eps
+! is factored out.
+! Note that the integral measure is d^n k/(i*Pi^(n/2)).
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type
+ use form_factor_3p
+ use form_factor_4p
+ use form_factor_5p
+ use form_factor_6p
+ use cache
+ use parametre
+ use constante, only: s_null
+ use spinor, only: scalar ! to get the function scalar
+ !
+ implicit none
+ !
+ integer, dimension(4) :: s
+ type(form_factor) :: res6
+ real(ki), dimension(6) :: verif1,verif2,xm
+ real(ki), dimension(4) :: p1,p2,p3,p4,p5,p6,sump
+ real(ki), dimension(4) :: p12,p23,p34,p45,p56,p61,p123,p234,p345
+ real(ki), dimension(4,6) :: p
+ real(ki) :: s1,s2,s3,s4,s5,s6
+ real(ki) :: t1,t2,delta,dels
+ !~ integer, dimension(0) :: s_null
+ integer :: rank,i,j,n,ndim
+ !
+ !
+ ! Opening of the file containing the external momenta
+ !
+ open(unit=16,file='momentafile',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='outfile',status='unknown')
+ open(unit=18,file='compfile',status='old',position='append')
+ !
+ ! Opening of the error files
+ !
+ open(unit=19,file='error.txt',status='unknown')
+ !write (19,*) 'errors'
+ !
+ ! 6-point:
+ n=6
+ !
+ !
+ ! These are the entries of the S matrix
+ ! defined as S(i,j) = (q_i - q_j)^2 where the q's are
+ ! the momentum flowing in the propagators
+ ! It is related to the cuts of the following diagram
+ !
+ ! p6 p5
+ ! \ /
+ ! \ (5) /
+ ! /---<---\ (4)
+ ! (6) / \
+ ! p1 ____/ \____ p4
+ ! \ /
+ ! (1) \ / (3)
+ ! \--->---/
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ ! S(1,3) = (p2+p3)^2
+ ! S(1,4) = (p2+p3+p4)^2
+ ! S(1,5) = (p1+p6)^2
+ ! S(2,4) = (p3+p4)^2
+ ! S(2,5) = (p3+p4+p5)^2
+ ! S(2,6) = (p1+p2)^2
+ ! S(3,5) = (p4+p5)^2
+ ! S(3,6) = (p4+p5+p6)^2
+ ! S(4,6) = (p5+p6)^2
+ ! S(1,2) = p2^2
+ ! S(2,3) = p3^2
+ ! S(3,4) = p4^2
+ ! S(4,5) = p5^2
+ ! S(5,6) = p6^2
+ ! S(1,6) = p1^2
+ !
+ ! define a set of four momenta (must verify momentum conservation
+ ! and DetG=0 )
+ !
+ ! rambo generates momenta with sum_i=1^nbmom p_i=Et
+ ! setting Et=1 in mom_rambo.f means that p_n=(1,0,0,0)
+ ! and only n-1 momenta should be generated/read in from rambo
+ !
+ !
+ ! i labels components
+ do, j=1,n
+ read(16,101) (p(i,j),i=1,4)
+ ! write(6,101) (p(i,j),i=1,4)
+ end do
+ !
+ ! rambo ordering is (x,y,z,E), do relabelling to (E,x,y,z) here
+ !
+ p1 = (/ p(4,1),p(1,1),p(2,1),p(3,1) /)
+ p2 = (/ p(4,2),p(1,2),p(2,2),p(3,2) /)
+ p3 = (/ p(4,3),p(1,3),p(2,3),p(3,3) /)
+ p4 = (/ p(4,4),p(1,4),p(2,4),p(3,4) /)
+ p5 = (/ p(4,5),p(1,5),p(2,5),p(3,5) /)
+ p6 = (/ p(4,6),p(1,6),p(2,6),p(3,6) /)
+! if momenta are generated with mom_rambo.f:
+! sum_{j=1^N} p_j=0 is automatically fulfilled
+! but always test momentum conservation
+!
+ delta=5.d-10
+ dels =1.d-8
+ !
+ sump=p1+p2+p3+p4+p5+p6
+ !
+ do, i=1,4
+ if (abs(sump(i)).gt.dels) then
+ write (*,*) 'warning, sum of external momenta is not zero'
+ write (*,*) 'sum of components',i,': ',sump(i)
+ write (17,*) 'warning, sum of external momenta is not zero'
+ write (17,*) 'sum of components',i,': ',sump(i)
+ write (*,*) 'p1+...+p6 =',sump
+ write (17,*)'p1+...+p6 =',sump
+ end if
+ end do
+ !
+ p12 = p1 + p2
+ p23 = p2 + p3
+ p234 = p2+p3+p4
+ p61 = p1 + p6
+ p34 = p3 + p4
+ p345 = p34 + p5
+ p45 = p4 + p5
+ p123 = p12 + p3
+ p56 = p5 + p6
+ !
+ s1=scalar(p1,p1)
+ s2=scalar(p2,p2)
+ s3=scalar(p3,p3)
+ s4=scalar(p4,p4)
+ s5=scalar(p5,p5)
+ s6=scalar(p6,p6)
+ !
+ if (abs(s1).lt.delta.and.abs(s1).ne.0d0) then
+ s1=0.d0
+ ! write (*,*) 'warning, as p1^2 < delta, it has been set to zero'
+ endif
+ if (abs(s2).lt.delta.and.abs(s2).ne.0d0) then
+ s2=0.d0
+ ! write (*,*) 'warning, as p2^2 < delta, it has been set to zero'
+ endif
+ if (abs(s3).lt.delta.and.abs(s3).ne.0d0) then
+ s3=0.d0
+ ! write (*,*) 'warning, as p3^2 < delta, it has been set to zero'
+ endif
+ if (abs(s4).lt.delta.and.abs(s4).ne.0d0) then
+ s4=0.d0
+ ! write (*,*) 'warning, as p4^2 < delta, it has been set to zero'
+ endif
+ if (abs(s5).lt.delta.and.abs(s5).ne.0d0) then
+ s5=0.d0
+ ! write (*,*) 'warning, as p5^2 < delta, it has been set to zero'
+ endif
+ if (abs(s6).lt.delta.and.abs(s6).ne.0d0) then
+ s6=0.d0
+ ! write (*,*) 'warning, as p6^2 < delta, it has been set to zero'
+ endif
+ !
+ ! Allocated memory to store the set of initial propagators, the S matrix,
+ ! its inverse and the b coefficients
+ !
+ call initgolem95(6)
+ !
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.d0
+ s_mat(1,2) = s2
+ s_mat(1,3) = scalar(p23,p23)
+ s_mat(1,4) = scalar(p234,p234)
+ s_mat(1,5) = scalar(p61,p61)
+ s_mat(1,6) = s1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.d0
+ s_mat(2,3) = s3
+ s_mat(2,4) = scalar(p34,p34)
+ s_mat(2,5) = scalar(p345,p345)
+ s_mat(2,6) = scalar(p12,p12)
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.d0
+ s_mat(3,4) = s4
+ s_mat(3,5) = scalar(p45,p45)
+ s_mat(3,6) = scalar(p123,p123)
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.d0
+ s_mat(4,5) = s5
+ s_mat(4,6) = scalar(p56,p56)
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = 0.d0
+ s_mat(5,6) = s6
+ !
+ s_mat(6,1) = s_mat(1,6)
+ s_mat(6,2) = s_mat(2,6)
+ s_mat(6,3) = s_mat(3,6)
+ s_mat(6,4) = s_mat(4,6)
+ s_mat(6,5) = s_mat(5,6)
+ s_mat(6,6) = 0.d0
+ !
+ !
+ rank=rank
+ ndim=dim
+ !
+ if (ndim > 4) write(6,*) 'wrong form factor type: 6-point functions contain only A-type form factors'
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix()
+ !
+ write (17,*) 'The kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p6 p5 '
+ write (17,*) ' \ / '
+ write (17,*) ' \ (5) / '
+ write (17,*) ' /----<-----\ (4) '
+ write (17,*) ' (6) / \ '
+ write (17,*) ' p1 ____ / \____ p4 '
+ write (17,*) ' \ / '
+ write (17,*) ' (1) \ / (3) '
+ write (17,*) ' \---->-----/ '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3 '
+ write (17,*) ''
+ write (17,*) ' S(1,3) = (p2+p3)^2 = ',s_mat(1,3)
+ write (17,*) ' S(1,4) = (p2+p3+p4)^2=',s_mat(1,4)
+ write (17,*) ' S(1,5) = (p1+p6)^2 = ',s_mat(1,5)
+ write (17,*) ' S(2,4) = (p3+p4)^2 = ',s_mat(2,4)
+ write (17,*) ' S(2,5) = (p3+p4+p5)^2=',s_mat(2,5)
+ write (17,*) ' S(2,6) = (p1+p2)^2 = ',s_mat(2,6)
+ write (17,*) ' S(3,5) = (p4+p5)^2 = ',s_mat(3,5)
+ write (17,*) ' S(3,6) = (p4+p5+p6)^2=',s_mat(3,6)
+ write (17,*) ' S(4,6) = (p5+p6)^2 = ',s_mat(4,6)
+ write (17,*) ' S(1,2) = p2^2=',s2
+ write (17,*) ' S(2,3) = p3^2=',s3
+ write (17,*) ' S(3,4) = p4^2=',s4
+ write (17,*) ' S(4,5) = p5^2=',s5
+ write (17,*) ' S(5,6) = p6^2=',s6
+ write (17,*) ' S(1,6) = p1^2=',s1
+ 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,*) ''
+ !
+ !
+ call cpu_time(t1)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call init_invs()
+ !
+ ! The results are written to the file with unit 17
+ !
+ !
+ if (rank == 0) then
+ !
+ res6 = a60(s_null)
+ !
+ else if (rank == 1) then
+ !
+ !
+ res6 = a61(znum1,s_null)
+ !
+ else if (rank == 2) then
+ !
+ res6 = a62(znum1,znum2,s_null)
+ !
+ else if (rank == 3) then
+ !
+ res6 = a63(znum1,znum2,znum3,s_null)
+ !
+ else if (rank == 4) then
+ !
+ res6 = a64(znum1,znum2,znum3,znum4,s_null)
+ !
+ else if (rank == 5) then
+ !
+ res6 = a65(znum1,znum2,znum3,znum4,znum5,s_null)
+ !
+ else if (rank == 6) then
+ !
+ res6 = a66(znum1,znum2,znum3,znum4,znum5,znum6,s_null)
+ !
+ end if
+
+ !
+ call cpu_time(t2)
+ !
+ 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,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
+ write (17,*) ''
+ !
+ !
+ write (17,*) 'cpu time=',t2-t1
+ !
+ write (18,'("a6[znum1,znum2,znum3,znum4,znum5,znum6]={",f18.10,1x,", ",1x,f18.10,",")') real(res6%a,ki),aimag(res6%a)
+ write (18,'(f18.10,1x,",",1x,f18.10,",")') real(res6%b,ki),aimag(res6%b)
+ write (18,'(f18.10,1x,",",1x,f18.10,"}")') real(res6%c,ki),aimag(res6%c)
+ !
+ !
+ call exitgolem95()
+ !
+ close(16)
+ close(17)
+ close(18)
+ close(19)
+ !
+ 101 format(4f17.10)
+ 11 format(1I5)
+ 12 format(10F17.10)
+ 13 format(I9,I9,4I5)
+ !
+end program main
Index: 95/branches/golem95_without_olo_cmake/test/mom_rambo.f
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/mom_rambo.f (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/mom_rambo.f (revision 119)
@@ -0,0 +1,420 @@
+c produces random momenta and saves them into a math file and a .dat file
+c
+ implicit real*8 (a-h,o-z)
+ parameter(pi=3.141592653589793238d0)
+ dimension xm(100),p(4,100),q(4,2)
+
+c number of rambo calls
+ itermax=1
+
+c nlegs is total number of external legs
+ccccccccccccccccccccccccccccccccccccccc
+ nlegs=6
+ccccccccccccccccccccccccccccccccccccccc
+
+ nbmom=nlegs-2
+
+c sqrt of s
+ rs = 1.d0
+
+c open(8,file='momenta.m')
+ open(9,file='momenta.dat')
+
+ wt=0d0
+ ifail=0
+
+c loop over itermax different kinematic points
+ do i=1,itermax
+ write(6,*) " (* ********** momentum set ",i," ********** *) "
+c write(8,*) " (* ********** momentum set ",i," ********** *) "
+c
+c for nlegs > 3: define q1 and q2 in CMS (x,y,z,E)
+
+ if(nlegs.gt.3) then
+
+ q(1,1)= 0.5d0*rs
+ q(2,1)= 0.d0
+ q(3,1)= 0.d0
+ q(4,1)= 0.5d0*rs
+ q(1,2)=-0.5d0*rs
+ q(2,2)= 0.d0
+ q(3,2)= 0.d0
+ q(4,2)= 0.5d0*rs
+
+c massless:
+ do l=1,nbmom
+ xm(l)=0d0
+ enddo
+c masses:
+ xm(1)=0.175d0
+ xm(2)=0.175d0
+c xm(3)=175.d0
+c xm(4)=175.d0
+c xm(5)=0.05d0
+c xm(6)=0.d0
+ do l=3,nlegs
+ xm(l)=0.d0
+ enddo
+
+c write the two initial state momenta to file
+ do j=1,2
+c write(8,*)" p[",ii,",",j,"]=",q(ii,j),";"
+ write(6,101) (q(ii,j),ii=1,4)
+ write(9,101) (q(ii,j),ii=1,4)
+ enddo
+
+ call rambo(nbmom,rs,xm,p,wt)
+c ii labels momentum components,
+c j labels different momenta (up to 100)
+
+c rambo ordering is (x,y,z,E), do relabelling to (E,x,y,z) only in golem files
+c change sign such that sum_{i=1}^N p_i = 0
+ do j=3,nlegs
+ k=j-2
+c write(8,*)" p[",ii+1,",",j,"]=",-p(ii,k),";"
+ write(6,*) (-p(ii,k), ii=1,4)
+ write(9,101) (-p(ii,k), ii=1,4)
+ enddo
+
+ else ! case nlegs <=3
+
+c masses:
+ xm(1)=0.1d0
+ xm(2)=0.3d0
+ xm(3)=0.d0
+ call rambo(nlegs,rs,xm,p,wt)
+ do k=1,nlegs
+ write(6,101) (p(ii,k), ii=1,4)
+ write(9,101) (p(ii,k), ii=1,4)
+ enddo
+
+ endif ! end if nlegs>3
+
+ enddo ! end loop over i=1,itermax
+
+c close(8)
+ close(9)
+ 101 format(4f32.24)
+ 100 format(4f17.10)
+ 102 format(3f16.10)
+ 103 format(f16.10)
+ 11 format(1I5)
+ 12 format(10F17.10)
+ 13 format(I9,I9,4I5)
+ stop
+ end
+*
+********************************************************************
+* RAMBO
+********************************************************************
+ subroutine rambo(n,et,xm,p,wt)
+c------------------------------------------------------
+c
+c rambo
+c
+c ra(ndom) m(omenta) b(eautifully) o(rganized)
+c
+c a democratic multi-particle phase space generator
+c authors: s.d. ellis, r. kleiss, w.j. stirling
+c this is version 1.0 - written by r. kleiss
+c
+c n = number of particles (>1, in this version <101)
+c et = total centre-of-mass energy
+c xm = particle masses ( dim=100 )
+c p = particle momenta ( dim=(4,100) )
+c wt = weight of the event
+c
+c------------------------------------------------------
+ implicit real*8(a-h,o-z)
+ dimension xm(100),p(4,100),q(4,100),z(100),r(4),
+ . b(3),p2(100),xm2(100),e(100),v(100),iwarn(5)
+ data acc/1.d-14/,itmax/6/,ibegin/0/,iwarn/5*0/
+c
+c initialization step: factorials for the phase space weight
+ if(ibegin.ne.0) goto 103
+ ibegin=1
+ twopi=8.*datan(1.d0)
+ po2log=log(twopi/4.)
+ z(2)=po2log
+ do 101 k=3,100
+ 101 z(k)=z(k-1)+po2log-2.*log(dfloat(k-2))
+ do 102 k=3,100
+ 102 z(k)=(z(k)-log(dfloat(k-1)))
+c
+c check on the number of particles
+ 103 if(n.gt.1.and.n.lt.101) goto 104
+ print 1001,n
+ stop
+c
+c check whether total energy is sufficient; count nonzero masses
+ 104 xmt=0.
+ nm=0
+ do 105 i=1,n
+ if(xm(i).ne.0.d0) nm=nm+1
+ 105 xmt=xmt+abs(xm(i))
+ if(xmt.le.et) goto 201
+ print 1002,xmt,et
+ stop
+c
+c the parameter values are now accepted
+c
+c generate n massless momenta in infinite phase space
+ 201 do 202 i=1,n
+ rrn=rn(1)
+ c=2.*rrn-1.
+ s=sqrt(1.-c*c)
+ rrn=rn(2)
+ f=twopi*rrn
+ rrn1=rn(3)
+ rrn2=rn(4)
+ q(4,i)=-log(rrn1*rrn2)
+ q(3,i)=q(4,i)*c
+ q(2,i)=q(4,i)*s*cos(f)
+ 202 q(1,i)=q(4,i)*s*sin(f)
+c
+c calculate the parameters of the conformal transformation
+ do 203 i=1,4
+ 203 r(i)=0.
+ do 204 i=1,n
+ do 204 k=1,4
+ 204 r(k)=r(k)+q(k,i)
+ rmas=sqrt(r(4)**2-r(3)**2-r(2)**2-r(1)**2)
+ do 205 k=1,3
+ 205 b(k)=-r(k)/rmas
+ g=r(4)/rmas
+ a=1./(1.+g)
+ x=et/rmas
+c
+c transform the q's conformally into the p's
+ do 207 i=1,n
+ bq=b(1)*q(1,i)+b(2)*q(2,i)+b(3)*q(3,i)
+ do 206 k=1,3
+ 206 p(k,i)=x*(q(k,i)+b(k)*(q(4,i)+a*bq))
+ 207 p(4,i)=x*(g*q(4,i)+bq)
+c
+c calculate weight and possible warnings
+ wt=po2log
+ if(n.ne.2) wt=(2.*n-4.)*log(et)+z(n)
+ if(wt.ge.-180.d0) goto 208
+ if(iwarn(1).le.5) print 1004,wt
+ iwarn(1)=iwarn(1)+1
+ 208 if(wt.le. 174.d0) goto 209
+ if(iwarn(2).le.5) print 1005,wt
+ iwarn(2)=iwarn(2)+1
+c
+c return for weighted massless momenta
+ 209 if(nm.ne.0) goto 210
+ wt=exp(wt)
+ return
+c
+c massive particles: rescale the momenta by a factor x
+ 210 xmax=sqrt(1.-(xmt/et)**2)
+ do 301 i=1,n
+ xm2(i)=xm(i)**2
+ 301 p2(i)=p(4,i)**2
+ iter=0
+ x=xmax
+ accu=et*acc
+ 302 f0=-et
+ g0=0.
+ x2=x*x
+ do 303 i=1,n
+ e(i)=sqrt(xm2(i)+x2*p2(i))
+ f0=f0+e(i)
+ 303 g0=g0+p2(i)/e(i)
+ if(abs(f0).le.accu) goto 305
+ iter=iter+1
+ if(iter.le.itmax) goto 304
+ print 1006,itmax
+ goto 305
+ 304 x=x-f0/(x*g0)
+ goto 302
+ 305 do 307 i=1,n
+ v(i)=x*p(4,i)
+ do 306 k=1,3
+ 306 p(k,i)=x*p(k,i)
+ 307 p(4,i)=e(i)
+c
+c calculate the mass-effect weight factor
+ wt2=1.
+ wt3=0.
+ do 308 i=1,n
+ wt2=wt2*v(i)/e(i)
+ 308 wt3=wt3+v(i)**2/e(i)
+ wtm=(2.*n-3.)*log(x)+log(wt2/wt3*et)
+c
+c return for weighted massive momenta
+ wt=wt+wtm
+ if(wt.ge.-180.d0) goto 309
+ if(iwarn(3).le.5) print 1004,wt
+ iwarn(3)=iwarn(3)+1
+ 309 if(wt.le. 174.d0) goto 310
+ if(iwarn(4).le.5) print 1005,wt
+ iwarn(4)=iwarn(4)+1
+ 310 wt=exp(wt)
+ return
+c
+ 1001 format(' rambo fails: # of particles =',i5,' is not allowed')
+ 1002 format(' rambo fails: total mass =',d15.6,' is not',
+ . ' smaller than total energy =',d15.6)
+ 1004 format(' rambo warns: weight = exp(',f20.9,') may underflow')
+ 1005 format(' rambo warns: weight = exp(',f20.9,') may overflow')
+ 1006 format(' rambo warns:',i3,' iterations did not give the',
+ . ' desired accuracy =',d15.6)
+ end
+***************************************************************
+*
+*
+* random number generator
+*
+ function rn(idummy)
+ real*8 rn,ran
+ common/rseeds/i1,i2
+ save init
+ data init /1/
+ i1=3823
+ i2=8151
+ if (init.eq.1) then
+ init=0
+* read(*,*)i1,i2
+c write(*,*) '* seeding with (',i1,',',i2,')'
+ call rmarin(i1,i2)
+ end if
+*
+ 10 call ranmar(ran)
+ if (ran.lt.1d-16) goto 10
+ rn=ran
+*
+ end
+*
+ subroutine ranmar(rvec)
+* -----------------
+* universal random number generator proposed by marsaglia and zaman
+* in report fsu-scri-87-50
+* in this version rvec is a double precision variable.
+ implicit real*8(a-h,o-z)
+ common/ raset1 / ranu(97),ranc,rancd,rancm
+ common/ raset2 / iranmr,jranmr
+ save /raset1/,/raset2/
+ uni = ranu(iranmr) - ranu(jranmr)
+ if(uni .lt. 0d0) uni = uni + 1d0
+ ranu(iranmr) = uni
+ iranmr = iranmr - 1
+ jranmr = jranmr - 1
+ if(iranmr .eq. 0) iranmr = 97
+ if(jranmr .eq. 0) jranmr = 97
+ ranc = ranc - rancd
+ if(ranc .lt. 0d0) ranc = ranc + rancm
+ uni = uni - ranc
+ if(uni .lt. 0d0) uni = uni + 1d0
+ rvec = uni
+ end
+
+ subroutine rmarin(ij,kl)
+* -----------------
+* initializing routine for ranmar, must be called before generating
+* any pseudorandom numbers with ranmar. the input values should be in
+* the ranges 0<=ij<=31328 ; 0<=kl<=30081
+ implicit real*8(a-h,o-z)
+ common/ raset1 / ranu(97),ranc,rancd,rancm
+ common/ raset2 / iranmr,jranmr
+ save /raset1/,/raset2/
+* this shows correspondence between the simplified input seeds ij, kl
+* and the original marsaglia-zaman seeds i,j,k,l.
+* to get the standard values in the marsaglia-zaman paper (i=12,j=34
+* k=56,l=78) put ij=1802, kl=9373
+ i = mod( ij/177 , 177 ) + 2
+ j = mod( ij , 177 ) + 2
+ k = mod( kl/169 , 178 ) + 1
+ l = mod( kl , 169 )
+ do 300 ii = 1 , 97
+ s = 0d0
+ t = .5d0
+ do 200 jj = 1 , 24
+ m = mod( mod(i*j,179)*k , 179 )
+ i = j
+ j = k
+ k = m
+ l = mod( 53*l+1 , 169 )
+ if(mod(l*m,64) .ge. 32) s = s + t
+ t = .5d0*t
+ 200 continue
+ ranu(ii) = s
+ 300 continue
+ ranc = 362436d0 / 16777216d0
+ rancd = 7654321d0 / 16777216d0
+ rancm = 16777213d0 / 16777216d0
+ iranmr = 97
+ jranmr = 33
+ end
+ double precision function rnnew(dummy)
+*
+* random number function taken from knuth
+* (seminumerical algorithms).
+* method is x(n)=mod(x(n-55)-x(n-24),1/fmodul)
+* no provision yet for control over the seed number.
+*
+* ranf gives one random number between 0 and 1.
+* irn55 generates 55 random numbers between 0 and 1/fmodul.
+* in55 initializes the 55 numbers and warms up the sequence.
+*
+ implicit double precision (a-h,o-z)
+ parameter (fmodul=1.d-09)
+ integer ia(55)
+ save ia
+ data ncall/0/
+ data mcall/55/
+ if( ncall.eq.0 ) then
+ call in55 ( ia,234612947 )
+ ncall = 1
+ endif
+ if ( mcall.eq.0 ) then
+ call irn55(ia)
+ mcall=55
+ endif
+ rnnew=ia(mcall)*fmodul
+ mcall=mcall-1
+ end
+
+ subroutine in55(ia,ix)
+ parameter (modulo=1000000000)
+ integer ia(55)
+ ia(55)=ix
+ j=ix
+ k=1
+ do 10 i=1,54
+ ii=mod(21*i,55)
+ ia(ii)=k
+ k=j-k
+ if(k.lt.0)k=k+modulo
+ j=ia(ii)
+ 10 continue
+ do 20 i=1,10
+ call irn55(ia)
+ 20 continue
+ end
+
+ subroutine irn55(ia)
+ parameter (modulo=1000000000)
+ integer ia(55)
+ do 10 i=1,24
+ j=ia(i)-ia(i+31)
+ if(j.lt.0)j=j+modulo
+ ia(i)=j
+ 10 continue
+ do 20 i=25,55
+ j=ia(i)-ia(i-24)
+ if(j.lt.0)j=j+modulo
+ ia(i)=j
+ 20 continue
+ end
+************************************************************************
+*
+ function dot(a,b)
+ implicit real*8(a-h,o-z)
+ dimension a(4),b(4)
+ dot=a(4)*b(4)-a(1)*b(1)-a(2)*b(2)-a(3)*b(3)
+ return
+ end
+
+
Index: 95/branches/golem95_without_olo_cmake/test/Readme
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/Readme (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/Readme (revision 119)
@@ -0,0 +1,79 @@
+
+to produce Golem output for a particular numerator and numerical point:
+
+1) define the momenta in the file "momenta.dat" in the following format (4f17.10):
+ if the momenta are p_i=(x_i,y_i,z_i,E_i):
+
+ x1 y1 z1 E1
+ x2 y2 z2 E2
+ .
+ .
+ etc.
+
+ You can also use the file "mom_rambo.f" to generate momenta
+
+ To calculate an N-point function
+ (N being defined by the user in param.input),
+ the program will use the first N momenta found in
+ momenta.dat and test momentum
+ conservation, i.e. \sum_{i=1}^N p_i = 0.
+
+
+2) to choose the number of legs, rank and numerator;
+ * edit the file "param.input"
+ * run - maketest.pl
+
+
+Options: one can choose to calculate only a particular numerator
+ => give labels of Feynman parameters in the numerator to be calculated
+ or calculate all possible numerators in one go
+ => put "all" in the corresponding rubric of param.input
+
+ different numerical points can be distinguished by giving them
+ a label which will appear in the output files
+
+OUTPUT: the program produces
+
+(a): a separate output file called N[nb of legs][rank]_[pt].out
+ for each individual numerator
+ ([pt] denotes the "label" of a particular numerical point,
+ which can be chosen by the user to distinguish results
+ for different numerical points)
+
+(b): a file called N[nb of legs][rank]_[pt].numbers,
+
+ where all form factors that have been calculated
+ for a particular rank and number of legs and numerical point
+ are appended.
+ For example, if the option "all" has been chosen to
+ calculate all possible combinations of Feynman parameters
+ in the numerator, this file will contain the results for all
+ these numerators.
+ The format is such that it can be read by Mathematica, for
+ example for comparisons to algebraic results.
+ If the result is P2/eps^2+P1/eps+P0,
+ the output is a list
+ aN[j1,...,jr]={Re[P2],Im[P2],Re[P1],Im[P1],Re[P0],Im[P0]};
+
+
+
+ To clean all *.o, *.exe, a.out files and auxiliary fortran files N*.f90
+ as well as the output files N*.out, N*.numbers:
+ type "make clean"
+
+ If the files N*.out, N*.numbers should be kept when executing "make clean",
+ set the flag $flagdotout in the file cleanup.pl to zero.
+
+ Note: To produce a file "momenta.dat" generated by mom_rambo.f,
+ one has to specify nlegs=N and compile+run it by hand:
+ g77 mom_rambo.f
+ ./a.out
+ For N>3 external legs, the default is that the momenta
+ p1 and p2 are back to back and light-like,
+ and the sum over all momenta is zero.
+ For N=3, the default in mom_rambo.f is sum p_i=(0,0,0,sqrt(s))
+
+ Warning: this setup only works with the default option where LoopTools
+ is not linked, unless the user changes the Makefile manually
+ to link LoopTools
+
Index: 95/branches/golem95_without_olo_cmake/test/param.input
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/param.input (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/param.input (revision 119)
@@ -0,0 +1,39 @@
+################ input parameters for maketest.pl ########################
+#
+# the name of the output file will be
+# N[nb of legs]rank[rank]z[labels of Feynman parameters]pt[label of numerical point].out
+#
+# all lines beginning with # are comments
+# please do not change the ordering of the uncommented lines
+#
+##################################
+#
+# integral specifications:
+#
+######################################################################
+# number of legs (only 3,4,5,6 are possible)
+6
+#---------------------------------------------------------------------
+# rank
+0
+#---------------------------------------------------------------------
+# type of form factor: A, B or C (note: type B exists only for rank>=2, type C for rank>=4)
+A
+#---------------------------------------------------------------------
+# labels of Feynman parameters in the numerator (separated by commas):
+# example: put 2,2,3 for a rank 3 integral with z2^2*z3 in the numerator
+# put "all" if you want to calculate all possible numerators
+# put 0 in scalar case
+# (if list of labels given below is longer than rank r, the first r labels of the list will be taken)
+#
+0
+#all
+#---------------------------------------------------------------------
+# name of the file containing the momenta for the numerical point to be calculated
+momenta.dat
+#---------------------------------------------------------------------
+# label to distinguish different numerical points
+1
+#---------------------------------------------------------------------
+# end of input
+###################################################################
Index: 95/branches/golem95_without_olo_cmake/test/cleanup.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/cleanup.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/cleanup.pl (revision 119)
@@ -0,0 +1,57 @@
+#!/usr/bin/perl -w
+# program removes files which are not needed anymore
+#
+#
+# if *.out and *.numbers files have to be killed as well,
+# set flagdotout to 1
+$flagdotout = 1;
+#
+ print "removing files of type .o\n";
+ foreach $file (<*.o>) {
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ print "removing files of type .exe\n";
+ foreach $file (<*.exe>) {
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ print "removing file of type a.out\n";
+ foreach $file (<a.out>) {
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ print "removing files of type N*.f90\n";
+ foreach $file (<N*.f90*>) {
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ print "removing files of type *.txt\n";
+ foreach $file (<*.txt>) {
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ print "removing files of type *.m\n";
+ foreach $file (<*.m>) {
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ unlink("Makefile");
+#
+ if ($flagdotout==1) {
+ foreach $file (<N*.out>) {
+ print "removing files of type N*.out\n";
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ foreach $file (<N*.numbers>) {
+ print "removing files of type N*.numbers\n";
+ unlink($file) || warn "cannot delete $file : $!";
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: 95/branches/golem95_without_olo_cmake/test/makenumerator.pl
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/makenumerator.pl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/makenumerator.pl (revision 119)
@@ -0,0 +1,253 @@
+#! /usr/bin/perl -w
+#
+# non-interactive version, edit param.input
+#
+use Getopt::Long;
+#GetOptions("parameter=s" => \$paramfile, "zchar=s" => \$zstring);
+GetOptions("parameter=s" => \$paramfile);
+# default name:
+unless ($paramfile) {
+ $paramfile = "param.input";
+}
+# if verbose=1: make and ./comp.exe commands have to be done by user
+$verbose=0;
+#$exename="comp.exe";
+#
+%hash_var = ();
+#@hash_var_keybasics = qw(comp dir);
+@hash_var_keyint = qw(N rank dim Feypars momentafile point);
+@hash_var_key=@hash_var_keyint;
+$ivar = 0;
+# read parameter input file and fill hash %hash_var
+open (EREAD,$paramfile) || die "cannot open $paramfile";
+#open (ET,">param_tmp");
+while(<EREAD>) {
+ chomp;
+# chop white spaces at beginning of lines (and between words)
+ s/^\s+//;
+ unless (/^#/) {
+ s/\s+//g;
+ $hash_var{$hash_var_key[$ivar]} = "$_";
+# print ET "$hash_var_key[$ivar]=$hash_var{$hash_var_key[$ivar]}\n";
+ $ivar++;
+ }
+}
+#close (ET);
+close (EREAD);
+#
+#$verbose=$hash_var{"verbose"};
+$nlegs=$hash_var{"N"};
+$rank=$hash_var{"rank"};
+$dim=$hash_var{"dim"};
+$momfile=$hash_var{"momentafile"};
+#print "momfile=$momfile\n";
+$point=$hash_var{"point"};
+if ($rank != 0) {
+@zlist=split(/,/,$hash_var{"Feypars"});
+}
+else {
+@zlist=();
+}
+$zlength=@zlist;
+#foreach $l (@zlist) {
+#print "zi=$l\n";
+#}
+#
+if ($dim eq "A") {
+$dimvalue=4
+}
+elsif ($dim eq "B") {
+$dimvalue=6
+}
+elsif ($dim eq "C") {
+$dimvalue=8
+}
+else {
+print "invalid type of form factor\n";
+exit;
+}
+$rankFF=eval($rank-$dimvalue+4);
+if ($dimvalue==6 and $rank<2) {
+print "input error: B-type form factors start from rank 2\n";
+exit;
+}
+if ($dimvalue==8 and $rank<4) {
+print "input error: C-type form factors start from rank 4\n";
+exit;
+}
+$help=eval($zlength-$rankFF-1);
+#print "superfluous labels=$help\n";
+for (0 .. $help) {
+#print "endofzlist=$#zlist\n";
+$#zlist--;
+}
+#foreach $l (@zlist) {
+#print "zi=$l\n";
+#}
+$zstring=join("z",@zlist );
+#print "zstring=$zstring\n";
+#print "zlength=$zlength\n";
+#print "rankFF=$rankFF\n";
+if ($zlength < $rankFF) {
+print "input error:\n";
+print "number of Feynman parameters in numerator should not be smaller than rank\n";
+exit;
+}
+#
+if ($rankFF==0) {
+$namebase="N${nlegs}rank${rank}\_pt${point}";
+}
+else {
+$namebase="N${nlegs}rank${rank}z${zstring}\_pt${point}";
+}
+#$fichier="testB52_boxes";
+$fichier="${namebase}";
+$outfile="${namebase}.out";
+#$compfile="N${nlegs}rank${rank}noH\_pt${point}.numbers";
+$compfile="N${nlegs}rank${rank}\_pt${point}.numbers";
+print "calculating $nlegs-point form factors belonging to rank $rank\n";
+if ($rankFF !=0) {
+print "numerator z$zstring\n";
+}
+else {
+print "no Feynman parameters in numerator \n";
+}
+#
+if ($nlegs == 2) {
+ print "direct tests of 2-point integrals not implemented\n";
+ print "please choose 3,4,5 or 6 external legs\n";
+}
+if ($nlegs == 0) {
+ $fichier = "demo_detg";
+ print "test numerical stability\n";
+}
+#
+#$maskfile="mask_${nlegs}point_pt${point}";
+$maskfile="mask_${nlegs}point";
+########### create f90 file according ot input ########
+open(EWRITE,">temp") || die "cannot create temp";
+open(EREAD,"$maskfile") || die "cannot read $maskfile";
+#
+while (<EREAD>) {
+ chomp;
+ if (/momentafile/) {
+ s/momentafile/$momfile/;
+ }
+ if (/outfile/) {
+ s/outfile/$outfile/;
+ }
+ if (/compfile/) {
+ s/compfile/$compfile/;
+ }
+ if (/ndim=dim/) {
+ s/ndim=dim/ndim=$dimvalue/;
+ }
+ if (/rank=rank/) {
+ s/rank=rank/rank=$rank/;
+ }
+ if (/znum1/) {
+ if ($rankFF > 0) {
+ s/znum1/$zlist[0]/g;
+ }
+ else {s/znum1/0/g;}
+ }
+ if (/znum2/) {
+ if ($rankFF > 1) {
+ s/znum2/$zlist[1]/g;
+ }
+ else {s/znum2/0/g;}
+ }
+ if (/znum3/) {
+ if ($rankFF > 2) {
+ s/znum3/$zlist[2]/g;
+ }
+ else {s/znum3/0/g;}
+ }
+ if (/znum4/) {
+ if ($rankFF > 3) {
+ s/znum4/$zlist[3]/g;
+ }
+ else {s/znum4/0/g;}
+ }
+ if (/znum5/) {
+ if ($rankFF > 4) {
+ s/znum5/$zlist[4]/g;
+ }
+ else {s/znum5/0/g;}
+ }
+ if (/znum6/) {
+ if ($rankFF > 5) {
+ s/znum6/$zlist[5]/g;
+ }
+ else {s/znum6/0/g;}
+ }
+ print EWRITE "$_\n";
+}
+#
+close(EREAD);
+close(EWRITE);
+#
+system("mv temp $fichier.f90");
+######################################################
+# create file where plain Fortran result will be written to
+open(EW,">>$compfile") || die "cannot create $compfile";
+#print EW "N=$nlegs\n";
+#print EW "rank=$rank\n";
+#print EW "point=$point\n";
+print EW "\n";
+close(EW);
+############ create Makefile ####################
+open(EWRITE,">Make_temp") || die "cannot create Make_temp";
+open(EREAD,"Makefile_proto") || die "cannot read Makefile_proto";
+#
+while (<EREAD>) {
+ chomp;
+ if (m/MAINC =/) {
+ print EWRITE "MAINC =\t$fichier.o\n"
+ }
+ else {
+ print EWRITE "$_\n";
+ }
+}
+#
+close(EREAD);
+close(EWRITE);
+#
+system("mv Make_temp Makefile");
+#
+if ($verbose==1) {
+print "The Makefile has been created\n";
+print "Please, run:\n";
+print "make\n";
+print "./comp.exe\n"
+}
+
+######################################################################
+# returns maximum value of a list of positive or zero numbers
+sub maxoflist {
+ my (@inputlist) = @_;
+ $nbelements=@inputlist;
+ $max=0;
+# print "$nbelements\n";
+ for ($i=0;$i<$nbelements;$i++) {
+ for ($j=$i;$j<$nbelements;$j++) {
+ if ($inputlist[$j]>$max) {$max=$inputlist[$j]}
+ }
+ }
+ return($max);
+}
+# returns minimum value of a list of positive or zero numbers
+sub minoflist {
+ my (@inputlist) = @_;
+ $nbelements=@inputlist;
+ $min=maxoflist(@inputlist);
+ for ($i=0;$i<$nbelements-1;$i++) {
+ for ($j=$i;$j<$nbelements;$j++) {
+ if ($inputlist[$j]<$min) {$min=$inputlist[$j]}
+# print "$min\n";
+ }
+ }
+ return($min);
+}
+# *********************************************************************
+
Index: 95/branches/golem95_without_olo_cmake/test/Makefile_proto.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/test/Makefile_proto.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/test/Makefile_proto.in (revision 119)
@@ -0,0 +1,30 @@
+#
+# Use GNUmake (if not Linux, use gmake)
+# It will be modified by test/maketest.pl
+#
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/@PACKAGE@
+LIBAVHOLO=${libdir}/libavh_olo.a
+
+link_to_golem95=${libdir}/lib@GENERIC_LIBRARY_NAME@.a
+
+FC = @FC@
+FCFLAGS = @FCFLAGS@ -I${includedir}
+
+FCLD = $(FC)
+LDFLAGS = ${link_to_golem95} ${LIBAVHOLO}
+
+PERL = @PERL@
+
+%.o : %.f90
+ $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c $(FCFLAGS_f90) $<
+
+MAINC =
+
+comp: $(MAINC)
+ $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) -o $@.exe $^ $(AM_LDFLAGS) $(LDFLAGS)
+
+clean:
+ $(PERL) cleanup.pl
Index: 95/branches/golem95_without_olo_cmake/test
===================================================================
--- 95/branches/golem95_without_olo_cmake/test (revision 118)
+++ 95/branches/golem95_without_olo_cmake/test (revision 119)
Property changes on: 95/branches/golem95_without_olo_cmake/test
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/m4/ltsugar.m4
===================================================================
--- 95/branches/golem95_without_olo_cmake/m4/ltsugar.m4 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/m4/ltsugar.m4 (revision 119)
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
Index: 95/branches/golem95_without_olo_cmake/m4/libtool.m4
===================================================================
--- 95/branches/golem95_without_olo_cmake/m4/libtool.m4 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/m4/libtool.m4 (revision 119)
@@ -0,0 +1,7365 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+ ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+ lt_cl_success=:
+ test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+ exec AS_MESSAGE_LOG_FD>/dev/null
+ $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+ exec AS_MESSAGE_LOG_FD>>config.log
+ $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_XSI_SHELLFNS
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=echo
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+[$]*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+ [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC*)
+ # IBM XL 8.0 on PPC
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])], [
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ ])
+ LDFLAGS="$save_LDFLAGS"
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+ [[If ld is used when linking, flag to hardcode $libdir into a binary
+ during linking. This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+ [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 will use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ xl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=echo
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${F77-"f77"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${FC-"f95"}
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]+=\$[2]"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+ ;;
+ esac
+])
Index: 95/branches/golem95_without_olo_cmake/m4/ltversion.m4
===================================================================
--- 95/branches/golem95_without_olo_cmake/m4/ltversion.m4 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/m4/ltversion.m4 (revision 119)
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3018 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3018])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3018'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
Index: 95/branches/golem95_without_olo_cmake/m4/lt~obsolete.m4
===================================================================
--- 95/branches/golem95_without_olo_cmake/m4/lt~obsolete.m4 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/m4/lt~obsolete.m4 (revision 119)
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
Index: 95/branches/golem95_without_olo_cmake/m4/ltoptions.m4
===================================================================
--- 95/branches/golem95_without_olo_cmake/m4/ltoptions.m4 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/m4/ltoptions.m4 (revision 119)
@@ -0,0 +1,368 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
Index: 95/branches/golem95_without_olo_cmake/configure
===================================================================
--- 95/branches/golem95_without_olo_cmake/configure (revision 0)
+++ 95/branches/golem95_without_olo_cmake/configure (revision 119)
@@ -0,0 +1,20400 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ # Preserve -v and -x to the replacement shell.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+ esac
+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+PACKAGE_URL=
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+avh_olo_real_kind
+fortran_real_kind
+lt_real_kind
+case_wout_lt
+case_with_lt
+LIBLOOPTOOLS
+COMPILE_TENSREC_FALSE
+COMPILE_TENSREC_TRUE
+PERL
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+AR
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+FCFLAGS_f90
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+ac_ct_CC
+CPPFLAGS
+CFLAGS
+CC
+FCLIBS
+ac_ct_FC
+FCFLAGS
+FC
+OBJEXT
+EXEEXT
+ac_ct_F77
+LDFLAGS
+FFLAGS
+F77
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+GENERIC_VERSION
+GENERIC_LIBRARY_NAME
+GENERIC_LIBRARY_VERSION
+GENERIC_API_VERSION
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_tensrec
+with_looptools
+with_lt_precision
+with_precision
+with_avh_olo_precision
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+F77
+FFLAGS
+LDFLAGS
+LIBS
+FC
+FCFLAGS
+CC
+CFLAGS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-tensrec switch off tensorial reconstruction interface
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-looptools enable linking to LoopTools
+ --with-lt-precision set the precision used by LoopTools to either
+ 'double' or 'quadruple'. [default=double]
+ --with-precision set the precision of the library to either 'double'
+ or 'quadruple'. [default=double]
+ --with-avh_olo-precision
+ set the precision of OneLOop to either 'double' or
+ 'quadruple'. [default=double]
+
+Some influential environment variables:
+ F77 Fortran 77 compiler command
+ FFLAGS Fortran 77 compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ FC Fortran compiler command
+ FCFLAGS Fortran compiler flags
+ CC C compiler command
+ CFLAGS C compiler flags
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_f77_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_f77_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_f77_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_f77_try_compile
+
+# ac_fn_fc_try_compile LINENO
+# ---------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_fc_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_fc_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_fc_try_compile
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_f77_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_f77_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_f77_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_f77_try_link
+
+# ac_fn_fc_try_link LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_fc_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_fc_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_fc_try_link
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.68. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+GENERIC_LIBRARY_NAME=golem
+GENERIC_PACKAGE_NAME=golem95
+
+#release versioning
+GENERIC_MAJOR_VERSION=1
+GENERIC_MINOR_VERSION=2
+GENERIC_MICRO_VERSION=1
+
+#API version (often = GENERIC_MAJOR_VERSION.GENERIC_MINOR_VERSION)
+GENERIC_API_VERSION=$GENERIC_MAJOR_VERSION.$GENERIC_MINOR_VERSION
+
+
+#shared library versioning
+GENERIC_LIBRARY_VERSION=1:1:1
+# | | |
+# +------+ | +---+
+# | | |
+# current:revision:age
+# | | |
+# | | +- increment if interfaces have been added
+# | | set to zero if interfaces have been removed
+# or changed
+# | +- increment if source code has changed
+# | set to zero if current is incremented
+# +- increment if interfaces have been added, removed or changed
+
+
+
+
+PACKAGE=$GENERIC_PACKAGE_NAME
+
+
+GENERIC_VERSION=$GENERIC_MAJOR_VERSION.$GENERIC_MINOR_VERSION.$GENERIC_MICRO_VERSION
+
+
+VERSION=$GENERIC_VERSION
+
+
+ac_aux_dir=
+for ac_dir in config.aux "$srcdir"/config.aux; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in config.aux \"$srcdir\"/config.aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+am__api_version='1.11'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=$PACKAGE
+ VERSION=$VERSION
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in gfortran ifort g77 f77 xlf frt pgf77 fort77 fl32 af77
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$F77"; then
+ ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5
+$as_echo "$F77" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$F77" && break
+ done
+fi
+if test -z "$F77"; then
+ ac_ct_F77=$F77
+ for ac_prog in gfortran ifort g77 f77 xlf frt pgf77 fort77 fl32 af77
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_F77"; then
+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_F77="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5
+$as_echo "$ac_ct_F77" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_F77" && break
+done
+
+ if test "x$ac_ct_F77" = x; then
+ F77=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ F77=$ac_ct_F77
+ fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+rm -f a.out
+
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Fortran 77 compiler works" >&5
+$as_echo_n "checking whether the Fortran 77 compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "Fortran 77 compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler default output file name" >&5
+$as_echo_n "checking for Fortran 77 compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+ open(unit=9,file='conftest.out')
+ close(unit=9)
+
+ end
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run Fortran 77 compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; }
+if ${ac_cv_f77_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5
+$as_echo "$ac_cv_f77_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5
+$as_echo_n "checking whether $F77 accepts -g... " >&6; }
+if ${ac_cv_prog_f77_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ FFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ ac_cv_prog_f77_g=yes
+else
+ ac_cv_prog_f77_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5
+$as_echo "$ac_cv_prog_f77_g" >&6; }
+if test "$ac_test_FFLAGS" = set; then
+ FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-g -O2"
+ else
+ FFLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-O2"
+ else
+ FFLAGS=
+ fi
+fi
+
+if test $ac_compiler_gnu = yes; then
+ G77=yes
+else
+ G77=
+fi
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in gfortran ifort g77 f77 xlf frt pgf77 fort77 fl32 af77
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$FC"; then
+ ac_cv_prog_FC="$FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FC=$ac_cv_prog_FC
+if test -n "$FC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5
+$as_echo "$FC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$FC" && break
+ done
+fi
+if test -z "$FC"; then
+ ac_ct_FC=$FC
+ for ac_prog in gfortran ifort g77 f77 xlf frt pgf77 fort77 fl32 af77
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_FC"; then
+ ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_FC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FC=$ac_cv_prog_ac_ct_FC
+if test -n "$ac_ct_FC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5
+$as_echo "$ac_ct_FC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_FC" && break
+done
+
+ if test "x$ac_ct_FC" = x; then
+ FC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ FC=$ac_ct_FC
+ fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
+if ${ac_cv_fc_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5
+$as_echo "$ac_cv_fc_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FCFLAGS=${FCFLAGS+set}
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
+$as_echo_n "checking whether $FC accepts -g... " >&6; }
+if ${ac_cv_prog_fc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ FCFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_cv_prog_fc_g=yes
+else
+ ac_cv_prog_fc_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5
+$as_echo "$ac_cv_prog_fc_g" >&6; }
+if test "$ac_test_FCFLAGS" = set; then
+ FCFLAGS=$ac_save_FCFLAGS
+elif test $ac_cv_prog_fc_g = yes; then
+ if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+ FCFLAGS="-g -O2"
+ else
+ FCFLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+ FCFLAGS="-O2"
+ else
+ FCFLAGS=
+ fi
+fi
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+
+if test -z "$with_dist"; then
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5
+$as_echo_n "checking how to get verbose linking output from $FC... " >&6; }
+if ${ac_cv_prog_fc_v+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_cv_prog_fc_v=
+# Try some options frequently used verbose output
+for ac_verb in -v -verbose --verbose -V -\#\#\#; do
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS="$FCFLAGS $ac_verb"
+eval "set x $ac_link"
+shift
+$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
+$as_echo "$ac_fc_v_output" >&5
+FCFLAGS=$ac_save_FCFLAGS
+
+rm -rf conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_fc_v_output="`echo $ac_fc_v_output |
+ grep 'LPATH is:' |
+ sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+# that detects unbalanced quotes in FLIBS should be implemented
+# and (ugh) tested at some point.
+case $ac_fc_v_output in
+ # If we are using xlf then replace all the commas with spaces.
+ *xlfentry*)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
+
+ # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+ # $LIBS confuse us, and the libraries appear later in the output anyway).
+ *mGLOB_options_string*)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+
+ # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+ # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+ # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+ *-cmdline\ * | *-ignore\ * | *-def\ *)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed "\
+ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g
+ s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g
+ s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;;
+
+ # If we are using Cray Fortran then delete quotes.
+ *cft90*)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+esac
+
+
+ # look for -l* and *.a constructs in the output
+ for ac_arg in $ac_fc_v_output; do
+ case $ac_arg in
+ [\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
+ ac_cv_prog_fc_v=$ac_verb
+ break 2 ;;
+ esac
+ done
+done
+if test -z "$ac_cv_prog_fc_v"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5
+$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;}
+fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5
+$as_echo "$as_me: WARNING: compilation failed" >&2;}
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5
+$as_echo "$ac_cv_prog_fc_v" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5
+$as_echo_n "checking for Fortran libraries of $FC... " >&6; }
+if ${ac_cv_fc_libs+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$FCLIBS" != "x"; then
+ ac_cv_fc_libs="$FCLIBS" # Let the user override the test.
+else
+
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v"
+eval "set x $ac_link"
+shift
+$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
+$as_echo "$ac_fc_v_output" >&5
+FCFLAGS=$ac_save_FCFLAGS
+
+rm -rf conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_fc_v_output="`echo $ac_fc_v_output |
+ grep 'LPATH is:' |
+ sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+# that detects unbalanced quotes in FLIBS should be implemented
+# and (ugh) tested at some point.
+case $ac_fc_v_output in
+ # If we are using xlf then replace all the commas with spaces.
+ *xlfentry*)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed 's/,/ /g'` ;;
+
+ # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+ # $LIBS confuse us, and the libraries appear later in the output anyway).
+ *mGLOB_options_string*)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+
+ # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+ # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+ # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+ *-cmdline\ * | *-ignore\ * | *-def\ *)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed "\
+ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g
+ s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g
+ s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;;
+
+ # If we are using Cray Fortran then delete quotes.
+ *cft90*)
+ ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+esac
+
+
+
+ac_cv_fc_libs=
+
+# Save positional arguments (if any)
+ac_save_positional="$@"
+
+set X $ac_fc_v_output
+while test $# != 1; do
+ shift
+ ac_arg=$1
+ case $ac_arg in
+ [\\/]*.a | ?:[\\/]*.a)
+ ac_exists=false
+ for ac_i in $ac_cv_fc_libs; do
+ if test x"$ac_arg" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+
+ if test x"$ac_exists" = xtrue; then :
+
+else
+ ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+ ;;
+ -bI:*)
+ ac_exists=false
+ for ac_i in $ac_cv_fc_libs; do
+ if test x"$ac_arg" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+
+ if test x"$ac_exists" = xtrue; then :
+
+else
+ if test "$ac_compiler_gnu" = yes; then
+ for ac_link_opt in $ac_arg; do
+ ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+ done
+else
+ ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+fi
+ ;;
+ # Ignore these flags.
+ -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
+ |-LANG:=* | -LIST:* | -LNO:* | -link)
+ ;;
+ -lkernel32)
+ test x"$CYGWIN" != xyes && ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+ ;;
+ -[LRuYz])
+ # These flags, when seen by themselves, take an argument.
+ # We remove the space between option and argument and re-iterate
+ # unless we find an empty arg or a new option (starting with -)
+ case $2 in
+ "" | -*);;
+ *)
+ ac_arg="$ac_arg$2"
+ shift; shift
+ set X $ac_arg "$@"
+ ;;
+ esac
+ ;;
+ -YP,*)
+ for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
+ ac_exists=false
+ for ac_i in $ac_cv_fc_libs; do
+ if test x"$ac_j" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+
+ if test x"$ac_exists" = xtrue; then :
+
+else
+ ac_arg="$ac_arg $ac_j"
+ ac_cv_fc_libs="$ac_cv_fc_libs $ac_j"
+fi
+ done
+ ;;
+ -[lLR]*)
+ ac_exists=false
+ for ac_i in $ac_cv_fc_libs; do
+ if test x"$ac_arg" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+
+ if test x"$ac_exists" = xtrue; then :
+
+else
+ ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+ ;;
+ -zallextract*| -zdefaultextract)
+ ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+ ;;
+ # Ignore everything else.
+ esac
+done
+# restore positional arguments
+set X $ac_save_positional; shift
+
+# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen,
+# then we insist that the "run path" must be an absolute path (i.e. it
+# must begin with a "/").
+case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ ac_ld_run_path=`$as_echo "$ac_fc_v_output" |
+ sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
+ test "x$ac_ld_run_path" != x &&
+ if test "$ac_compiler_gnu" = yes; then
+ for ac_link_opt in $ac_ld_run_path; do
+ ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+ done
+else
+ ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path"
+fi
+ ;;
+esac
+fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5
+$as_echo "$ac_cv_fc_libs" >&6; }
+FCLIBS="$ac_cv_fc_libs"
+
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5
+$as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; }
+if ${ac_cv_fc_dummy_main+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_fc_dm_save_LIBS=$LIBS
+ LIBS="$LIBS $FCLIBS"
+ ac_fortran_dm_var=FC_DUMMY_MAIN
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ # First, try linking without a dummy main:
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_fortran_dummy_main=none
+else
+ ac_cv_fortran_dummy_main=unknown
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ if test $ac_cv_fortran_dummy_main = unknown; then
+ for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define $ac_fortran_dm_var $ac_func
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_fortran_dummy_main=$ac_func; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ fi
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main
+ rm -rf conftest*
+ LIBS=$ac_fc_dm_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5
+$as_echo "$ac_cv_fc_dummy_main" >&6; }
+FC_DUMMY_MAIN=$ac_cv_fc_dummy_main
+if test "$FC_DUMMY_MAIN" != unknown; then :
+ if test $FC_DUMMY_MAIN != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define FC_DUMMY_MAIN $FC_DUMMY_MAIN
+_ACEOF
+
+ if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then
+
+$as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h
+
+ fi
+fi
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "linking to Fortran libraries from C fails
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5
+$as_echo_n "checking for Fortran name-mangling scheme... " >&6; }
+if ${ac_cv_fc_mangling+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ subroutine foobar()
+ return
+ end
+ subroutine foo_bar()
+ return
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ mv conftest.$ac_objext cfortran_test.$ac_objext
+
+ ac_save_LIBS=$LIBS
+ LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS"
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ ac_success=no
+ for ac_foobar in foobar FOOBAR; do
+ for ac_underscore in "" "_"; do
+ ac_func="$ac_foobar$ac_underscore"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_success=yes; break 2
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ done
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ if test "$ac_success" = "yes"; then
+ case $ac_foobar in
+ foobar)
+ ac_case=lower
+ ac_foo_bar=foo_bar
+ ;;
+ FOOBAR)
+ ac_case=upper
+ ac_foo_bar=FOO_BAR
+ ;;
+ esac
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ ac_success_extra=no
+ for ac_extra in "" "_"; do
+ ac_func="$ac_foo_bar$ac_underscore$ac_extra"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_success_extra=yes; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ if test "$ac_success_extra" = "yes"; then
+ ac_cv_fc_mangling="$ac_case case"
+ if test -z "$ac_underscore"; then
+ ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore"
+ else
+ ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore"
+ fi
+ if test -z "$ac_extra"; then
+ ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore"
+ else
+ ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore"
+ fi
+ else
+ ac_cv_fc_mangling="unknown"
+ fi
+ else
+ ac_cv_fc_mangling="unknown"
+ fi
+
+ LIBS=$ac_save_LIBS
+ rm -rf conftest*
+ rm -f cfortran_test*
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compile a simple Fortran program
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5
+$as_echo "$ac_cv_fc_mangling" >&6; }
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+case $ac_cv_fc_mangling in
+ "lower case, no underscore, no extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) name" >>confdefs.h
+ ;;
+ "lower case, no underscore, extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h
+ ;;
+ "lower case, underscore, no extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h
+ ;;
+ "lower case, underscore, extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h
+ ;;
+ "upper case, no underscore, no extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h
+ ;;
+ "upper case, no underscore, extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h
+ ;;
+ "upper case, underscore, no extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h
+ ;;
+ "upper case, underscore, extra underscore")
+ $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h
+
+ $as_echo "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5
+$as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;}
+ ;;
+esac
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5
+$as_echo_n "checking for Fortran flag to compile .f90 files... " >&6; }
+if ${ac_cv_fc_srcext_f90+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=f90
+ac_fcflags_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_srcext_f90=unknown
+for ac_flag in none -qsuffix=f=f90 -Tf; do
+ test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_cv_fc_srcext_f90=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.f90
+ac_fcflags_srcext=$ac_fcflags_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5
+$as_echo "$ac_cv_fc_srcext_f90" >&6; }
+if test "x$ac_cv_fc_srcext_f90" = xunknown; then
+ as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5
+else
+ ac_fc_srcext=f90
+ if test "x$ac_cv_fc_srcext_f90" = xnone; then
+ ac_fcflags_srcext=""
+ FCFLAGS_f90=""
+ else
+ ac_fcflags_srcext=$ac_cv_fc_srcext_f90
+ FCFLAGS_f90=$ac_cv_fc_srcext_f90
+ fi
+
+
+fi
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5
+$as_echo_n "checking for Fortran flag needed to accept free-form source... " >&6; }
+if ${ac_cv_fc_freeform+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_fc_freeform=unknown
+ac_fc_freeform_FCFLAGS_save=$FCFLAGS
+for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \
+ -freeform "-f free" +source=free -nfix
+do
+ test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag"
+ cat > conftest.$ac_ext <<_ACEOF
+
+ program freeform
+ ! FIXME: how to best confuse non-freeform compilers?
+ print *, 'Hello ', &
+ 'world.'
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_cv_fc_freeform=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+FCFLAGS=$ac_fc_freeform_FCFLAGS_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5
+$as_echo "$ac_cv_fc_freeform" >&6; }
+if test "x$ac_cv_fc_freeform" = xunknown; then
+ as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5
+else
+ if test "x$ac_cv_fc_freeform" != xnone; then
+ FCFLAGS="$FCFLAGS $ac_cv_fc_freeform"
+ fi
+
+fi
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3018'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:5826: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:5829: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:5832: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 7037 "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$F77"; then
+ ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5
+$as_echo "$F77" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$F77" && break
+ done
+fi
+if test -z "$F77"; then
+ ac_ct_F77=$F77
+ for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_F77"; then
+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_F77="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5
+$as_echo "$ac_ct_F77" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_F77" && break
+done
+
+ if test "x$ac_ct_F77" = x; then
+ F77=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ F77=$ac_ct_F77
+ fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; }
+if ${ac_cv_f77_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5
+$as_echo "$ac_cv_f77_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5
+$as_echo_n "checking whether $F77 accepts -g... " >&6; }
+if ${ac_cv_prog_f77_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ FFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+ ac_cv_prog_f77_g=yes
+else
+ ac_cv_prog_f77_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5
+$as_echo "$ac_cv_prog_f77_g" >&6; }
+if test "$ac_test_FFLAGS" = set; then
+ FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-g -O2"
+ else
+ FFLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+ FFLAGS="-O2"
+ else
+ FFLAGS=
+ fi
+fi
+
+if test $ac_compiler_gnu = yes; then
+ G77=yes
+else
+ G77=
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+
+
+
+
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$FC"; then
+ ac_cv_prog_FC="$FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FC=$ac_cv_prog_FC
+if test -n "$FC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5
+$as_echo "$FC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$FC" && break
+ done
+fi
+if test -z "$FC"; then
+ ac_ct_FC=$FC
+ for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_FC"; then
+ ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_FC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FC=$ac_cv_prog_ac_ct_FC
+if test -n "$ac_ct_FC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5
+$as_echo "$ac_ct_FC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_FC" && break
+done
+
+ if test "x$ac_ct_FC" = x; then
+ FC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ FC=$ac_ct_FC
+ fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
+if ${ac_cv_fc_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5
+$as_echo "$ac_cv_fc_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FCFLAGS=${FCFLAGS+set}
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
+$as_echo_n "checking whether $FC accepts -g... " >&6; }
+if ${ac_cv_prog_fc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ FCFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+ ac_cv_prog_fc_g=yes
+else
+ ac_cv_prog_fc_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5
+$as_echo "$ac_cv_prog_fc_g" >&6; }
+if test "$ac_test_FCFLAGS" = set; then
+ FCFLAGS=$ac_save_FCFLAGS
+elif test $ac_cv_prog_fc_g = yes; then
+ if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+ FCFLAGS="-g -O2"
+ else
+ FCFLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+ FCFLAGS="-O2"
+ else
+ FCFLAGS=
+ fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:9022: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:9026: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:9361: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:9365: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:9466: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:9470: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:9521: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:9525: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=echo
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 11953 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 12049 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+ ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_direct_absolute_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+inherit_rpath_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+ # save warnings/boilerplate of simple test code
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${F77-"f77"}
+ compiler=$CC
+ compiler_F77=$CC
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+ GCC=$G77
+ if test -n "$compiler"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+ GCC_F77="$G77"
+ LD_F77="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_static_F77='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_F77='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_F77='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared_F77=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_F77='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_F77=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_F77='-Bstatic'
+ else
+ lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_F77='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-fPIC'
+ lt_prog_compiler_static_F77='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='--shared'
+ lt_prog_compiler_static_F77='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-fpic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-qpic'
+ lt_prog_compiler_static_F77='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ lt_prog_compiler_wl_F77='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ lt_prog_compiler_wl_F77=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_F77='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl_F77='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl_F77='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl_F77='-Qoption ld '
+ lt_prog_compiler_pic_F77='-PIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic_F77='-Kconform_pic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_can_build_shared_F77=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic_F77='-pic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared_F77=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_F77=
+ ;;
+ *)
+ lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_F77" >&5
+$as_echo "$lt_prog_compiler_pic_F77" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works_F77=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_F77"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:12704: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:12708: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works_F77=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then
+ case $lt_prog_compiler_pic_F77 in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+ esac
+else
+ lt_prog_compiler_pic_F77=
+ lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works_F77=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works_F77=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works_F77=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then
+ :
+else
+ lt_prog_compiler_static_F77=
+fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_F77=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:12803: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:12807: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_F77=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; }
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_F77+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_F77=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:12855: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:12859: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_F77=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag_F77=
+ always_export_symbols_F77=no
+ archive_cmds_F77=
+ archive_expsym_cmds_F77=
+ compiler_needs_object_F77=no
+ enable_shared_with_static_runtimes_F77=no
+ export_dynamic_flag_spec_F77=
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic_F77=no
+ hardcode_direct_F77=no
+ hardcode_direct_absolute_F77=no
+ hardcode_libdir_flag_spec_F77=
+ hardcode_libdir_flag_spec_ld_F77=
+ hardcode_libdir_separator_F77=
+ hardcode_minus_L_F77=no
+ hardcode_shlibpath_var_F77=unsupported
+ inherit_rpath_F77=no
+ link_all_deplibs_F77=unknown
+ module_cmds_F77=
+ module_expsym_cmds_F77=
+ old_archive_from_new_cmds_F77=
+ old_archive_from_expsyms_cmds_F77=
+ thread_safe_flag_spec_F77=
+ whole_archive_flag_spec_F77=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms_F77=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs_F77=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_F77=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs_F77=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77=''
+ ;;
+ m68k)
+ archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_F77=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ allow_undefined_flag_F77=unsupported
+ always_export_symbols_F77=no
+ enable_shared_with_static_runtimes_F77=yes
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_F77='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec_F77=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object_F77=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec_F77=
+ hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+ archive_cmds_F77='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs_F77=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs_F77=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs_F77" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec_F77=
+ export_dynamic_flag_spec_F77=
+ whole_archive_flag_spec_F77=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag_F77=unsupported
+ always_export_symbols_F77=yes
+ archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L_F77=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct_F77=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_F77=''
+ hardcode_direct_F77=yes
+ hardcode_direct_absolute_F77=yes
+ hardcode_libdir_separator_F77=':'
+ link_all_deplibs_F77=yes
+ file_list_spec_F77='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct_F77=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_F77=yes
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_libdir_separator_F77=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec_F77='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_F77=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_F77='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_F77="-z nodefs"
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_F77=' ${wl}-bernotok'
+ allow_undefined_flag_F77=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_F77='$convenience'
+ archive_cmds_need_lc_F77=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77=''
+ ;;
+ m68k)
+ archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec_F77=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec_F77=' '
+ allow_undefined_flag_F77=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds_F77='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes_F77=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc_F77=no
+ hardcode_direct_F77=no
+ hardcode_automatic_F77=yes
+ hardcode_shlibpath_var_F77=unsupported
+ whole_archive_flag_spec_F77=''
+ link_all_deplibs_F77=yes
+ allow_undefined_flag_F77="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=echo
+ archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs_F77=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs_F77=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=yes
+ hardcode_direct_absolute_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+ ;;
+ *)
+ hardcode_direct_F77=yes
+ hardcode_direct_absolute_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat > conftest.$ac_ext <<_ACEOF
+
+ subroutine foo
+ end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc_F77='no'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ inherit_rpath_F77=yes
+ link_all_deplibs_F77=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ newsos6)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ hardcode_direct_absolute_F77=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_F77='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ allow_undefined_flag_F77=unsupported
+ archive_cmds_F77='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag_F77=' -expect_unresolved \*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc_F77='no'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag_F77=' -expect_unresolved \*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec_F77='-rpath $libdir'
+ fi
+ archive_cmds_need_lc_F77='no'
+ hardcode_libdir_separator_F77=:
+ ;;
+
+ solaris*)
+ no_undefined_flag_F77=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds_F77='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_shlibpath_var_F77=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs_F77=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds_F77='$CC -r -o $output$reload_objs'
+ hardcode_direct_F77=no
+ ;;
+ motorola)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ export_dynamic_flag_spec_F77='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs_F77=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag_F77='${wl}-z,text'
+ archive_cmds_need_lc_F77=no
+ hardcode_shlibpath_var_F77=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag_F77='${wl}-z,text'
+ allow_undefined_flag_F77='${wl}-z,nodefs'
+ archive_cmds_need_lc_F77=no
+ hardcode_shlibpath_var_F77=no
+ hardcode_libdir_flag_spec_F77='${wl}-R,$libdir'
+ hardcode_libdir_separator_F77=':'
+ link_all_deplibs_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ *)
+ ld_shlibs_F77=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec_F77='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5
+$as_echo "$ld_shlibs_F77" >&6; }
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+with_gnu_ld_F77=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_F77=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_F77 in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_F77
+ pic_flag=$lt_prog_compiler_pic_F77
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+ allow_undefined_flag_F77=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ archive_cmds_need_lc_F77=no
+ else
+ archive_cmds_need_lc_F77=yes
+ fi
+ allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_F77" >&5
+$as_echo "$archive_cmds_need_lc_F77" >&6; }
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\""
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" ||
+ test -n "$runpath_var_F77" ||
+ test "X$hardcode_automatic_F77" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct_F77" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+ test "$hardcode_minus_L_F77" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_F77=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_F77=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_F77=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5
+$as_echo "$hardcode_action_F77" >&6; }
+
+if test "$hardcode_action_F77" = relink ||
+ test "$inherit_rpath_F77" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+
+archive_cmds_need_lc_FC=no
+allow_undefined_flag_FC=
+always_export_symbols_FC=no
+archive_expsym_cmds_FC=
+export_dynamic_flag_spec_FC=
+hardcode_direct_FC=no
+hardcode_direct_absolute_FC=no
+hardcode_libdir_flag_spec_FC=
+hardcode_libdir_flag_spec_ld_FC=
+hardcode_libdir_separator_FC=
+hardcode_minus_L_FC=no
+hardcode_automatic_FC=no
+inherit_rpath_FC=no
+module_cmds_FC=
+module_expsym_cmds_FC=
+link_all_deplibs_FC=unknown
+old_archive_cmds_FC=$old_archive_cmds
+no_undefined_flag_FC=
+whole_archive_flag_spec_FC=
+enable_shared_with_static_runtimes_FC=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+objext_FC=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+ # save warnings/boilerplate of simple test code
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${FC-"f95"}
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ compiler_FC=$CC
+ for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+ if test -n "$compiler"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+ GCC_FC="$ac_cv_fc_compiler_gnu"
+ LD_FC="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ # Dependencies to place before and after the object being linked:
+predep_objects_FC=
+postdep_objects_FC=
+predeps_FC=
+postdeps_FC=
+compiler_lib_search_path_FC=
+
+cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$compiler_lib_search_path_FC"; then
+ compiler_lib_search_path_FC="${prev}${p}"
+ else
+ compiler_lib_search_path_FC="${compiler_lib_search_path_FC} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$postdeps_FC"; then
+ postdeps_FC="${prev}${p}"
+ else
+ postdeps_FC="${postdeps_FC} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$predep_objects_FC"; then
+ predep_objects_FC="$p"
+ else
+ predep_objects_FC="$predep_objects_FC $p"
+ fi
+ else
+ if test -z "$postdep_objects_FC"; then
+ postdep_objects_FC="$p"
+ else
+ postdep_objects_FC="$postdep_objects_FC $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling FC test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+
+
+case " $postdeps_FC " in
+*" -lc "*) archive_cmds_need_lc_FC=no ;;
+esac
+ compiler_lib_search_dirs_FC=
+if test -n "${compiler_lib_search_path_FC}"; then
+ compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lt_prog_compiler_wl_FC=
+lt_prog_compiler_pic_FC=
+lt_prog_compiler_static_FC=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_static_FC='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_FC='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic_FC='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic_FC='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_FC='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_FC='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared_FC=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_FC='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_FC=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic_FC='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_FC='-Bstatic'
+ else
+ lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_FC='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_FC='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static_FC='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static_FC='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='-fPIC'
+ lt_prog_compiler_static_FC='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='--shared'
+ lt_prog_compiler_static_FC='--static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='-fpic'
+ lt_prog_compiler_static_FC='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static_FC='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='-qpic'
+ lt_prog_compiler_static_FC='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ lt_prog_compiler_wl_FC='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ lt_prog_compiler_wl_FC=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic_FC='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static_FC='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static_FC='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl_FC='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl_FC='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl_FC='-Qoption ld '
+ lt_prog_compiler_pic_FC='-PIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic_FC='-Kconform_pic'
+ lt_prog_compiler_static_FC='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_pic_FC='-KPIC'
+ lt_prog_compiler_static_FC='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl_FC='-Wl,'
+ lt_prog_compiler_can_build_shared_FC=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic_FC='-pic'
+ lt_prog_compiler_static_FC='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared_FC=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_FC=
+ ;;
+ *)
+ lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC"
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_FC" >&5
+$as_echo "$lt_prog_compiler_pic_FC" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_FC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works_FC=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_FC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:15317: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:15321: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works_FC=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_FC" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_FC" = xyes; then
+ case $lt_prog_compiler_pic_FC in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;;
+ esac
+else
+ lt_prog_compiler_pic_FC=
+ lt_prog_compiler_can_build_shared_FC=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works_FC=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works_FC=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works_FC=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_FC" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_FC" = xyes; then
+ :
+else
+ lt_prog_compiler_static_FC=
+fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_FC=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:15416: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:15420: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_FC=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; }
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o_FC=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:15468: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:15472: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o_FC=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_FC" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag_FC=
+ always_export_symbols_FC=no
+ archive_cmds_FC=
+ archive_expsym_cmds_FC=
+ compiler_needs_object_FC=no
+ enable_shared_with_static_runtimes_FC=no
+ export_dynamic_flag_spec_FC=
+ export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic_FC=no
+ hardcode_direct_FC=no
+ hardcode_direct_absolute_FC=no
+ hardcode_libdir_flag_spec_FC=
+ hardcode_libdir_flag_spec_ld_FC=
+ hardcode_libdir_separator_FC=
+ hardcode_minus_L_FC=no
+ hardcode_shlibpath_var_FC=unsupported
+ inherit_rpath_FC=no
+ link_all_deplibs_FC=unknown
+ module_cmds_FC=
+ module_expsym_cmds_FC=
+ old_archive_from_new_cmds_FC=
+ old_archive_from_expsyms_cmds_FC=
+ thread_safe_flag_spec_FC=
+ whole_archive_flag_spec_FC=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms_FC=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs_FC=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec_FC='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_FC="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_FC=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs_FC=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_FC=''
+ ;;
+ m68k)
+ archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_minus_L_FC=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_FC=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ allow_undefined_flag_FC=unsupported
+ always_export_symbols_FC=no
+ enable_shared_with_static_runtimes_FC=yes
+ export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct_FC=no
+ hardcode_shlibpath_var_FC=no
+ hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_FC='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_FC='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec_FC=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object_FC=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec_FC=
+ hardcode_libdir_flag_spec_ld_FC='-rpath $libdir'
+ archive_cmds_FC='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs_FC=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs_FC=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct_FC=yes
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs_FC" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec_FC=
+ export_dynamic_flag_spec_FC=
+ whole_archive_flag_spec_FC=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag_FC=unsupported
+ always_export_symbols_FC=yes
+ archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L_FC=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct_FC=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_FC='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_FC=''
+ hardcode_direct_FC=yes
+ hardcode_direct_absolute_FC=yes
+ hardcode_libdir_separator_FC=':'
+ link_all_deplibs_FC=yes
+ file_list_spec_FC='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct_FC=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_FC=yes
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_libdir_separator_FC=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec_FC='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_FC=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_FC='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_FC='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_FC="-z nodefs"
+ archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_FC=' ${wl}-bernotok'
+ allow_undefined_flag_FC=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_FC='$convenience'
+ archive_cmds_need_lc_FC=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_FC=''
+ ;;
+ m68k)
+ archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_minus_L_FC=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec_FC=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec_FC=' '
+ allow_undefined_flag_FC=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds_FC='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path_FC='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes_FC=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc_FC=no
+ hardcode_direct_FC=no
+ hardcode_automatic_FC=yes
+ hardcode_shlibpath_var_FC=unsupported
+ whole_archive_flag_spec_FC=''
+ link_all_deplibs_FC=yes
+ allow_undefined_flag_FC="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=echo
+ archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs_FC=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs_FC=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec_FC='-R$libdir'
+ hardcode_direct_FC=yes
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes
+ hardcode_minus_L_FC=yes
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds_FC='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_FC='-R$libdir'
+ hardcode_direct_FC=yes
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_FC=:
+ hardcode_direct_FC=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_FC=yes
+ export_dynamic_flag_spec_FC='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_FC='+b $libdir'
+ hardcode_libdir_separator_FC=:
+ hardcode_direct_FC=yes
+ hardcode_direct_absolute_FC=yes
+ export_dynamic_flag_spec_FC='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_FC=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_FC='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_FC=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct_FC=no
+ hardcode_shlibpath_var_FC=no
+ ;;
+ *)
+ hardcode_direct_FC=yes
+ hardcode_direct_absolute_FC=yes
+ export_dynamic_flag_spec_FC='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_FC=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat > conftest.$ac_ext <<_ACEOF
+
+ subroutine foo
+ end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+
+ archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc_FC='no'
+ hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_FC=:
+ inherit_rpath_FC=yes
+ link_all_deplibs_FC=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec_FC='-R$libdir'
+ hardcode_direct_FC=yes
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ newsos6)
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes
+ hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_FC=:
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct_FC=yes
+ hardcode_shlibpath_var_FC=no
+ hardcode_direct_absolute_FC=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_FC='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_FC='-R$libdir'
+ ;;
+ *)
+ archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs_FC=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_minus_L_FC=yes
+ allow_undefined_flag_FC=unsupported
+ archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds_FC='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag_FC=' -expect_unresolved \*'
+ archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc_FC='no'
+ hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_FC=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag_FC=' -expect_unresolved \*'
+ archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec_FC='-rpath $libdir'
+ fi
+ archive_cmds_need_lc_FC='no'
+ hardcode_libdir_separator_FC=:
+ ;;
+
+ solaris*)
+ no_undefined_flag_FC=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds_FC='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds_FC='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds_FC='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec_FC='-R$libdir'
+ hardcode_shlibpath_var_FC=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec_FC='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs_FC=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds_FC='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_direct_FC=yes
+ hardcode_minus_L_FC=yes
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds_FC='$CC -r -o $output$reload_objs'
+ hardcode_direct_FC=no
+ ;;
+ motorola)
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_FC=no
+ export_dynamic_flag_spec_FC='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_FC=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs_FC=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag_FC='${wl}-z,text'
+ archive_cmds_need_lc_FC=no
+ hardcode_shlibpath_var_FC=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag_FC='${wl}-z,text'
+ allow_undefined_flag_FC='${wl}-z,nodefs'
+ archive_cmds_need_lc_FC=no
+ hardcode_shlibpath_var_FC=no
+ hardcode_libdir_flag_spec_FC='${wl}-R,$libdir'
+ hardcode_libdir_separator_FC=':'
+ link_all_deplibs_FC=yes
+ export_dynamic_flag_spec_FC='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_FC='-L$libdir'
+ hardcode_shlibpath_var_FC=no
+ ;;
+
+ *)
+ ld_shlibs_FC=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec_FC='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_FC" >&5
+$as_echo "$ld_shlibs_FC" >&6; }
+test "$ld_shlibs_FC" = no && can_build_shared=no
+
+with_gnu_ld_FC=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_FC" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_FC=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_FC in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_FC
+ pic_flag=$lt_prog_compiler_pic_FC
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_FC
+ allow_undefined_flag_FC=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ archive_cmds_need_lc_FC=no
+ else
+ archive_cmds_need_lc_FC=yes
+ fi
+ allow_undefined_flag_FC=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_FC" >&5
+$as_echo "$archive_cmds_need_lc_FC" >&6; }
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\""
+ cat > conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_FC=
+if test -n "$hardcode_libdir_flag_spec_FC" ||
+ test -n "$runpath_var_FC" ||
+ test "X$hardcode_automatic_FC" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct_FC" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" != no &&
+ test "$hardcode_minus_L_FC" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_FC=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_FC=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_FC=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_FC" >&5
+$as_echo "$hardcode_action_FC" >&6; }
+
+if test "$hardcode_action_FC" = relink ||
+ test "$inherit_rpath_FC" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PERL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="perl"
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Check whether --enable-tensrec was given.
+if test "${enable_tensrec+set}" = set; then :
+ enableval=$enable_tensrec; case "${enableval}" in
+ yes) with_tensrec=yes ;;
+ no) with_tensrec=no ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-tensrec" "$LINENO" 5 ;;
+ esac
+else
+ with_tensrec=yes
+fi
+
+
+ if test "x$with_tensrec" != xno; then
+ COMPILE_TENSREC_TRUE=
+ COMPILE_TENSREC_FALSE='#'
+else
+ COMPILE_TENSREC_TRUE='#'
+ COMPILE_TENSREC_FALSE=
+fi
+
+
+
+# Check whether --with-looptools was given.
+if test "${with_looptools+set}" = set; then :
+ withval=$with_looptools;
+else
+ with_looptools=no
+fi
+
+
+LIBLOOPTOOLS=
+if test "x$with_looptools" == xyes; then :
+ as_ac_Lib=`$as_echo "ac_cv_lib_ooptools -lgfortran''_ltexi_" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ltexi_ in -looptools -lgfortran" >&5
+$as_echo_n "checking for ltexi_ in -looptools -lgfortran... " >&6; }
+if eval \${$as_ac_Lib+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-looptools -lgfortran -looptools $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ltexi_ ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return ltexi_ ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$as_ac_Lib=yes"
+else
+ eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+ LIBLOOPTOOLS="-looptools"
+
+
+$as_echo "#define HAVE_LT 1" >>confdefs.h
+
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--with-looptools was given, but test for -looptools failed. \
+ Consider using --with-looptools=path/libooptools.a .
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+elif test "x$with_looptools" != xno; then :
+ as_ac_File=`$as_echo "ac_cv_file_$with_looptools" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $with_looptools" >&5
+$as_echo_n "checking for $with_looptools... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "$with_looptools"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+ LIBLOOPTOOLS="$with_looptools"
+
+
+$as_echo "#define HAVE_LT 1" >>confdefs.h
+
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--with-looptools was given, but location '$with_looptools' \
+ is wrong.
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+fi
+
+if test "x$with_looptools" != xno; then :
+ case_with_lt=" "
+
+else
+ case_with_lt="!AC!"
+
+fi
+if test "x$with_looptools" != xno; then :
+ case_wout_lt="!AC!"
+
+else
+ case_wout_lt=" "
+
+fi
+
+
+# Check whether --with-lt-precision was given.
+if test "${with_lt_precision+set}" = set; then :
+ withval=$with_lt_precision;
+else
+ with_lt_precision=double
+fi
+
+
+if test "x$with_lt_precision" == xquadruple; then :
+ lt_real_kind="selected_real_kind(32,50)"
+
+elif test "x$with_lt_precision" == xquad; then :
+ lt_real_kind="selected_real_kind(32,50)"
+
+elif test "x$with_lt_precision" == xdouble; then :
+ lt_real_kind="kind(1.0d0)"
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--with-lt-precision was given with an
+ unrecognized parameter
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+# Check whether --with-precision was given.
+if test "${with_precision+set}" = set; then :
+ withval=$with_precision;
+else
+ with_precision=double
+fi
+
+
+if test "x$with_precision" == xquadruple; then :
+ fortran_real_kind="selected_real_kind(32,50)"
+
+elif test "x$with_precision" == xquad; then :
+ fortran_real_kind="selected_real_kind(32,50)"
+
+elif test "x$with_precision" == xdouble; then :
+ fortran_real_kind="kind(1.0d0)"
+
+elif test "x$with_precision" == xintermediate; then :
+ fortran_real_kind="selected_real_kind(18,4931)"
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--with-precision was given with an unrecognized
+ parameter
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+# Check whether --with-avh_olo_precision was given.
+if test "${with_avh_olo_precision+set}" = set; then :
+ withval=$with_avh_olo_precision;
+else
+ with_avh_olo_precision=double
+fi
+
+
+if test "x$with_avh_olo_precision" == xquadruple; then :
+ avh_olo_real_kind="selected_real_kind(32,50)"
+
+elif test "x$with_avh_olo_precision" == xquad; then :
+ avh_olo_real_kind="selected_real_kind(32,50)"
+
+elif test "x$with_avh_olo_precision" == xdouble; then :
+ avh_olo_real_kind="kind(1.0d0)"
+
+elif test "x$with_precision" == xintermediate; then :
+ avh_olo_real_kind="selected_real_kind(18,4931)"
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--with-avh_olo-precision
+ was given with an unrecognized parameter
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+ac_config_files="$ac_config_files Makefile avh_olo-2.2.1/Makefile avh_olo-2.2.1/avh_olo_xkind.f90 src/Makefile src/module/Makefile src/module/precision_golem.f90 src/integrals/Makefile src/integrals/two_point/Makefile src/integrals/one_point/Makefile src/integrals/three_point/Makefile src/integrals/four_point/Makefile src/integrals/four_point/generic_function_4p.f90 src/interface/Makefile src/numerical/Makefile src/kinematic/Makefile src/form_factor/Makefile test/Makefile_proto demos/Makefile golem95.pc"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${COMPILE_TENSREC_TRUE}" && test -z "${COMPILE_TENSREC_FALSE}"; then
+ as_fn_error $? "conditional \"COMPILE_TENSREC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.68. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.68,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_F77='`$ECHO "X$LD_F77" | $Xsed -e "$delay_single_quote_subst"`'
+LD_FC='`$ECHO "X$LD_FC" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_F77='`$ECHO "X$old_archive_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_FC='`$ECHO "X$old_archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_F77='`$ECHO "X$compiler_F77" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_FC='`$ECHO "X$compiler_FC" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_F77='`$ECHO "X$GCC_F77" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_FC='`$ECHO "X$GCC_FC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_F77='`$ECHO "X$lt_prog_compiler_no_builtin_flag_F77" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_FC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_F77='`$ECHO "X$lt_prog_compiler_wl_F77" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_FC='`$ECHO "X$lt_prog_compiler_wl_FC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_F77='`$ECHO "X$lt_prog_compiler_pic_F77" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_FC='`$ECHO "X$lt_prog_compiler_pic_FC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_F77='`$ECHO "X$lt_prog_compiler_static_F77" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_FC='`$ECHO "X$lt_prog_compiler_static_FC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_F77='`$ECHO "X$lt_cv_prog_compiler_c_o_F77" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_FC='`$ECHO "X$lt_cv_prog_compiler_c_o_FC" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_F77='`$ECHO "X$archive_cmds_need_lc_F77" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_FC='`$ECHO "X$archive_cmds_need_lc_FC" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_F77='`$ECHO "X$enable_shared_with_static_runtimes_F77" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_FC='`$ECHO "X$enable_shared_with_static_runtimes_FC" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_F77='`$ECHO "X$export_dynamic_flag_spec_F77" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_FC='`$ECHO "X$export_dynamic_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_F77='`$ECHO "X$whole_archive_flag_spec_F77" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_FC='`$ECHO "X$whole_archive_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_F77='`$ECHO "X$compiler_needs_object_F77" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_FC='`$ECHO "X$compiler_needs_object_FC" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_F77='`$ECHO "X$old_archive_from_new_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_FC='`$ECHO "X$old_archive_from_new_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_F77='`$ECHO "X$old_archive_from_expsyms_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_FC='`$ECHO "X$old_archive_from_expsyms_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_F77='`$ECHO "X$archive_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_FC='`$ECHO "X$archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_F77='`$ECHO "X$archive_expsym_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_FC='`$ECHO "X$archive_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_F77='`$ECHO "X$module_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_FC='`$ECHO "X$module_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_F77='`$ECHO "X$module_expsym_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_FC='`$ECHO "X$module_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_F77='`$ECHO "X$with_gnu_ld_F77" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_FC='`$ECHO "X$with_gnu_ld_FC" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_F77='`$ECHO "X$allow_undefined_flag_F77" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_FC='`$ECHO "X$allow_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_F77='`$ECHO "X$no_undefined_flag_F77" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_FC='`$ECHO "X$no_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_F77='`$ECHO "X$hardcode_libdir_flag_spec_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_FC='`$ECHO "X$hardcode_libdir_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_F77='`$ECHO "X$hardcode_libdir_flag_spec_ld_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_FC='`$ECHO "X$hardcode_libdir_flag_spec_ld_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_F77='`$ECHO "X$hardcode_libdir_separator_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_FC='`$ECHO "X$hardcode_libdir_separator_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_F77='`$ECHO "X$hardcode_direct_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_FC='`$ECHO "X$hardcode_direct_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_F77='`$ECHO "X$hardcode_direct_absolute_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_FC='`$ECHO "X$hardcode_direct_absolute_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_F77='`$ECHO "X$hardcode_minus_L_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_FC='`$ECHO "X$hardcode_minus_L_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_F77='`$ECHO "X$hardcode_shlibpath_var_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_FC='`$ECHO "X$hardcode_shlibpath_var_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_F77='`$ECHO "X$hardcode_automatic_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_FC='`$ECHO "X$hardcode_automatic_FC" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_F77='`$ECHO "X$inherit_rpath_F77" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_FC='`$ECHO "X$inherit_rpath_FC" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_F77='`$ECHO "X$link_all_deplibs_F77" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_FC='`$ECHO "X$link_all_deplibs_FC" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_F77='`$ECHO "X$fix_srcfile_path_F77" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_FC='`$ECHO "X$fix_srcfile_path_FC" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_F77='`$ECHO "X$always_export_symbols_F77" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_FC='`$ECHO "X$always_export_symbols_FC" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_F77='`$ECHO "X$export_symbols_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_FC='`$ECHO "X$export_symbols_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_F77='`$ECHO "X$exclude_expsyms_F77" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_FC='`$ECHO "X$exclude_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_F77='`$ECHO "X$include_expsyms_F77" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_FC='`$ECHO "X$include_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_F77='`$ECHO "X$prelink_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_FC='`$ECHO "X$prelink_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_F77='`$ECHO "X$file_list_spec_F77" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_FC='`$ECHO "X$file_list_spec_FC" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_F77='`$ECHO "X$hardcode_action_F77" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_FC='`$ECHO "X$hardcode_action_FC" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_F77='`$ECHO "X$compiler_lib_search_dirs_F77" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_FC='`$ECHO "X$compiler_lib_search_dirs_FC" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_F77='`$ECHO "X$predep_objects_F77" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_FC='`$ECHO "X$predep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_F77='`$ECHO "X$postdep_objects_F77" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_FC='`$ECHO "X$postdep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_F77='`$ECHO "X$predeps_F77" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_FC='`$ECHO "X$predeps_FC" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_F77='`$ECHO "X$postdeps_F77" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_FC='`$ECHO "X$postdeps_FC" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_F77='`$ECHO "X$compiler_lib_search_path_F77" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_FC='`$ECHO "X$compiler_lib_search_path_FC" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_F77 \
+LD_FC \
+compiler_F77 \
+compiler_FC \
+lt_prog_compiler_no_builtin_flag_F77 \
+lt_prog_compiler_no_builtin_flag_FC \
+lt_prog_compiler_wl_F77 \
+lt_prog_compiler_wl_FC \
+lt_prog_compiler_pic_F77 \
+lt_prog_compiler_pic_FC \
+lt_prog_compiler_static_F77 \
+lt_prog_compiler_static_FC \
+lt_cv_prog_compiler_c_o_F77 \
+lt_cv_prog_compiler_c_o_FC \
+export_dynamic_flag_spec_F77 \
+export_dynamic_flag_spec_FC \
+whole_archive_flag_spec_F77 \
+whole_archive_flag_spec_FC \
+compiler_needs_object_F77 \
+compiler_needs_object_FC \
+with_gnu_ld_F77 \
+with_gnu_ld_FC \
+allow_undefined_flag_F77 \
+allow_undefined_flag_FC \
+no_undefined_flag_F77 \
+no_undefined_flag_FC \
+hardcode_libdir_flag_spec_F77 \
+hardcode_libdir_flag_spec_FC \
+hardcode_libdir_flag_spec_ld_F77 \
+hardcode_libdir_flag_spec_ld_FC \
+hardcode_libdir_separator_F77 \
+hardcode_libdir_separator_FC \
+fix_srcfile_path_F77 \
+fix_srcfile_path_FC \
+exclude_expsyms_F77 \
+exclude_expsyms_FC \
+include_expsyms_F77 \
+include_expsyms_FC \
+file_list_spec_F77 \
+file_list_spec_FC \
+compiler_lib_search_dirs_F77 \
+compiler_lib_search_dirs_FC \
+predep_objects_F77 \
+predep_objects_FC \
+postdep_objects_F77 \
+postdep_objects_FC \
+predeps_F77 \
+predeps_FC \
+postdeps_F77 \
+postdeps_FC \
+compiler_lib_search_path_F77 \
+compiler_lib_search_path_FC; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_F77 \
+old_archive_cmds_FC \
+old_archive_from_new_cmds_F77 \
+old_archive_from_new_cmds_FC \
+old_archive_from_expsyms_cmds_F77 \
+old_archive_from_expsyms_cmds_FC \
+archive_cmds_F77 \
+archive_cmds_FC \
+archive_expsym_cmds_F77 \
+archive_expsym_cmds_FC \
+module_cmds_F77 \
+module_cmds_FC \
+module_expsym_cmds_F77 \
+module_expsym_cmds_FC \
+export_symbols_cmds_F77 \
+export_symbols_cmds_FC \
+prelink_cmds_F77 \
+prelink_cmds_FC; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "avh_olo-2.2.1/Makefile") CONFIG_FILES="$CONFIG_FILES avh_olo-2.2.1/Makefile" ;;
+ "avh_olo-2.2.1/avh_olo_xkind.f90") CONFIG_FILES="$CONFIG_FILES avh_olo-2.2.1/avh_olo_xkind.f90" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "src/module/Makefile") CONFIG_FILES="$CONFIG_FILES src/module/Makefile" ;;
+ "src/module/precision_golem.f90") CONFIG_FILES="$CONFIG_FILES src/module/precision_golem.f90" ;;
+ "src/integrals/Makefile") CONFIG_FILES="$CONFIG_FILES src/integrals/Makefile" ;;
+ "src/integrals/two_point/Makefile") CONFIG_FILES="$CONFIG_FILES src/integrals/two_point/Makefile" ;;
+ "src/integrals/one_point/Makefile") CONFIG_FILES="$CONFIG_FILES src/integrals/one_point/Makefile" ;;
+ "src/integrals/three_point/Makefile") CONFIG_FILES="$CONFIG_FILES src/integrals/three_point/Makefile" ;;
+ "src/integrals/four_point/Makefile") CONFIG_FILES="$CONFIG_FILES src/integrals/four_point/Makefile" ;;
+ "src/integrals/four_point/generic_function_4p.f90") CONFIG_FILES="$CONFIG_FILES src/integrals/four_point/generic_function_4p.f90" ;;
+ "src/interface/Makefile") CONFIG_FILES="$CONFIG_FILES src/interface/Makefile" ;;
+ "src/numerical/Makefile") CONFIG_FILES="$CONFIG_FILES src/numerical/Makefile" ;;
+ "src/kinematic/Makefile") CONFIG_FILES="$CONFIG_FILES src/kinematic/Makefile" ;;
+ "src/form_factor/Makefile") CONFIG_FILES="$CONFIG_FILES src/form_factor/Makefile" ;;
+ "test/Makefile_proto") CONFIG_FILES="$CONFIG_FILES test/Makefile_proto" ;;
+ "demos/Makefile") CONFIG_FILES="$CONFIG_FILES demos/Makefile" ;;
+ "golem95.pc") CONFIG_FILES="$CONFIG_FILES golem95.pc" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="F77 FC "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+
+ cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: F77
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_F77
+
+# A language specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_F77
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_F77
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_F77
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_F77
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_F77
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_F77
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_F77
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_F77
+postdep_objects=$lt_postdep_objects_F77
+predeps=$lt_predeps_F77
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# ### END LIBTOOL TAG CONFIG: F77
+_LT_EOF
+
+
+ cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: FC
+
+# The linker used to build libraries.
+LD=$lt_LD_FC
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_FC
+
+# A language specific compiler.
+CC=$lt_compiler_FC
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_FC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_FC
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_FC
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_FC
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_FC
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_FC
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_FC
+archive_expsym_cmds=$lt_archive_expsym_cmds_FC
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_FC
+module_expsym_cmds=$lt_module_expsym_cmds_FC
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_FC
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_FC
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_FC
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_FC
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_FC
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_FC
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_FC
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_FC
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_FC
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_FC
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_FC
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_FC
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_FC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_FC
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_FC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_FC
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_FC
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_FC
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_FC
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_FC
+postdep_objects=$lt_postdep_objects_FC
+predeps=$lt_predeps_FC
+postdeps=$lt_postdeps_FC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_FC
+
+# ### END LIBTOOL TAG CONFIG: FC
+_LT_EOF
+
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
Property changes on: 95/branches/golem95_without_olo_cmake/configure
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/Makefile.in (revision 119)
@@ -0,0 +1,924 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/golem95.pc.in \
+ $(top_srcdir)/configure $(top_srcdir)/test/Makefile_proto.in \
+ AUTHORS COPYING ChangeLog INSTALL NEWS config.aux/config.guess \
+ config.aux/config.sub config.aux/install-sh \
+ config.aux/ltmain.sh config.aux/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = test/Makefile_proto golem95.pc
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libavh_olo_la_DEPENDENCIES = $(builddir)/avh_olo-2.2.1/libavh_olo.la
+am_libavh_olo_la_OBJECTS =
+libavh_olo_la_OBJECTS = $(am_libavh_olo_la_OBJECTS)
+libgolem_la_DEPENDENCIES = \
+ $(builddir)/src/form_factor/libgolem95_formfactor.la \
+ $(builddir)/src/integrals/four_point/libgolem95_integrals_four_point.la \
+ $(builddir)/src/integrals/three_point/libgolem95_integrals_three_point.la \
+ $(builddir)/src/integrals/two_point/libgolem95_integrals_two_point.la \
+ $(builddir)/src/integrals/one_point/libgolem95_integrals_one_point.la \
+ $(builddir)/src/numerical/libgolem95_numerical.la \
+ $(builddir)/src/kinematic/libgolem95_kinematics.la \
+ $(builddir)/src/module/libgolem95_module.la \
+ $(builddir)/src/interface/libgolem95_interface.la \
+ $(builddir)/avh_olo-2.2.1/libavh_olo.la
+am_libgolem_la_OBJECTS =
+libgolem_la_OBJECTS = $(am_libgolem_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libavh_olo_la_SOURCES) $(libgolem_la_SOURCES)
+DIST_SOURCES = $(libavh_olo_la_SOURCES) $(libgolem_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(distdir)"; }; }
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# vim: ts=3:sw=3
+DIST_SUBDIRS = demos src avh_olo-2.2.1
+SUBDIRS = avh_olo-2.2.1 src
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = golem95.pc
+lib_LTLIBRARIES = libgolem.la libavh_olo.la
+libgolem_la_SOURCES =
+libavh_olo_la_SOURCES =
+libavh_olo_la_LIBADD = \
+ $(builddir)/avh_olo-2.2.1/libavh_olo.la
+
+libgolem_la_LIBADD = \
+ $(builddir)/src/form_factor/libgolem95_formfactor.la \
+ $(builddir)/src/integrals/four_point/libgolem95_integrals_four_point.la \
+ $(builddir)/src/integrals/three_point/libgolem95_integrals_three_point.la \
+ $(builddir)/src/integrals/two_point/libgolem95_integrals_two_point.la \
+ $(builddir)/src/integrals/one_point/libgolem95_integrals_one_point.la \
+ $(builddir)/src/numerical/libgolem95_numerical.la \
+ $(builddir)/src/kinematic/libgolem95_kinematics.la \
+ $(builddir)/src/module/libgolem95_module.la \
+ $(builddir)/src/interface/libgolem95_interface.la \
+ $(builddir)/avh_olo-2.2.1/libavh_olo.la
+
+EXTRA_DIST = $(srcdir)/demos/DemoContents \
+ $(srcdir)/demos/plot_demo_A55.gp \
+ $(srcdir)/demos/plotdetG_Im.gp $(srcdir)/demos/plotdetG_Re.gp \
+ $(srcdir)/demos/README \
+ $(srcdir)/demos/table_of_results_3point_option1.txt \
+ $(srcdir)/demos/table_of_results_3point_option2.txt \
+ $(srcdir)/demos/table_of_results_3point_option3.txt \
+ $(srcdir)/demos/table_of_results_3point_option4.txt \
+ $(srcdir)/demos/table_of_results_3point_option5.txt \
+ $(srcdir)/demos/table_of_results_3point_option6.txt \
+ $(srcdir)/demos/table_of_results_3point_option7.txt \
+ $(srcdir)/demos/table_of_results_4point_option1.txt \
+ $(srcdir)/demos/table_of_results_4point_option2.txt \
+ $(srcdir)/demos/table_of_results_4point_option3.txt \
+ $(srcdir)/demos/table_of_results_4point_option4.txt \
+ $(srcdir)/demos/table_of_results_4point_option5.txt \
+ $(srcdir)/demos/table_of_results_4point_option6.txt \
+ $(srcdir)/demos/table_of_results_4point_option7.txt \
+ $(srcdir)/demos/table_of_results_4point_option8.txt \
+ $(srcdir)/demos/table_of_results_5point.txt \
+ $(srcdir)/demos/table_of_results_6point.txt \
+ $(srcdir)/demos/table_of_results_LT.txt \
+ $(srcdir)/demos/table_of_results_4photon.txt \
+ $(srcdir)/demos/demo_a55_dets_sing.txt \
+ $(srcdir)/demos/demo_detG.txt $(srcdir)/test/cleanup.pl \
+ $(srcdir)/test/Makefile_proto.in \
+ $(srcdir)/test/makenumerator.pl $(srcdir)/test/maketest.pl \
+ $(srcdir)/test/mask_3point $(srcdir)/test/mask_4point \
+ $(srcdir)/test/mask_5point $(srcdir)/test/mask_6point \
+ $(srcdir)/test/momenta.dat $(srcdir)/test/mom_rambo.f \
+ $(srcdir)/test/param.input $(srcdir)/test/Readme \
+ $(srcdir)/doc/robodoc.rc $(srcdir)/doc/html/numerical/*.html \
+ $(srcdir)/doc/html/integrals/one_point/*.html \
+ $(srcdir)/doc/html/integrals/two_point/*.html \
+ $(srcdir)/doc/html/integrals/three_point/*.html \
+ $(srcdir)/doc/html/integrals/four_point/*.html \
+ $(srcdir)/doc/html/form_factor/*.html \
+ $(srcdir)/doc/html/kinematic/*.html \
+ $(srcdir)/doc/html/module/*.html \
+ $(srcdir)/doc/html/interface/*.html $(srcdir)/doc/html/*.html \
+ $(srcdir)/doc/html/robodoc.css \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_a0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_a0_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b0_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b11_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b11_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_c0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_c0_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_d0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_d0_b.h90 makedepend.perl \
+ autogen.sh m4
+ACLOCAL_AMFLAGS = -I m4
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+test/Makefile_proto: $(top_builddir)/config.status $(top_srcdir)/test/Makefile_proto.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+golem95.pc: $(top_builddir)/config.status $(srcdir)/golem95.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libavh_olo.la: $(libavh_olo_la_OBJECTS) $(libavh_olo_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libavh_olo_la_OBJECTS) $(libavh_olo_la_LIBADD) $(LIBS)
+libgolem.la: $(libgolem_la_OBJECTS) $(libgolem_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libgolem_la_OBJECTS) $(libgolem_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive dist \
+ dist-all dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar \
+ dist-tarZ dist-xz dist-zip distcheck distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-man install-pdf install-pdf-am install-pkgconfigDATA \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+
+
+dist-hook:
+ find $(distdir) -name '*.mod' -exec rm \{} \;
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Property changes on: 95/branches/golem95_without_olo_cmake/Makefile.in
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b0_a.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b0_a.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b0_a.h90 (revision 119)
@@ -0,0 +1,27 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ complex(kindc2) :: ss,r1,r2
+ real(kindr2) :: app,am1,am2,thrs,mulocal,mulocal2
+ character(25+99) ,parameter :: warning=&
+ 'WARNING from OneLOop b0: '//warnonshell
+ if (intro) call hello
+!
+ ss = pp
+ r1 = m1
+ r2 = m2
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_a0_b.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_a0_b.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_a0_b.h90 (revision 119)
@@ -0,0 +1,41 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ am = abs(mm)
+!
+ mulocal2 = mulocal*mulocal
+!
+ if (nonzerothrs) then
+ thrs = onshellthrs
+ if (am.lt.thrs) am = R0P0
+ elseif (wunit.gt.0) then
+ thrs = onshellthrs*max(am,mulocal2)
+ if (R0P0.lt.am.and.am.lt.thrs) write(wunit,*) warning
+ endif
+!
+ ss = mm
+ call tadp( rslt ,ss ,am ,mulocal2 )
+!
+ if (punit.gt.0) then
+ if (nonzerothrs) write(punit,*) 'onshell:',trim(myprint(onshellthrs))
+ write(punit,*) 'muscale:',trim(myprint(mulocal))
+ write(punit,*) ' mm:',trim(myprint(mm))
+ write(punit,*) 'a0(2):',trim(myprint(rslt(2)))
+ write(punit,*) 'a0(1):',trim(myprint(rslt(1)))
+ write(punit,*) 'a0(0):',trim(myprint(rslt(0)))
+ endif
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_c0_a.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_c0_a.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_c0_a.h90 (revision 119)
@@ -0,0 +1,35 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ complex(kindc2) :: ss(3),rr(3)
+ real(kindr2) :: smax,ap(3),am(3),as(3),ar(3),thrs,s1r2,s2r3,s3r3
+ real(kindr2) :: mulocal,mulocal2
+ integer :: icase,ii
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/48
+ character(25+99) ,parameter :: warning=&
+ 'WARNING from OneLOop c0: '//warnonshell
+ if (intro) call hello
+!
+ pp(1) = p1
+ pp(2) = p2
+ pp(3) = p3
+ mm(1) = m1
+ mm(2) = m2
+ mm(3) = m3
+!
+ smax = R0P0
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b0_b.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b0_b.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b0_b.h90 (revision 119)
@@ -0,0 +1,44 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ mulocal2 = mulocal*mulocal
+!
+ if (nonzerothrs) then
+ thrs = onshellthrs
+ if (app.lt.thrs) app = R0P0
+ if (am1.lt.thrs) am1 = R0P0
+ if (am2.lt.thrs) am2 = R0P0
+ elseif (wunit.gt.0) then
+ thrs = onshellthrs*max(app,am1,am2,mulocal2)
+ if (R0P0.lt.app.and.app.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.am1.and.am1.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.am2.and.am2.lt.thrs) write(wunit,*) warning
+ endif
+!
+ call bub0( rslt ,ss,r1,r2 ,app,am1,am2 ,mulocal2 )
+!
+ if (punit.gt.0) then
+ if (nonzerothrs) write(punit,*) 'onshell:',trim(myprint(onshellthrs))
+ write(punit,*) 'muscale:',trim(myprint(mulocal))
+ write(punit,*) ' pp:',trim(myprint(pp))
+ write(punit,*) ' m1:',trim(myprint(m1))
+ write(punit,*) ' m2:',trim(myprint(m2))
+ write(punit,*) 'b0(2):',trim(myprint(rslt(2)))
+ write(punit,*) 'b0(1):',trim(myprint(rslt(1)))
+ write(punit,*) 'b0(0):',trim(myprint(rslt(0)))
+ endif
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_d0_a.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_d0_a.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_d0_a.h90 (revision 119)
@@ -0,0 +1,40 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ complex(kindc2) :: ss(6),rr(4)
+ real(kindr2) :: smax,ap(6),am(4),as(6),ar(4),s1r2,s2r2,s2r3,s3r4,s4r4
+ real(kindr2) :: mulocal,mulocal2,small,thrs
+ integer :: icase,ii
+ logical :: useboxc
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/48
+ character(25+99) ,parameter :: warning=&
+ 'WARNING from OneLOop d0: '//warnonshell
+ if (intro) call hello
+!
+ pp(1) = p1
+ pp(2) = p2
+ pp(3) = p3
+ pp(4) = p4
+ pp(5) = p12
+ pp(6) = p23
+ mm(1) = m1
+ mm(2) = m2
+ mm(3) = m3
+ mm(4) = m4
+!
+ smax = R0P0
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_c0_b.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_c0_b.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_c0_b.h90 (revision 119)
@@ -0,0 +1,115 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ mulocal2 = mulocal*mulocal
+!
+ if (smax.eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'all input equal zero, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ if (mulocal2.gt.smax) smax = mulocal2
+!
+ if (nonzerothrs) then
+ thrs = onshellthrs
+ do ii=1,3
+ if (ap(ii).lt.thrs) ap(ii) = R0P0
+ if (am(ii).lt.thrs) am(ii) = R0P0
+ enddo
+ else
+ thrs = onshellthrs*smax
+ if (wunit.gt.0) then
+ do ii=1,3
+ if (R0P0.lt.ap(ii).and.ap(ii).lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.am(ii).and.am(ii).lt.thrs) write(wunit,*) warning
+ enddo
+ endif
+ endif
+!
+ icase = 0
+ do ii=1,3
+ if (am(ii).gt.R0P0) icase = icase + base(ii)
+ enddo
+ ss(1)=pp(permtable(1,icase)) ;as(1)=ap(permtable(1,icase))
+ ss(2)=pp(permtable(2,icase)) ;as(2)=ap(permtable(2,icase))
+ ss(3)=pp(permtable(3,icase)) ;as(3)=ap(permtable(3,icase))
+ rr(1)=mm(permtable(1,icase)) ;ar(1)=am(permtable(1,icase))
+ rr(2)=mm(permtable(2,icase)) ;ar(2)=am(permtable(2,icase))
+ rr(3)=mm(permtable(3,icase)) ;ar(3)=am(permtable(3,icase))
+ icase = casetable(icase)
+!
+ s1r2 = abs(ss(1)-rr(2))
+ s2r3 = abs(ss(2)-rr(3))
+ s3r3 = abs(ss(3)-rr(3))
+ if (nonzerothrs) then
+ if (s1r2.lt.thrs) s1r2 = R0P0
+ if (s2r3.lt.thrs) s2r3 = R0P0
+ if (s3r3.lt.thrs) s3r3 = R0P0
+ elseif (wunit.gt.0) then
+ if (R0P0.lt.s1r2.and.s1r2.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.s2r3.and.s2r3.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.s3r3.and.s3r3.lt.thrs) write(wunit,*) warning
+ endif
+!
+ if (icase.eq.3) then
+! 3 non-zero internal masses
+ call trif3( rslt ,ss(1),ss(2),ss(3) ,rr(1),rr(2),rr(3) )
+ elseif (icase.eq.2) then
+! 2 non-zero internal masses
+ if (s1r2.ne.R0P0.or.s3r3.ne.R0P0) then
+ call trif2( rslt ,ss(1),ss(2),ss(3) ,rr(2),rr(3) )
+ else
+ call tria4( rslt ,ss(2) ,rr(2),rr(3) ,mulocal2 )
+ endif
+ elseif (icase.eq.1) then
+! 1 non-zero internal mass
+ if (as(1).ne.R0P0) then
+ call trif1( rslt ,ss(1),ss(2),ss(3), rr(3) )
+ elseif (s2r3.ne.R0P0) then
+ if (s3r3.ne.R0P0) then
+ call tria3( rslt ,ss(2),ss(3) ,rr(3) ,mulocal2 )
+ else
+ call tria2( rslt ,ss(2) ,rr(3) ,mulocal2 )
+ endif
+ elseif (s3r3.ne.R0P0) then
+ call tria2( rslt ,ss(3) ,rr(3) ,mulocal2 )
+ else
+ call tria1( rslt ,rr(3) ,mulocal2 )
+ endif
+ else
+! 0 non-zero internal masses
+ call tria0( rslt ,ss ,as ,mulocal2 )
+ endif
+! exp(eps*gamma_EULER) -> GAMMA(1-2*eps)/GAMMA(1-eps)^2/GAMMA(1+eps)
+ rslt(0) = rslt(0) + const*rslt(2)
+!
+ if (punit.gt.0) then
+ if (nonzerothrs) write(punit,*) 'onshell:',trim(myprint(onshellthrs))
+ write(punit,*) 'muscale:',trim(myprint(mulocal))
+ write(punit,*) ' p1:',trim(myprint(p1))
+ write(punit,*) ' p2:',trim(myprint(p2))
+ write(punit,*) ' p3:',trim(myprint(p3))
+ write(punit,*) ' m1:',trim(myprint(m1))
+ write(punit,*) ' m2:',trim(myprint(m2))
+ write(punit,*) ' m3:',trim(myprint(m3))
+ write(punit,*) 'c0(2):',trim(myprint(rslt(2)))
+ write(punit,*) 'c0(1):',trim(myprint(rslt(1)))
+ write(punit,*) 'c0(0):',trim(myprint(rslt(0)))
+ endif
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/Makefile.am (revision 119)
@@ -0,0 +1,19 @@
+noinst_LTLIBRARIES=libavh_olo.la
+libavh_olo_la_SOURCES= avh_olo_boxc.f90 avh_olo_box.f90 avh_olo_bub.f90 \
+ avh_olo_func.f90 avh_olo_kinds.f90 avh_olo_main.f90 avh_olo_print.f90 \
+ avh_olo_tri.f90 avh_olo_units.f90 avh_olo_wrp01.f90 avh_olo_xkind.f90
+
+
+noinst_HEADERS=\
+ avh_olo_a0_a.h90 avh_olo_a0_b.h90 avh_olo_b0_a.h90 avh_olo_b0_b.h90 \
+ avh_olo_b11_a.h90 avh_olo_b11_b.h90 avh_olo_c0_a.h90 avh_olo_c0_b.h90 \
+ avh_olo_d0_a.h90 avh_olo_d0_b.h90
+nodist_pkginclude_HEADERS=\
+ avh_olo_bern.mod avh_olo_boxc.mod avh_olo_box.mod avh_olo_bub.mod \
+ avh_olo_func.mod avh_olo_kinds.mod avh_olo_li2a.mod avh_olo_li2c2.mod \
+ avh_olo_li2c.mod avh_olo_loga2.mod avh_olo_loga.mod avh_olo_logc2.mod \
+ avh_olo_logc.mod avh_olo.mod avh_olo_print.mod avh_olo_tri.mod \
+ avh_olo_units.mod avh_olo_xkind.mod
+
+CLEANFILES=$(nodist_pkginclude_HEADERS)
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_d0_b.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_d0_b.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_d0_b.h90 (revision 119)
@@ -0,0 +1,198 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ small = maxval(abs(ap))*epsilon(R1P0)*100
+ mulocal2 = mulocal*mulocal
+!
+ if (smax.eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'all input equal zero, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ if (mulocal2.gt.smax) smax = mulocal2
+!
+ if (nonzerothrs) then
+ thrs = onshellthrs
+ do ii=1,4
+ if (ap(ii).lt.thrs) ap(ii) = R0P0
+ if (am(ii).lt.thrs) am(ii) = R0P0
+ enddo
+ else
+ thrs = onshellthrs*smax
+ if (wunit.gt.0) then
+ do ii=1,4
+ if (R0P0.lt.ap(ii).and.ap(ii).lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.am(ii).and.am(ii).lt.thrs) write(wunit,*) warning
+ enddo
+ endif
+ endif
+!
+ icase = 0
+ do ii=1,4
+ if (am(ii).gt.R0P0) icase = icase + base(ii)
+ enddo
+ ss(1)=pp(permtable(1,icase)) ;as(1)=ap(permtable(1,icase))
+ ss(2)=pp(permtable(2,icase)) ;as(2)=ap(permtable(2,icase))
+ ss(3)=pp(permtable(3,icase)) ;as(3)=ap(permtable(3,icase))
+ ss(4)=pp(permtable(4,icase)) ;as(4)=ap(permtable(4,icase))
+ ss(5)=pp(permtable(5,icase)) ;as(5)=ap(permtable(5,icase))
+ ss(6)=pp(permtable(6,icase)) ;as(6)=ap(permtable(6,icase))
+ rr(1)=mm(permtable(1,icase)) ;ar(1)=am(permtable(1,icase))
+ rr(2)=mm(permtable(2,icase)) ;ar(2)=am(permtable(2,icase))
+ rr(3)=mm(permtable(3,icase)) ;ar(3)=am(permtable(3,icase))
+ rr(4)=mm(permtable(4,icase)) ;ar(4)=am(permtable(4,icase))
+ icase = casetable(icase)
+!
+ s1r2 = abs(real(ss(1)-rr(2))) + abs(aimag(ss(1)-rr(2)))
+ s2r2 = abs(real(ss(2)-rr(2))) + abs(aimag(ss(2)-rr(2)))
+ s2r3 = abs(real(ss(2)-rr(3))) + abs(aimag(ss(2)-rr(3)))
+ s3r4 = abs(real(ss(3)-rr(4))) + abs(aimag(ss(3)-rr(4)))
+ s4r4 = abs(real(ss(4)-rr(4))) + abs(aimag(ss(4)-rr(4)))
+ if (nonzerothrs) then
+ if (s1r2.lt.thrs) s1r2 = R0P0
+ if (s2r2.lt.thrs) s2r2 = R0P0
+ if (s2r3.lt.thrs) s2r3 = R0P0
+ if (s3r4.lt.thrs) s3r4 = R0P0
+ if (s4r4.lt.thrs) s4r4 = R0P0
+ elseif (wunit.gt.0) then
+ if (R0P0.lt.s1r2.and.s1r2.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.s2r2.and.s2r2.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.s2r3.and.s2r3.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.s3r4.and.s3r4.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.s4r4.and.s4r4.lt.thrs) write(wunit,*) warning
+ endif
+!
+ if (icase.eq.4) then
+!4 non-zero internal masses
+ useboxc = ( (ar(1).ne.R0P0.and.aimag(rr(1)).ne.R0P0) &
+ .or.(ar(2).ne.R0P0.and.aimag(rr(2)).ne.R0P0) &
+ .or.(ar(3).ne.R0P0.and.aimag(rr(3)).ne.R0P0) &
+ .or.(ar(4).ne.R0P0.and.aimag(rr(4)).ne.R0P0) &
+ .or.( real(ss(1)).ge.-small &
+ .and.real(ss(2)).ge.-small &
+ .and.real(ss(3)).ge.-small &
+ .and.real(ss(4)).ge.-small) )
+ if (useboxc) then
+ call boxc( rslt ,ss,rr ,as )
+ else
+ call boxf4( rslt ,ss(1),ss(2),ss(3),ss(4),ss(5),ss(6) ,rr(1),rr(2),rr(3),rr(4) )
+ endif
+ elseif (icase.eq.3) then
+!3 non-zero internal masses
+ if (s1r2.ne.R0P0.or.s4r4.ne.R0P0) then
+ useboxc = ( (ar(1).ne.R0P0.and.aimag(rr(1)).ne.R0P0) &
+ .or.(ar(2).ne.R0P0.and.aimag(rr(2)).ne.R0P0) &
+ .or.(ar(3).ne.R0P0.and.aimag(rr(3)).ne.R0P0) &
+ .or.(ar(4).ne.R0P0.and.aimag(rr(4)).ne.R0P0) &
+ .or.( real(ss(1)).ge.-small &
+ .and.real(ss(2)).ge.-small &
+ .and.real(ss(3)).ge.-small &
+ .and.real(ss(4)).ge.-small) )
+ if (useboxc) then
+ call boxc( rslt ,ss,rr ,as )
+ else
+ call boxf3( rslt, ss,rr )
+ endif
+ else
+ call box16( rslt ,ss(2),ss(3),ss(5),ss(6) ,rr(2),rr(3),rr(4) ,mulocal )
+ endif
+ elseif (icase.eq.5) then
+!2 non-zero internal masses, opposite case
+ if (s1r2.ne.R0P0.or.s4r4.ne.R0P0) then
+ if (s2r2.ne.R0P0.or.s3r4.ne.R0P0) then
+ call boxf5( rslt ,ss(1),ss(2),ss(3),ss(4),ss(5),ss(6) ,rr(2),rr(4) )
+ else
+ call box15( rslt ,ss(1),ss(4),ss(5),ss(6) ,rr(2),rr(4) ,mulocal )
+ endif
+ elseif (s2r2.ne.R0P0.or.s3r4.ne.R0P0) then
+ call box15( rslt ,ss(2),ss(3),ss(5),ss(6) ,rr(2),rr(4) ,mulocal )
+ else
+ call box14( rslt ,ss(5),ss(6) ,rr(2),rr(4) ,mulocal )
+ endif
+ elseif (icase.eq.2) then
+!2 non-zero internal masses, adjacent case
+ if (as(1).ne.R0P0) then
+ call boxf2( rslt ,ss(1),ss(2),ss(3),ss(4),ss(5),ss(6) ,rr(3),rr(4) )
+ elseif (s2r3.ne.R0P0) then
+ if (s4r4.ne.R0P0) then
+ call box13( rslt ,ss(2),ss(3),ss(4),ss(5),ss(6) ,rr(3),rr(4) ,mulocal )
+ else
+ call box12( rslt ,ss(3),ss(2),ss(6),ss(5) ,rr(4),rr(3) ,mulocal )
+ endif
+ elseif (s4r4.ne.R0P0) then
+ call box12( rslt ,ss(3),ss(4),ss(5),ss(6) ,rr(3),rr(4) ,mulocal )
+ else
+ call box11( rslt ,ss(3),ss(5),ss(6) ,rr(3),rr(4) ,mulocal )
+ endif
+ elseif (icase.eq.1) then
+!1 non-zero internal mass
+ if (as(1).ne.R0P0) then
+ if (as(2).ne.R0P0) then
+ call boxf1( rslt ,ss(1),ss(2),ss(3),ss(4),ss(5),ss(6) ,rr(4) )
+ else
+ if (s3r4.ne.R0P0) then
+ call box10( rslt ,ss(1),ss(4),ss(3),ss(5),ss(6) ,rr(4) ,mulocal )
+ else
+ call box09( rslt ,ss(1),ss(4),ss(5),ss(6) ,rr(4) ,mulocal )
+ endif
+ endif
+ elseif (as(2).ne.R0P0) then
+ if (s4r4.ne.R0P0) then
+ call box10( rslt ,ss(2),ss(3),ss(4),ss(5),ss(6) ,rr(4) ,mulocal )
+ else
+ call box09( rslt ,ss(2),ss(3),ss(5),ss(6) ,rr(4) ,mulocal )
+ endif
+ else
+ if (s3r4.ne.R0P0) then
+ if (s4r4.ne.R0P0) then
+ call box08( rslt ,ss(3),ss(4),ss(5),ss(6) ,rr(4) ,mulocal )
+ else
+ call box07( rslt ,ss(3),ss(5),ss(6) ,rr(4) ,mulocal )
+ endif
+ elseif (s4r4.ne.R0P0) then
+ call box07( rslt ,ss(4),ss(5),ss(6) ,rr(4) ,mulocal )
+ else
+ call box06( rslt ,ss(5),ss(6) ,rr(4) ,mulocal )
+ endif
+ endif
+ else
+!0 non-zero internal mass
+ call box00( rslt ,ss ,as ,mulocal )
+ endif
+!exp(eps*gamma_EULER) -> GAMMA(1-2*eps)/GAMMA(1-eps)^2/GAMMA(1+eps)
+ rslt(0) = rslt(0) + const*rslt(2)
+!
+ if (punit.gt.0) then
+ if (nonzerothrs) write(punit,*) 'onshell:',trim(myprint(onshellthrs))
+ write(punit,*) 'muscale:',trim(myprint(mulocal))
+ write(punit,*) ' p1:',trim(myprint(p1))
+ write(punit,*) ' p2:',trim(myprint(p2))
+ write(punit,*) ' p3:',trim(myprint(p3))
+ write(punit,*) ' p4:',trim(myprint(p4))
+ write(punit,*) 'p12:',trim(myprint(p12))
+ write(punit,*) 'p23:',trim(myprint(p23))
+ write(punit,*) ' m1:',trim(myprint(m1))
+ write(punit,*) ' m2:',trim(myprint(m2))
+ write(punit,*) ' m3:',trim(myprint(m3))
+ write(punit,*) ' m4:',trim(myprint(m4))
+ write(punit,*) 'd0(2):',trim(myprint(rslt(2)))
+ write(punit,*) 'd0(1):',trim(myprint(rslt(1)))
+ write(punit,*) 'd0(0):',trim(myprint(rslt(0)))
+ endif
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_kinds.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_kinds.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_kinds.f90 (revision 119)
@@ -0,0 +1,42 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_kinds
+ use avh_olo_xkind
+!
+ implicit none
+ private
+ public :: kindr2,kindc2 &
+ ,R0P0,R1P0,R5M1,TWOPI,SQRT2,C0P0,C1P0,CiP0
+!
+ integer ,parameter :: kindr2 = olo_xkind
+ integer ,parameter :: kindc2 = kindr2
+!
+ real(kindr2) ,parameter :: R0P0=0._kindr2
+ real(kindr2) ,parameter :: R1P0=1._kindr2
+ real(kindr2) ,parameter :: R5M1=0.5_kindr2
+! 1 2345678901234567890123456789012
+ real(kindr2) ,parameter :: TWOPI=6.2831853071795864769252867665590_kindr2
+ real(kindr2) ,parameter :: SQRT2=1.4142135623730950488016887242097_kindr2
+ complex(kindc2) ,parameter :: C0P0 = (0._kindr2,0._kindr2)
+ complex(kindc2) ,parameter :: C1P0 = (1._kindr2,0._kindr2)
+ complex(kindc2) ,parameter :: CiP0 = (0._kindr2,1._kindr2)
+!
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_bub.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_bub.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_bub.f90 (revision 119)
@@ -0,0 +1,508 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_bub
+ use avh_olo_kinds
+ use avh_olo_units
+ implicit none
+ private
+ public :: init_bub ,tadp ,bub0 ,bub11
+ integer ,parameter :: d=kindr2
+ integer ,parameter :: ntrmmax=20
+ real(kindr2) ,parameter :: thrslistd(ntrmmax)=&
+ (/5e-5_d,5e-3_d,0.05_d,0.10_d,0.15_d,0.20_d,0.30_d,0.40_d &
+ ,0.50_d,0.60_d,0.65_d,0.68_d,0.72_d,0.74_d,0.76_d,0.78_d &
+ ,0.80_d,0.82_d,0.83_d,0.84_d/)
+ real(kindr2) ,parameter :: thrslisth(ntrmmax)=&
+ (/7e-8_d,5e-4_d,2e-3_d,1e-2_d,3e-2_d,6e-2_d,0.11_d,0.17_d &
+ ,0.22_d,0.28_d,0.33_d,0.37_d,0.42_d,0.47_d,0.51_d,0.54_d &
+ ,0.58_d,0.60_d,0.62_d,0.65_d/)
+ real(kindr2) ,parameter :: thrslistq(ntrmmax)=&
+ (/1e-10_d,5e-5_d,1e-4_d,1e-3_d,7e-3_d,0.02_d,0.04_d,0.07_d &
+ ,0.10_d,0.13_d,0.17_d,0.20_d,0.25_d,0.30_d,0.34_d,0.38_d &
+ ,0.42_d,0.44_d,0.47_d,0.50_d/)
+ real(kindr2) :: thrs=0.07_d
+ real(kindr2) :: thrsexp=0.01_d
+ real(kindr2) :: thrslist(1:ntrmmax)=thrslistd(1:ntrmmax)
+ integer :: ntrm=11,nnexp=7
+ complex(kindc2) :: aaexp(8)=C0P0
+ integer :: ndigits=0
+contains
+!
+ subroutine init_bub(ndig)
+ integer ,intent(in) :: ndig
+ integer :: ii
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ if (ndigits.lt.16) then
+ thrs = 0.07_kindr2 ! double precision,
+ ntrm = 11 ! tested to suit also b11
+ thrsexp = 0.01_kindr2 !
+ nnexp = 7 !
+ thrslist = thrslistd ! double precision
+ elseif (ndigits.lt.24) then
+ thrs = 0.02_kindr2 ! guess
+ ntrm = 11 !
+ thrsexp = 0.001_kindr2 !
+ nnexp = 7 !
+ thrslist = thrslisth !
+ else
+ thrs = 0.005_kindr2 ! quadruple precision, not tested
+ ntrm = 11 !
+ thrsexp = 0.0001_kindr2 !
+ nnexp = 7 !
+ thrslist = thrslistq ! quadruple precision
+ endif
+ do ii=1,nnexp
+ aaexp(ii) = C1P0/(ii*(ii+1))
+ enddo
+ end subroutine
+
+
+ subroutine tadp( rslt ,mm ,amm ,rmu2 )
+!*******************************************************************
+! The 1-loop scalar 1-point function.
+!*******************************************************************
+ use avh_olo_func
+ use avh_olo_logc ,only : logc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: mm
+ real(kindr2) ,intent(in) :: amm,rmu2
+!
+! write(*,*) 'MESSAGE from OneLOop tadp: you are calling me' !CALLINGME
+!
+ rslt(2) = C0P0
+ if (amm.eq.R0P0) then
+ rslt(1) = C0P0
+ rslt(0) = C0P0
+ else
+ rslt(1) = mm
+ rslt(0) = mm - mm*logc( qonv(mm/rmu2,-1) )
+ endif
+ end subroutine
+
+
+ subroutine bub0( rslt ,pp,m1i,m2i ,app,am1i,am2i ,rmu2 )
+!*******************************************************************
+! The 1-loop scalar 2-point function. Based on the formulas from
+! A. Denner, Fortsch.Phys.41:307-420,1993 arXiv:0709.1075 [hep-ph]
+!*******************************************************************
+ use avh_olo_func
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: pp,m1i,m2i
+ real(kindr2) ,intent(in) :: app,am1i,am2i,rmu2
+ complex(kindc2) :: cc(0:ntrmmax),m1,m2,hh,aa,bb,rr,dd
+ type(qmplx_type) :: qmm,qz1
+ complex(kindc2) ,parameter :: two=C1P0*2
+ real(kindr2) :: am1,am2,tt
+ integer :: ii
+!
+! write(*,*) 'MESSAGE from OneLOop bub0: you are calling me' !CALLINGME
+!
+ tt = max(am1i,am2i)
+ if (am1i.lt.tt) then
+ m1=m1i ;am1=am1i
+ m2=m2i ;am2=am2i
+ else
+ m1=m2i ;am1=am2i
+ m2=m1i ;am2=am1i
+ endif
+!
+ rslt(2) = C0P0
+ rslt(1) = C1P0
+!
+ if (am2.eq.R0P0) then
+ if (app.eq.R0P0) then
+ rslt(1) = C0P0
+ rslt(0) = C0P0
+ else
+ rslt(0) = two - logc(qonv(-pp/rmu2,-1))
+ endif
+ else!if(am2.ne.R0P0)
+ tt = app/tt
+ if (am1.eq.R0P0) then
+ qmm = qonv(m2/rmu2,-1)
+ if (app.eq.R0P0) then
+ rslt(0) = C1P0 - logc(qmm)
+ elseif (pp.eq.m2) then
+ rslt(0) = two - logc(qmm)
+ elseif (tt.lt.R1P0) then
+ hh = m2-pp
+ rslt(0) = two + (hh/pp)*logc(qonv(hh/rmu2,-1)/qmm) - logc(qmm)
+ else!if (tt.ge.R1P0) then
+ hh = m2-pp
+ rslt(0) = two - (m2/pp)*logc(qmm) + (hh/pp)*logc(qonv(hh/rmu2,-1))
+ endif
+ else!if(am1.ne.R0P0)
+ if (app.eq.R0P0) then
+ qz1 = qonv(m1/rmu2,-1)
+ rslt(0) = C1P0 + logc2(qz1/qonv(m2/rmu2,-1)) - logc(qz1)
+ else!if(pp.ne.C0P0)
+ if (tt.le.thrs) then
+ call expans( cc ,m1,m2 ,am1,am2 ,rmu2 ,ntrm)
+ rslt(0) = cc(ntrm)
+ do ii=ntrm-1,0,-1
+ rslt(0) = cc(ii) + pp*rslt(0)
+ enddo
+ elseif (tt.lt.R1P0) then
+ hh = mysqrt(m1)
+ bb = mysqrt(m2)
+ aa = hh*bb ! sm1*sm2
+ bb = hh/bb ! sm1/sm2
+ hh = (m1+m2-pp)/aa
+ dd = (m2-m1)**2 + ( pp - 2*(m1+m2) )*pp
+ dd = mysqrt(dd)/aa
+ call rfun0( rr ,dd ,hh )
+ qz1 = qonv(bb,-1) ! sm1/sm2
+ rslt(0) = two - logc(qonv(m2/rmu2,-1)) &
+ + logc(qz1)*two*m1/(aa*rr-m1) &
+ + logc2(qz1*qonv(rr,-1))*dd*aa/(aa*rr-m1+pp)
+ else
+ hh = mysqrt(m1)
+ bb = mysqrt(m2)
+ aa = hh*bb ! sm1*sm2
+ bb = hh/bb ! sm1/sm2
+ hh = (m1+m2-pp)/aa
+ call rfun( rr,dd ,hh )
+ rslt(0) = two - logc(qonv(aa/rmu2,-1)) &
+ + (logc(qonv(bb,-1))*(m2-m1) + logc(qonv(rr,-1))*dd*aa)/pp
+ endif
+! call expans( cc ,m1,m2 ,am1,am2 ,rmu2 ,ntrm) !DEBUG
+! hh = cc(ntrm) !DEBUG
+! do ii=ntrm-1,0,-1 !DEBUG
+! hh = cc(ii) + pp*hh !DEBUG
+! enddo !DEBUG
+! write(*,'(a4,2d24.16)') 'exp:',hh !DEBUG
+ endif
+ endif
+ endif
+ end subroutine
+
+
+ subroutine bub11( b11,b00,b1,b0 ,pp,m0,m1 ,app,am0,am1 ,rmu2 )
+!*******************************************************************
+! Return the Passarino-Veltman functions b11,b00,b1,b0 , for
+!
+! C / d^(Dim)q
+! ------ | -------------------- = b0
+! i*pi^2 / [q^2-m0][(q+p)^2-m1]
+!
+! C / d^(Dim)q q^mu
+! ------ | -------------------- = p^mu b1
+! i*pi^2 / [q^2-m0][(q+p)^2-m1]
+!
+! C / d^(Dim)q q^mu q^nu
+! ------ | -------------------- = g^{mu,nu} b00 + p^mu p^nu b11
+! i*pi^2 / [q^2-m0][(q+p)^2-m1]
+!
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ complex(kindc2) ,intent(in) :: pp,m0,m1
+ real(kindr2) ,intent(in) :: app,am0,am1,rmu2
+ complex(kindc2) :: a1(0:2),a0(0:2),ff,gg,c1,c2,cc(0:ntrmmax)
+ real(kindr2) :: rr,maxm
+ integer :: ii
+!
+ maxm = max(am0,am1)
+ if (maxm.eq.R0P0) then
+ if (app.eq.R0P0) then
+ b0 = C0P0
+ b1 = C0P0
+ b00 = C0P0
+ b11 = C0P0
+ return
+ endif
+ rr = R1P0+thrs
+ else
+ rr = app/maxm
+ endif
+!
+ ff = pp - m1 + m0
+ gg = m0 + m1 - pp/3
+ b0(2) = C0P0
+ b1(2) = C0P0
+ b00(2) = C0P0
+ b11(2) = C0P0
+ b0(1) = C1P0
+ b1(1) = -C1P0/2
+ b00(1) = gg/4
+ b11(1) = C1P0/3
+ call tadp( a1 ,m0 ,am0 ,rmu2 )
+ call tadp( a0 ,m1 ,am1 ,rmu2 )
+!
+ if (rr.le.thrs) then
+! write(*,*) 'expansion' !DEBUG
+ call expans( cc ,m0,m1 ,am0,am1 ,rmu2 ,ntrm )
+ c2 = cc(ntrm)
+ do ii=ntrm-1,2,-1
+ c2 = cc(ii) + pp*c2
+ enddo
+ c1 = cc(1) + pp*c2
+ b0(0) = cc(0) + pp*c1
+ b1(0) = -( cc(0) + ff*c1 )/2
+ b00(0) = ( a0(0) + ff*b1(0) + 2*m0*b0(0) + gg )/6
+ b11(0) = cc(0) + (ff+m0-m1)*cc(1) + ff*ff*c2 - m0*c1
+ b11(0) = ( b11(0) + C1P0/6 )/3
+ else
+ call bub0( b0 ,pp,m0,m1 ,app,am0,am1 ,rmu2 )
+ b1(0) = ( a1(0) - a0(0) - ff*b0(0) )/(2*pp)
+ b00(0) = ( a0(0) + ff*b1(0) + 2*m0*b0(0) + gg )/6
+ b11(0) = ( a0(0) - 2*ff*b1(0) - m0*b0(0) - gg/2 )/(3*pp)
+ endif
+!
+ end subroutine
+
+
+ subroutine expans( cc ,m1i,m2i ,am1i,am2i ,rmu2 ,ntrm )
+!*******************************************************************
+! Returns the first 1+ntrm coefficients of the expansion in p^2 of
+! the finite part of the 1-loop scalar 2-point function
+!*******************************************************************
+ use avh_olo_func
+ use avh_olo_logc ,only: logc
+ integer ,intent(in) :: ntrm
+ complex(kindc2) ,intent(out) :: cc(0:ntrm)
+ complex(kindc2) ,intent(in) :: m1i,m2i
+ real(kindr2) ,intent(in) :: am1i,am2i,rmu2
+ complex(kindc2) :: m1,m2,zz,oz,xx,logz,tt(ntrm)
+ type(qmplx_type) :: qm1,qm2,qzz
+ real(kindr2) :: am1,am2
+ integer :: ii
+ real(kindr2) ::rr
+!
+! write(*,*) 'MESSAGE from OneLOop bub expans: you are calling me' !CALLINGME
+!
+ if (am1i.lt.am2i) then
+ m1=m1i ;am1=am1i
+ m2=m2i ;am2=am2i
+ else
+ m1=m2i ;am1=am2i
+ m2=m1i ;am2=am1i
+ endif
+!
+ if (am2.eq.R0P0) then
+!
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop bub expans: ' &
+ ,'m1=m2=0, returning 0'
+ do ii=0,ntrm
+ cc(ii) = C0P0
+ enddo
+!
+ else
+!
+ qm1 = qonv(m1/rmu2,-1)
+ qm2 = qonv(m2/rmu2,-1)
+ qzz = qm1/qm2
+ if (mod(qzz%p,2).eq.0) then
+ zz = qzz%c
+ else
+ zz = -qzz%c
+ endif
+!
+ if (m1.eq.C0P0) then
+ cc(0) = C1P0 - logc(qm2)
+ else
+ oz = C1P0-zz
+ rr = abs(oz)
+ if (rr.lt.thrsexp) then
+ xx = aaexp(nnexp)
+ do ii=nnexp-1,1,-1
+ xx = aaexp(ii) + oz*xx
+ enddo
+ xx = oz*xx
+ else
+ logz = logc( qzz )
+ xx = zz*logz + oz
+ xx = xx/oz
+ endif
+ cc(0) = xx - logc(qm2)
+ endif
+!
+ zz = C1P0-zz
+ xx = C1P0
+ call expans1(tt ,ntrm,zz)
+ do ii=1,ntrm
+ xx = xx*m2
+ cc(ii) = tt(ii)/(ii*xx)
+ enddo
+!
+ endif
+ end subroutine
+
+
+ subroutine expans1(tt ,ntrm,zz)
+!*******************************************************************
+! Returns tt(n) = int( ( x*(1-x)/(1-zz*x) )^n , x=0..1 )
+! for n=1...ntrm and |zz|=<1
+!
+! Gives at least 2 correct digits (4 at quad.) for tt(ntrm),
+! and increasingly more digits for tt(i<ntrm)
+!
+! Uses recursion on integrals of the type
+! int( x^m * (1-x)^n / (1-z*x)^n , x=0..1 )
+! and
+! int( x^m * (1-x)^n / (1+y*x)^(n+2) , x=0..1 )
+! where y = z/(1-z)
+! The latter integrals are related to the original ones via the
+! substitution x <- 1-x followed by x <- (1-x)/(1+y*x)
+!*******************************************************************
+ integer ,intent(in) :: ntrm
+ complex(kindc2) ,intent(in) :: zz
+ complex(kindc2) ,intent(out) :: tt(ntrm)
+ complex(kindc2) :: tu(ntrm),tv(ntrm) ,tt0,tu0,tv0,yy,y2,oy
+ real(kindr2) :: rr
+ integer :: nn,ii,jj
+!
+ rr = real(zz)
+ nn = ntrm
+ if (nn.lt.1) nn = 1
+ if (nn.gt.ntrmmax) then
+ if (wunit.gt.0) write(wunit,*) 'WARNING from OneLOop bub expans1: ' &
+ ,'ntrm =',nn,' > nmax =',ntrmmax,', using ntrm=nmax'
+ nn = ntrmmax
+ do ii=nn+1,ntrm
+ tt(ii) = C0P0
+ enddo
+ endif
+!
+ if (zz.eq.C1P0) then
+! write(*,'(a16,i4)') 'simple expansion',nn !DEBUG
+ do ii=1,nn
+ tt(ii) = cmplx(R1P0/(ii+1),kind=kindc2)
+ enddo
+ elseif (rr.lt.thrslist(nn)) then
+! Backward recursion, number of correct decimals constant, so need
+! full precision from the start
+! write(*,'(a8,i4,d24.16)') 'Backward',nn,rr !DEBUG
+ call expans2(tt(nn),tv(nn-1),tu(nn-1) ,nn,zz)
+ do ii=nn-1,2,-1
+ jj = ii+1
+ tt(ii ) = 2*tv(ii) - (zz*tt(jj)*ii)/jj
+ tu(ii-1) = (2+R1P0/ii)*tt(ii) - zz*tu(ii)
+ tv(ii-1) = (C1P0-zz)*tu(ii-1) + zz*( 2*tt(ii) - zz*tu(ii) )
+ enddo
+ tt(1) = 2*tv(1) - zz*tt(2)/2
+ else
+! Foreward recursion, number of correct decimals decreases
+! write(*,'(a8,i4,d24.16)') 'Foreward',nn,rr !DEBUG
+ yy = zz/(C1P0-zz)
+ y2 = yy*yy
+ oy = C1P0+yy ! C1P0/(C1P0-zz)
+ tt0 = C1P0-zz ! 1/(1+y)
+ tu0 = ( oy*log(oy)-yy )/( y2*oy )
+ tv0 = tt0/2
+ tt(1) = ( tt0-2*tu0 )/( 2*yy )
+ tv(1) = ( tv0 - 3*tt(1) )/( 3*yy )
+ tu(1) = ( oy*tu0 - 2*yy*tt(1) - tv0 )/y2
+ do ii=2,nn
+ jj = ii-1
+ tt(ii) = ii*( tt(jj)-2*tu(jj) )/( (ii+1)*yy )
+ tv(ii) = ( ii*tv(jj) - (ii+ii+1)*tt(ii) )/( (ii+2)*yy )
+ tu(ii) = ( oy*tu(jj) - 2*yy*tt(ii) - tv(jj) )/y2
+ enddo
+ yy = oy
+ do ii=1,nn
+ oy = oy*yy
+ tt(ii) = oy*tt(ii)
+ enddo
+ endif
+ end subroutine
+
+
+ subroutine expans2(ff,fa,fb ,nn_in,zz)
+!*******************************************************************
+! ff = Beta(nn+1,nn+1) * 2F1(nn ,nn+1;2*nn+2;zz)
+! fa = Beta(nn+1,nn ) * 2F1(nn-1,nn+1;2*nn+1;zz)
+! fb = Beta(nn ,nn+1) * 2F1(nn ,nn ;2*nn+1;zz)
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: ff,fa,fb
+ complex(kindc2) ,intent(in) :: zz
+ integer ,intent(in) :: nn_in
+ integer ,parameter :: nmax=100
+ integer :: aa,bb,cc,ii,ntrm
+ complex(kindc2) ,save :: qq(0:nmax),qa(0:nmax),qb(0:nmax),gg,ga
+ real(kindr2) ,save :: logprec=-36.0_kindr2
+ integer ,save :: nn=0
+ real(kindr2) :: ac0,bc0,ai,bi,ci,ac,bc
+ if (nn.ne.nn_in) then
+ nn = nn_in
+ aa = nn-1
+ bb = nn
+ cc = nn+nn+1
+ qq(0) = C1P0
+ qa(0) = C1P0
+ qb(0) = C1P0
+ ac0 = real(aa,KIND=kindr2)/real(cc,KIND=kindr2)
+ bc0 = real(bb,KIND=kindr2)/real(cc,KIND=kindr2)
+ ntrm = nmax
+ do ii=1,ntrm
+ ai = real(aa+ii,KIND=kindr2)
+ bi = real(bb+ii,KIND=kindr2)
+ ci = real(cc+ii,KIND=kindr2)
+ ac = ai/ci
+ bc = bi/ci
+ qq(ii) = qq(ii-1) * ai*bc / ii
+ qa(ii) = qa(ii-1) * ac0*bi / ii
+ qb(ii) = qb(ii-1) * ai*bc0 / ii
+ ac0 = ac
+ bc0 = bc
+ enddo
+ ai = R1P0
+ do ii=2,nn-1
+ ai = ai*ii
+ enddo
+ ci = ai
+ cc = nn+nn
+ do ii=nn,cc
+ ci = ci*ii
+ enddo
+ bi = ai*nn
+ gg = bi*bi/(ci*(cc+1))
+ ga = ai*bi/ci
+ logprec = log(epsilon(R1P0))
+ endif
+!
+ ai = abs(zz)
+ if (ai.gt.R0P0) then
+ ntrm = 1 + int(logprec/log(ai))
+ else
+ ntrm = 1
+ endif
+ if (ntrm.gt.nmax) then
+ if (wunit.gt.0) write(wunit,*) 'WARNING from OneLOop bub expans2: ' &
+ ,'ntrm =',ntrm,' > nmax =',nmax,', putting ntrm=nmax'
+ ntrm = nmax
+ endif
+!
+ ff = qq(ntrm)
+ fa = qa(ntrm)
+ fb = qb(ntrm)
+ do ii=ntrm-1,0,-1
+ ff = qq(ii) + ff*zz
+ fa = qa(ii) + fa*zz
+ fb = qb(ii) + fb*zz
+ enddo
+ ff = gg*ff
+ fa = ga*fa
+ fb = ga*fb
+ end subroutine
+!
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_wrp01.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_wrp01.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_wrp01.f90 (revision 119)
@@ -0,0 +1,127 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+ subroutine avh_olo_mu_set(mu)
+ use avh_olo
+ implicit none
+ real(olo_kind) ,intent(in) :: mu
+ call olo_scale( mu )
+ end subroutine
+
+ subroutine avh_olo_onshell(thrs)
+ use avh_olo
+ implicit none
+ real(olo_kind) ,intent(in) :: thrs
+ call olo_onshell( thrs )
+ end subroutine
+
+ subroutine avh_olo_unit( unit_in )
+ use avh_olo
+ implicit none
+ integer ,intent(in) :: unit_in
+ call olo_unit( unit_in ,'all' )
+ end subroutine
+
+ subroutine avh_olo_printall( unit_in )
+ use avh_olo
+ implicit none
+ integer ,intent(in) :: unit_in
+ call olo_unit( unit_in ,'printall' )
+ end subroutine
+
+ subroutine avh_olo_a0c( rslt ,mm )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ complex(olo_kind) ,intent(in) :: mm
+ call olo_a0( rslt ,mm )
+ end subroutine
+
+ subroutine avh_olo_b0c( rslt ,pp,m1,m2 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ complex(olo_kind) ,intent(in) :: pp,m1,m2
+ call olo_b0( rslt ,pp,m1,m2 )
+ end subroutine
+
+ subroutine avh_olo_b11c( b11,b00,b1,b0 ,pp,m1,m2 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ complex(olo_kind) ,intent(in) :: pp,m1,m2
+ call olo_b11( b11,b00,b1,b0 ,pp,m1,m2 )
+ end subroutine
+
+ subroutine avh_olo_c0c( rslt ,p1,p2,p3 ,m1,m2,m3 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ complex(olo_kind) ,intent(in) :: p1,p2,p3 ,m1,m2,m3
+ call olo_c0( rslt ,p1,p2,p3 ,m1,m2,m3 )
+ end subroutine
+
+ subroutine avh_olo_d0c( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ complex(olo_kind) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4
+ call olo_d0( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+ end subroutine
+
+ subroutine avh_olo_a0m( rslt ,mm )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ real(olo_kind) ,intent(in) :: mm
+ call olo_a0( rslt ,mm )
+ end subroutine
+
+ subroutine avh_olo_b0m( rslt ,pp,m1,m2 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ real(olo_kind) ,intent(in) :: pp,m1,m2
+ call olo_b0( rslt ,pp,m1,m2 )
+ end subroutine
+
+ subroutine avh_olo_b11m( b11,b00,b1,b0 ,pp,m1,m2 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ real(olo_kind) ,intent(in) :: pp,m1,m2
+ call olo_b11( b11,b00,b1,b0 ,pp,m1,m2 )
+ end subroutine
+
+ subroutine avh_olo_c0m( rslt ,p1,p2,p3 ,m1,m2,m3 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ real(olo_kind) ,intent(in) :: p1,p2,p3 ,m1,m2,m3
+ call olo_c0( rslt ,p1,p2,p3 ,m1,m2,m3 )
+ end subroutine
+
+ subroutine avh_olo_d0m( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+ use avh_olo
+ implicit none
+ complex(olo_kind) ,intent(out) :: rslt(0:2)
+ real(olo_kind) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4
+ call olo_d0( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+ end subroutine
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/Makefile.dep (revision 119)
@@ -0,0 +1,42 @@
+# Module dependencies
+avh_olo_box.o: avh_olo_func.o avh_olo_kinds.o avh_olo_units.o
+avh_olo_box.lo: avh_olo_func.lo avh_olo_kinds.lo avh_olo_units.lo
+avh_olo_box.obj: avh_olo_func.obj avh_olo_kinds.obj avh_olo_units.obj
+avh_olo_boxc.o: avh_olo_box.o avh_olo_func.o avh_olo_kinds.o avh_olo_units.o
+avh_olo_boxc.lo: avh_olo_box.lo avh_olo_func.lo avh_olo_kinds.lo \
+ avh_olo_units.lo
+avh_olo_boxc.obj: avh_olo_box.obj avh_olo_func.obj avh_olo_kinds.obj \
+ avh_olo_units.obj
+avh_olo_bub.o: avh_olo_func.o avh_olo_kinds.o avh_olo_units.o
+avh_olo_bub.lo: avh_olo_func.lo avh_olo_kinds.lo avh_olo_units.lo
+avh_olo_bub.obj: avh_olo_func.obj avh_olo_kinds.obj avh_olo_units.obj
+avh_olo_func.o: avh_olo_kinds.o avh_olo_units.o
+avh_olo_func.lo: avh_olo_kinds.lo avh_olo_units.lo
+avh_olo_func.obj: avh_olo_kinds.obj avh_olo_units.obj
+avh_olo_kinds.o: avh_olo_xkind.o
+avh_olo_kinds.lo: avh_olo_xkind.lo
+avh_olo_kinds.obj: avh_olo_xkind.obj
+avh_olo_main.o: avh_olo_box.o avh_olo_boxc.o avh_olo_bub.o avh_olo_func.o \
+ avh_olo_kinds.o avh_olo_print.o avh_olo_tri.o avh_olo_units.o \
+ avh_olo_a0_a.h90 avh_olo_a0_b.h90 avh_olo_b0_a.h90 avh_olo_b0_b.h90 \
+ avh_olo_b11_a.h90 avh_olo_b11_b.h90 avh_olo_c0_a.h90 avh_olo_c0_b.h90 \
+ avh_olo_d0_a.h90 avh_olo_d0_b.h90
+avh_olo_main.lo: avh_olo_box.lo avh_olo_boxc.lo avh_olo_bub.lo avh_olo_func.lo \
+ avh_olo_kinds.lo avh_olo_print.lo avh_olo_tri.lo avh_olo_units.lo \
+ avh_olo_a0_a.h90 avh_olo_a0_b.h90 avh_olo_b0_a.h90 avh_olo_b0_b.h90 \
+ avh_olo_b11_a.h90 avh_olo_b11_b.h90 avh_olo_c0_a.h90 avh_olo_c0_b.h90 \
+ avh_olo_d0_a.h90 avh_olo_d0_b.h90
+avh_olo_main.obj: avh_olo_box.obj avh_olo_boxc.obj avh_olo_bub.obj \
+ avh_olo_func.obj avh_olo_kinds.obj avh_olo_print.obj avh_olo_tri.obj \
+ avh_olo_units.obj avh_olo_a0_a.h90 avh_olo_a0_b.h90 avh_olo_b0_a.h90 \
+ avh_olo_b0_b.h90 avh_olo_b11_a.h90 avh_olo_b11_b.h90 avh_olo_c0_a.h90 \
+ avh_olo_c0_b.h90 avh_olo_d0_a.h90 avh_olo_d0_b.h90
+avh_olo_print.o: avh_olo_kinds.o
+avh_olo_print.lo: avh_olo_kinds.lo
+avh_olo_print.obj: avh_olo_kinds.obj
+avh_olo_tri.o: avh_olo_func.o avh_olo_kinds.o avh_olo_units.o
+avh_olo_tri.lo: avh_olo_func.lo avh_olo_kinds.lo avh_olo_units.lo
+avh_olo_tri.obj: avh_olo_func.obj avh_olo_kinds.obj avh_olo_units.obj
+avh_olo_wrp01.o: avh_olo_main.o
+avh_olo_wrp01.lo: avh_olo_main.lo
+avh_olo_wrp01.obj: avh_olo_main.obj
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_xkind.f90.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_xkind.f90.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_xkind.f90.in (revision 119)
@@ -0,0 +1,30 @@
+!
+! Copyright (C) 2011 Andreas van Hameren.
+!
+! This file is part of OneLOop-2.2.1.
+!
+! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation, either version 3 of the License, or
+! (at your option) any later version.
+!
+! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!
+
+
+module avh_olo_xkind
+! use !XKIND_MODULE
+!
+ implicit none
+ private
+ public :: olo_xkind
+!
+ integer ,parameter :: olo_xkind=@avh_olo_real_kind@
+!
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_main.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_main.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_main.f90 (revision 119)
@@ -0,0 +1,1135 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_print
+!
+ implicit none
+ private
+ public :: olo_kind ,olo_unit ,olo_scale ,olo_onshell ,olo_setting &
+ ,olo_a0 ,olo_b0 ,olo_b11 ,olo_c0 ,olo_d0
+!
+ integer ,parameter :: olo_kind = kindr2
+!
+ integer :: ndigits = 0 ! corrected in subroutine hello
+ real(kindr2) :: onshellthrs = R0P0 ! corrected in subroutine hello
+ logical :: nonzerothrs = .false.
+!
+ real(kindr2) :: muscale = R1P0
+!
+ character(99) ,parameter :: warnonshell=&
+ 'it seems you forgot to put some input explicitly on shell. ' &
+ //'You may call olo_onshell to cure this.'
+!
+ logical :: intro=.true.
+!
+ interface olo_a0
+ module procedure a0r,a0rr,a0c,a0cr
+ end interface
+ interface olo_b0
+ module procedure b0rr,b0rrr,b0rc,b0rcr,b0cc,b0ccr
+ end interface
+ interface olo_b11
+ module procedure b11rr,b11rrr,b11rc,b11rcr,b11cc,b11ccr
+ end interface
+ interface olo_c0
+ module procedure c0rr,c0rrr,c0rc,c0rcr,c0cc,c0ccr
+ end interface
+ interface olo_d0
+ module procedure d0rr,d0rrr,d0rc,d0rcr,d0cc,d0ccr
+ end interface
+
+contains
+
+
+ subroutine hello
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_loga2 ,only: init_loga2
+ use avh_olo_li2c2 ,only: init_li2c2
+ use avh_olo_bub ,only: init_bub
+ use avh_olo_boxc ,only: init_boxc
+!
+ intro = .false.
+!
+ write(*,'(a72)') '########################################################################'
+ write(*,'(a72)') '# #'
+ write(*,'(a72)') '# You are using OneLOop-2.2.1 #'
+ write(*,'(a72)') '# #'
+ write(*,'(a72)') '# for the evaluation of 1-loop scalar 1-, 2-, 3- and 4-point functions #'
+ write(*,'(a72)') '# #'
+ write(*,'(a72)') '# author: Andreas van Hameren <hamerenREMOVETHIS@ifj.edu.pl> #'
+ write(*,'(a72)') '# date: 07-09-2011 #'
+ write(*,'(a72)') '# #'
+ write(*,'(a72)') '# Please cite #'
+ write(*,'(a72)') '# A. van Hameren, #'
+ write(*,'(a72)') '# Comput.Phys.Commun. 182 (2011) 2427-2438, arXiv:1007.4716 #'
+ write(*,'(a72)') '# A. van Hameren, C.G. Papadopoulos and R. Pittau, #'
+ write(*,'(a72)') '# JHEP 0909:106,2009, arXiv:0903.4665 #'
+ write(*,'(a72)') '# in publications with results obtained with the help of this program. #'
+ write(*,'(a72)') '# #'
+ write(*,'(a72)') '########################################################################'
+!
+ ndigits = int(digits(R1P0)*log(radix(R1P0)*R1P0)/log(R1P0*10))
+ if (ndigits.lt.16) then ;onshellthrs = epsilon(R1P0)*100
+ elseif (ndigits.lt.24) then ;onshellthrs = epsilon(R1P0)*1000
+ elseif (ndigits.lt.32) then ;onshellthrs = epsilon(R1P0)*10000
+ else ;onshellthrs = epsilon(R1P0)*1000000
+ endif
+!
+ call init_print( ndigits )
+ call init_loga2( ndigits )
+ call init_li2c2( ndigits )
+ call init_bub( ndigits )
+ call init_boxc( ndigits )
+!
+ end subroutine
+
+
+ subroutine olo_unit( val ,message )
+!*******************************************************************
+!*******************************************************************
+ integer ,intent(in) :: val
+ character(*),intent(in),optional :: message
+ if (intro) call hello
+ if (present(message)) then ;call set_unit( message ,val )
+ else ;call set_unit( 'all' ,val )
+ endif
+ end subroutine
+
+
+ subroutine olo_scale( val )
+!*******************************************************************
+!*******************************************************************
+ real(kindr2) ,intent(in) :: val
+ if (intro) call hello
+ muscale = val
+ end subroutine
+
+
+ subroutine olo_onshell( thrs )
+!*******************************************************************
+!*******************************************************************
+ real(kindr2) ,intent(in) :: thrs
+ if (intro) call hello
+ nonzerothrs = .true.
+ onshellthrs = thrs
+ end subroutine
+
+
+ subroutine olo_setting( iunit )
+!*******************************************************************
+!*******************************************************************
+ integer,optional,intent(in) :: iunit
+ integer :: nunit
+ if (intro) call hello
+ nunit = munit
+ if (present(iunit)) nunit = iunit
+ if (nunit.le.0) return
+!
+ write(nunit,*) 'MESSAGE from OneLOop: real kind parameter =',trim(myprint(kindr2))
+ write(nunit,*) 'MESSAGE from OneLOop: significant digits =',trim(myprint(ndigits))
+!
+ if (nonzerothrs) then
+ write(nunit,*) 'MESSAGE from OneLOop: on-shell threshold =',trim(myprint(onshellthrs))
+ else
+ write(nunit,*) 'MESSAGE from OneLOop: on-shell threshold is not set'
+ endif
+!
+ write(nunit,*) 'MESSAGE from OneLOop: scale (mu, not mu^2) =',trim(myprint(muscale))
+!
+ end subroutine
+
+
+!*******************************************************************
+!
+! C / d^(Dim)q
+! rslt = ------ | --------
+! i*pi^2 / (q^2-mm)
+!
+! with Dim = 4-2*eps
+! C = pi^eps * mu^(2*eps) * exp(gamma_Euler*eps)
+!
+! input: mm = mass squared
+! output: rslt(0) = eps^0 -coefficient
+! rslt(1) = eps^(-1)-coefficient
+! rslt(2) = eps^(-2)-coefficient
+!
+! Check the comments in subroutine olo_onshell to find out how
+! this routine decides when to return IR-divergent cases.
+!*******************************************************************
+!
+ subroutine a0r( rslt ,mm )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: tadp
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: mm
+!
+ include 'avh_olo_a0_a.h90'
+!
+ mulocal = muscale
+!
+ include 'avh_olo_a0_b.h90'
+!
+ end subroutine
+!
+ subroutine a0rr( rslt ,mm ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: tadp
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: mm
+ real(kindr2) ,intent(in) :: rmu
+!
+ include 'avh_olo_a0_a.h90'
+!
+ mulocal = rmu
+!
+ include 'avh_olo_a0_b.h90'
+!
+ end subroutine
+!
+ subroutine a0c( rslt ,mm )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: tadp
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: mm
+!
+ include 'avh_olo_a0_a.h90'
+!
+ mulocal = muscale
+!
+ include 'avh_olo_a0_b.h90'
+!
+ end subroutine
+!
+ subroutine a0cr( rslt ,mm ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: tadp
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: mm
+ real(kindr2) ,intent(in) :: rmu
+!
+ include 'avh_olo_a0_a.h90'
+!
+ mulocal = rmu
+!
+ include 'avh_olo_a0_b.h90'
+!
+ end subroutine
+
+
+!*******************************************************************
+!
+! C / d^(Dim)q
+! rslt = ------ | --------------------
+! i*pi^2 / [q^2-m1][(q+k)^2-m2]
+!
+! with Dim = 4-2*eps
+! C = pi^eps * mu^(2*eps) * exp(gamma_Euler*eps)
+!
+! input: pp = k^2, m1,m2 = mass squared
+! output: rslt(0) = eps^0 -coefficient
+! rslt(1) = eps^(-1)-coefficient
+! rslt(2) = eps^(-2)-coefficient
+!
+! Check the comments in subroutine olo_onshell to find out how
+! this routine decides when to return IR-divergent cases.
+!*******************************************************************
+!
+ subroutine b0rr( rslt ,pp ,m1,m2 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub0
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: pp,m1,m2
+!
+ include 'avh_olo_b0_a.h90'
+!
+ mulocal = muscale
+!
+ app = abs(pp)
+ am1 = abs(m1)
+ am2 = abs(m2)
+!
+ include 'avh_olo_b0_b.h90'
+!
+ end subroutine
+!
+ subroutine b0rrr( rslt ,pp ,m1,m2 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub0
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: pp,m1,m2,rmu
+!
+ include 'avh_olo_b0_a.h90'
+!
+ mulocal = rmu
+!
+ app = abs(pp)
+ am1 = abs(m1)
+ am2 = abs(m2)
+!
+ include 'avh_olo_b0_b.h90'
+!
+ end subroutine
+!
+ subroutine b0rc( rslt ,pp ,m1,m2 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub0
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: pp
+ complex(kindc2) ,intent(in) :: m1,m2
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b0_a.h90'
+!
+ mulocal = muscale
+!
+ app = abs(pp)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b0_b.h90'
+!
+ end subroutine
+!
+ subroutine b0rcr( rslt ,pp,m1,m2 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub0
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: pp ,rmu
+ complex(kindc2) ,intent(in) :: m1,m2
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b0_a.h90'
+!
+ mulocal = rmu
+!
+ app = abs(pp)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b0_b.h90'
+!
+ end subroutine
+!
+ subroutine b0cc( rslt ,pp,m1,m2 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub0
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: pp,m1,m2
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b0_a.h90'
+!
+ mulocal = muscale
+!
+ app = real(ss)
+ if (aimag(ss).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'ss has non-zero imaginary part, putting it to zero.'
+ ss = cmplx( app ,kind=kindc2 )
+ endif
+ app = abs(app)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b0_b.h90'
+!
+ end subroutine
+!
+ subroutine b0ccr( rslt ,pp,m1,m2 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub0
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: pp,m1,m2
+ real(kindr2) ,intent(in) :: rmu
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b0_a.h90'
+!
+ mulocal = rmu
+!
+ app = real(ss)
+ if (aimag(ss).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'ss has non-zero imaginary part, putting it to zero.'
+ ss = cmplx( app ,kind=kindc2 )
+ endif
+ app = abs(app)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b0: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b0_b.h90'
+!
+ end subroutine
+
+
+!*******************************************************************
+! Return the Papparino-Veltman functions b11,b00,b1,b0 , for
+!
+! C / d^(Dim)q
+! ------ | -------------------- = b0
+! i*pi^2 / [q^2-m1][(q+p)^2-m2]
+!
+! C / d^(Dim)q q^mu
+! ------ | -------------------- = p^mu b1
+! i*pi^2 / [q^2-m1][(q+p)^2-m2]
+!
+! C / d^(Dim)q q^mu q^nu
+! ------ | -------------------- = g^{mu,nu} b00 + p^mu p^nu b11
+! i*pi^2 / [q^2-m1][(q+p)^2-m2]
+!
+! Check the comments in subroutine olo_onshell to find out how
+! this routine decides when to return IR-divergent cases.
+!*******************************************************************
+!
+ subroutine b11rr( b11,b00,b1,b0 ,pp,m1,m2 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub11
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ real(kindr2) ,intent(in) :: pp,m1,m2
+!
+ include 'avh_olo_b11_a.h90'
+!
+ mulocal = muscale
+!
+ app = abs(pp)
+ am1 = abs(m1)
+ am2 = abs(m2)
+!
+ include 'avh_olo_b11_b.h90'
+!
+ end subroutine
+!
+ subroutine b11rrr( b11,b00,b1,b0 ,pp,m1,m2 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub11
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ real(kindr2) ,intent(in) :: pp,m1,m2,rmu
+!
+ include 'avh_olo_b11_a.h90'
+!
+ mulocal = rmu
+!
+ app = abs(pp)
+ am1 = abs(m1)
+ am2 = abs(m2)
+!
+ include 'avh_olo_b11_b.h90'
+!
+ end subroutine
+!
+ subroutine b11rc( b11,b00,b1,b0 ,pp,m1,m2 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub11
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ real(kindr2) ,intent(in) :: pp
+ complex(kindc2) ,intent(in) :: m1,m2
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b11_a.h90'
+!
+ mulocal = muscale
+!
+ app = abs(pp)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b11_b.h90'
+!
+ end subroutine
+!
+ subroutine b11rcr( b11,b00,b1,b0 ,pp,m1,m2 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub11
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ real(kindr2) ,intent(in) :: pp ,rmu
+ complex(kindc2) ,intent(in) :: m1,m2
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b11_a.h90'
+!
+ mulocal = rmu
+!
+ app = abs(pp)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b11_b.h90'
+!
+ end subroutine
+!
+ subroutine b11cc( b11,b00,b1,b0 ,pp,m1,m2 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub11
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ complex(kindc2) ,intent(in) :: pp,m1,m2
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b11_a.h90'
+!
+ mulocal = muscale
+!
+ app = real(ss)
+ if (aimag(ss).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'ss has non-zero imaginary part, putting it to zero.'
+ ss = cmplx( app ,kind=kindc2 )
+ endif
+ app = abs(app)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b11_b.h90'
+!
+ end subroutine
+!
+ subroutine b11ccr( b11,b00,b1,b0 ,pp,m1,m2 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_bub ,only: bub11
+ complex(kindc2) ,intent(out) :: b11(0:2),b00(0:2),b1(0:2),b0(0:2)
+ complex(kindc2) ,intent(in) :: pp,m1,m2
+ real(kindr2) ,intent(in) :: rmu
+ real(kindr2) :: hh
+!
+ include 'avh_olo_b11_a.h90'
+!
+ mulocal = rmu
+!
+ app = real(ss)
+ if (aimag(ss).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'ss has non-zero imaginary part, putting it to zero.'
+ ss = cmplx( app ,kind=kindc2 )
+ endif
+ app = abs(app)
+!
+ am1 = real(r1)
+ hh = aimag(r1)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r1 has positive imaginary part, switching its sign.'
+ r1 = cmplx( am1 ,-hh ,kind=kindc2 )
+ endif
+ am1 = abs(am1) + abs(hh)
+!
+ am2 = real(r2)
+ hh = aimag(r2)
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop b11: ' &
+ ,'r2 has positive imaginary part, switching its sign.'
+ r2 = cmplx( am2 ,-hh ,kind=kindc2 )
+ endif
+ am2 = abs(am2) + abs(hh)
+!
+ include 'avh_olo_b11_b.h90'
+!
+ end subroutine
+
+
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | ---------------------------------------
+! i*pi^2 / [q^2-m1] [(q+k1)^2-m2] [(q+k1+k2)^2-m3]
+!
+! with Dim = 4-2*eps
+! C = pi^eps * mu^(2*eps)
+! * GAMMA(1-2*eps)/GAMMA(1-eps)^2/GAMMA(1+eps)
+!
+! input: p1=k1^2, p2=k2^2, p3=(k1+k2)^2, m1,m2,m3=squared masses
+! output: rslt(0) = eps^0 -coefficient
+! rslt(1) = eps^(-1)-coefficient
+! rslt(2) = eps^(-2)-coefficient
+!
+! Check the comments in subroutine olo_onshell to find out how
+! this routine decides when to return IR-divergent cases.
+!*******************************************************************
+!
+ subroutine c0rr( rslt ,p1,p2,p3 ,m1,m2,m3 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_tri
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3 ,m1,m2,m3
+ real(kindr2) :: pp(3),mm(3)
+!
+ include 'avh_olo_c0_a.h90'
+!
+ mulocal = muscale
+!
+ do ii=1,3
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,3
+ am(ii) = abs(mm(ii))
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_c0_b.h90'
+!
+ end subroutine
+!
+ subroutine c0rrr( rslt ,p1,p2,p3 ,m1,m2,m3 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_tri
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3 ,m1,m2,m3 ,rmu
+ real(kindr2) :: pp(3),mm(3)
+!
+ include 'avh_olo_c0_a.h90'
+!
+ mulocal = rmu
+!
+ do ii=1,3
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,3
+ am(ii) = abs(mm(ii))
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_c0_b.h90'
+!
+ end subroutine
+!
+ subroutine c0rc( rslt ,p1,p2,p3 ,m1,m2,m3 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_tri
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3
+ complex(kindc2) ,intent(in) :: m1,m2,m3
+ real(kindr2) :: pp(3)
+ complex(kindc2) :: mm(3)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_c0_a.h90'
+!
+ mulocal = muscale
+!
+ do ii=1,3
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,3
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_c0_b.h90'
+!
+ end subroutine
+!
+ subroutine c0rcr( rslt ,p1,p2,p3 ,m1,m2,m3 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_tri
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3 ,rmu
+ complex(kindc2) ,intent(in) :: m1,m2,m3
+ real(kindr2) :: pp(3)
+ complex(kindc2) :: mm(3)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_c0_a.h90'
+!
+ mulocal = rmu
+!
+ do ii=1,3
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,3
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_c0_b.h90'
+!
+ end subroutine
+!
+ subroutine c0cc( rslt ,p1,p2,p3 ,m1,m2,m3 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_tri
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3 ,m1,m2,m3
+ complex(kindc2) :: pp(3),mm(3)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_c0_a.h90'
+!
+ mulocal = muscale
+!
+ do ii=1,3
+ ap(ii) = real(pp(ii))
+ if (aimag(pp(ii)).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'momentum with non-zero imaginary part, putting it to zero.'
+ pp(ii) = cmplx( ap(ii) ,kind=kindc2 )
+ endif
+ ap(ii) = abs(ap(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,3
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_c0_b.h90'
+!
+ end subroutine
+!
+ subroutine c0ccr( rslt ,p1,p2,p3 ,m1,m2,m3 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_tri
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3 ,m1,m2,m3
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: pp(3),mm(3)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_c0_a.h90'
+!
+ mulocal = rmu
+!
+ do ii=1,3
+ ap(ii) = real(pp(ii))
+ if (aimag(pp(ii)).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'momentum with non-zero imaginary part, putting it to zero.'
+ pp(ii) = cmplx( ap(ii) ,kind=kindc2 )
+ endif
+ ap(ii) = abs(ap(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,3
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop c0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_c0_b.h90'
+!
+ end subroutine
+
+
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | --------------------------------------------------------
+! i*pi^2 / [q^2-m1][(q+k1)^2-m2][(q+k1+k2)^2-m3][(q+k1+k2+k3)^2-m4]
+!
+! with Dim = 4-2*eps
+! C = pi^eps * mu^(2*eps)
+! * GAMMA(1-2*eps)/GAMMA(1-eps)^2/GAMMA(1+eps)
+!
+! input: p1=k1^2, p2=k2^2, p3=k3^2, p4=(k1+k2+k3)^2,
+! p12=(k1+k2)^2, p23=(k2+k3)^2,
+! m1,m2,m3,m4=squared masses
+! output: rslt(0) = eps^0 -coefficient
+! rslt(1) = eps^(-1)-coefficient
+! rslt(2) = eps^(-2)-coefficient
+!
+! Check the comments in avh_olo_onshell to find out how this
+! routines decides when to return IR-divergent cases.
+!*******************************************************************
+!
+ subroutine d0rr( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_box
+ use avh_olo_boxc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4
+ real(kindr2) :: pp(6),mm(4)
+!
+ include 'avh_olo_d0_a.h90'
+!
+ mulocal = muscale
+!
+ do ii=1,6
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,4
+ am(ii) = abs(mm(ii))
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_d0_b.h90'
+!
+ end subroutine
+!
+ subroutine d0rrr( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_box
+ use avh_olo_boxc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 ,rmu
+ real(kindr2) :: pp(6),mm(4)
+!
+ include 'avh_olo_d0_a.h90'
+!
+ mulocal = rmu
+!
+ do ii=1,6
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,4
+ am(ii) = abs(mm(ii))
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_d0_b.h90'
+!
+ end subroutine
+!
+ subroutine d0rc( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_box
+ use avh_olo_boxc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3,p4,p12,p23
+ complex(kindc2) ,intent(in) :: m1,m2,m3,m4
+ real(kindr2) :: pp(6)
+ complex(kindc2) :: mm(4)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_d0_a.h90'
+!
+ mulocal = muscale
+!
+ do ii=1,6
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,4
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_d0_b.h90'
+!
+ end subroutine
+!
+ subroutine d0rcr( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_box
+ use avh_olo_boxc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ real(kindr2) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,rmu
+ complex(kindc2) ,intent(in) :: m1,m2,m3,m4
+ real(kindr2) :: pp(6)
+ complex(kindc2) :: mm(4)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_d0_a.h90'
+!
+ mulocal = rmu
+!
+ do ii=1,6
+ ap(ii) = abs(pp(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,4
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_d0_b.h90'
+!
+ end subroutine
+!
+ subroutine d0cc( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_box
+ use avh_olo_boxc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4
+ complex(kindc2) :: pp(6),mm(4)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_d0_a.h90'
+!
+ mulocal = muscale
+!
+ do ii=1,6
+ ap(ii) = real(pp(ii))
+ if (aimag(pp(ii)).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'momentum with non-zero imaginary part, putting it to zero.'
+ pp(ii) = cmplx( ap(ii) ,R0P0 ,kind=kindc2 )
+ endif
+ ap(ii) = abs(ap(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,4
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_d0_b.h90'
+!
+ end subroutine
+!
+ subroutine d0ccr( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 ,rmu )
+!*******************************************************************
+!*******************************************************************
+ use avh_olo_box
+ use avh_olo_boxc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: pp(6),mm(4)
+ real(kindr2) :: hh
+!
+ include 'avh_olo_d0_a.h90'
+!
+ mulocal = rmu
+!
+ do ii=1,6
+ ap(ii) = real(pp(ii))
+ if (aimag(pp(ii)).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'momentum with non-zero imaginary part, putting it to zero.'
+ pp(ii) = cmplx( ap(ii) ,R0P0 ,kind=kindc2 )
+ endif
+ ap(ii) = abs(ap(ii))
+ if (ap(ii).gt.smax) smax = ap(ii)
+ enddo
+!
+ do ii=1,4
+ am(ii) = real(mm(ii))
+ hh = aimag(mm(ii))
+ if (hh.gt.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop d0: ' &
+ ,'mass-squared has positive imaginary part, switching its sign.'
+ mm(ii) = cmplx( am(ii) ,-hh ,kind=kindc2 )
+ endif
+ am(ii) = abs(am(ii)) + abs(hh)
+ if (am(ii).gt.smax) smax = am(ii)
+ enddo
+!
+ include 'avh_olo_d0_b.h90'
+!
+ end subroutine
+
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b11_a.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b11_a.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b11_a.h90 (revision 119)
@@ -0,0 +1,27 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ complex(kindc2) :: ss,r1,r2
+ real(kindr2) :: app,am1,am2,thrs,mulocal,mulocal2
+ character(26+99) ,parameter :: warning=&
+ 'WARNING from OneLOop b11: '//warnonshell
+ if (intro) call hello
+!
+ ss = pp
+ r1 = m1
+ r2 = m2
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b11_b.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b11_b.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_b11_b.h90 (revision 119)
@@ -0,0 +1,53 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ mulocal2 = mulocal*mulocal
+!
+ if (nonzerothrs) then
+ thrs = onshellthrs
+ if (app.lt.thrs) app = R0P0
+ if (am1.lt.thrs) am1 = R0P0
+ if (am2.lt.thrs) am2 = R0P0
+ elseif (wunit.gt.0) then
+ thrs = onshellthrs*max(app,am1,am2,mulocal2)
+ if (R0P0.lt.app.and.app.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.am1.and.am1.lt.thrs) write(wunit,*) warning
+ if (R0P0.lt.am2.and.am2.lt.thrs) write(wunit,*) warning
+ endif
+!
+ call bub11( b11,b00,b1,b0 ,ss,r1,r2 ,app,am1,am2 ,mulocal2 )
+!
+ if (punit.gt.0) then
+ if (nonzerothrs) write(punit,*) 'onshell:',trim(myprint(onshellthrs))
+ write(punit,*) 'muscale:',trim(myprint(mulocal))
+ write(punit,*) ' pp:',trim(myprint(pp))
+ write(punit,*) ' m1:',trim(myprint(m1))
+ write(punit,*) ' m2:',trim(myprint(m2))
+ write(punit,*) 'b11(2):',trim(myprint(b11(2)))
+ write(punit,*) 'b11(1):',trim(myprint(b11(1)))
+ write(punit,*) 'b11(0):',trim(myprint(b11(0)))
+ write(punit,*) 'b00(2):',trim(myprint(b00(2)))
+ write(punit,*) 'b00(1):',trim(myprint(b00(1)))
+ write(punit,*) 'b00(0):',trim(myprint(b00(0)))
+ write(punit,*) ' b1(2):',trim(myprint(b1(2) ))
+ write(punit,*) ' b1(1):',trim(myprint(b1(1) ))
+ write(punit,*) ' b1(0):',trim(myprint(b1(0) ))
+ write(punit,*) ' b0(2):',trim(myprint(b0(2) ))
+ write(punit,*) ' b0(1):',trim(myprint(b0(1) ))
+ write(punit,*) ' b0(0):',trim(myprint(b0(0) ))
+ endif
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_box.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_box.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_box.f90 (revision 119)
@@ -0,0 +1,1551 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_box
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: box00,box03,box05,box06,box07,box08,box09,box10,box11,box12 &
+ ,box13,box14,box15,box16,boxf1,boxf2,boxf3,boxf5,boxf4 &
+ ,permtable,casetable,base
+ complex(kindc2) ,parameter :: oieps=C1P0+CiP0*epsilon(R1P0)**2
+ integer ,parameter :: permtable(6,0:15)=reshape((/ &
+ 1,2,3,4 ,5,6 &! 0, 0 masses non-zero, no perm
+ ,1,2,3,4 ,5,6 &! 1, 1 mass non-zero, no perm
+ ,4,1,2,3 ,6,5 &! 2, 1 mass non-zero, 1 cyclic perm
+ ,1,2,3,4 ,5,6 &! 3, 2 neighbour masses non-zero, no perm
+ ,3,4,1,2 ,5,6 &! 4, 1 mass non-zero, 2 cyclic perm's
+ ,1,2,3,4 ,5,6 &! 5, 2 opposite masses non-zero, no perm
+ ,4,1,2,3 ,6,5 &! 6, 2 neighbour masses non-zero, 1 cyclic perm
+ ,1,2,3,4 ,5,6 &! 7, 3 masses non-zero, no perm
+ ,2,3,4,1 ,6,5 &! 8, 1 mass non-zero, 3 cyclic perm's
+ ,2,3,4,1 ,6,5 &! 9, 2 neighbour masses non-zero, 3 cyclic perm's
+ ,4,1,2,3 ,6,5 &!10, 2 opposite masses non-zero, 1 cyclic perm
+ ,2,3,4,1 ,6,5 &!11, 3 masses non-zero, 3 cyclic perm's
+ ,3,4,1,2 ,5,6 &!12, 2 neighbour masses non-zero, 2 cyclic perm's
+ ,3,4,1,2 ,5,6 &!13, 3 masses non-zero, 2 cyclic perm's
+ ,4,1,2,3 ,6,5 &!14, 3 masses non-zero, 1 cyclic perm
+ ,1,2,3,4 ,5,6 &!15, 4 masses non-zero, no perm
+ /),(/6,16/)) ! 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+ integer ,parameter :: casetable(0:15)= &
+ (/0,1,1,2,1,5,2,3,1,2, 5, 3, 2, 3, 3, 4/)
+ integer ,parameter :: base(4)=(/8,4,2,1/)
+contains
+
+ subroutine box16( rslt ,p2,p3,p12,p23 ,m2,m3,m4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | ------------------------------------------------------
+! i*pi^2 / q^2 [(q+k1)^2-m2] [(q+k1+k2)^2-m3] [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=m2, k2^2=p2, k3^2=p3, (k1+k2+k3)^2=m4
+! m2,m4 should NOT be identically 0d0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p2,p3,p12,p23 ,m2,m3,m4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: cp2,cp3,cp12,cp23,cm2,cm3,cm4,sm1,sm2,sm3,sm4 &
+ ,r13,r23,r24,r34,d23,d24,d34,log24,cc
+ type(qmplx_type) :: q13,q23,q24,q34,qss,qy1,qy2,qz1,qz2
+!
+! write(*,*) 'MESSAGE from OneLOop box16: you are calling me' !CALLINGME
+!
+ if (abs(m2).gt.abs(m4)) then
+ cm2=m2 ;cm4=m4 ;cp2=p2 ;cp3=p3
+ else
+ cm2=m4 ;cm4=m2 ;cp2=p3 ;cp3=p2
+ endif
+ cm3=m3 ;cp12=p12 ;cp23=p23
+!
+ if (cp12.eq.cm3) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box16: ' &
+ ,'p12=m3, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ sm1 = cmplx(abs(rmu))
+ sm2 = mysqrt(cm2)
+ sm3 = mysqrt(cm3)
+ sm4 = mysqrt(cm4)
+!
+ r13 = (cm3-cp12)/(sm1*sm3)
+ call rfun( r23,d23 ,(cm2+cm3-cp2 )/(sm2*sm3) )
+ call rfun( r24,d24 ,(cm2+cm4-cp23)/(sm2*sm4) )
+ call rfun( r34,d34 ,(cm3+cm4-cp3 )/(sm3*sm4) )
+ q13 = qonv(r13,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ if (r24.eq.-C1P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box16: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ qss = q23*q34
+ qy1 = qss*q24
+ qy2 = qss/q24
+!
+ qss = q23/q34
+ qz1 = qss*q24
+ qz2 = qss/q24
+!
+ qss = q13*q23
+ qss = (qss*qss)/q24
+!
+ cc = C1P0/( sm2*sm4*(cp12-cm3) )
+ log24 = logc2(q24)*r24/(C1P0+r24)
+ rslt(2) = C0P0
+ rslt(1) = -log24
+ rslt(0) = log24*logc(qss) + li2c2(q24*q24,qonv(C1P0))*r24 &
+ - li2c2(qy1,qy2)*r23*r34 - li2c2(qz1,qz2)*r23/r34
+ rslt(1) = cc*rslt(1)
+ rslt(0) = cc*rslt(0)
+ end subroutine
+
+
+ subroutine box15( rslt ,p2,p3,p12,p23 ,m2,m4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | -------------------------------------------------
+! i*pi^2 / q^2 [(q+k1)^2-m2] (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=m2, k2^2=p2, k3^2=p3, (k1+k2+k3)^2=m4
+! m2,m4 should NOT be identically 0d0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p2,p3,p12,p23 ,m2,m4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: cp2,cp3,cp12,cp23,cm2,cm4,sm1,sm2,sm3,sm4 &
+ ,r13,r23,r24,r34,d24,log24,cc
+ type(qmplx_type) :: q13,q23,q24,q34,qss,qz1,qz2
+!
+! write(*,*) 'MESSAGE from OneLOop box15: you are calling me' !CALLINGME
+!
+ if (abs(m2-p2).gt.abs(m4-p3)) then
+ cm2=m2 ;cm4=m4 ;cp2=p2 ;cp3=p3
+ else
+ cm2=m4 ;cm4=m2 ;cp2=p3 ;cp3=p2
+ endif
+ cp12=p12 ;cp23=p23
+!
+ if (cp12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box15: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ sm1 = cmplx(abs(rmu),kind=kindc2)
+ sm2 = mysqrt(cm2)
+ sm4 = mysqrt(cm4)
+ sm3 = cmplx(abs(sm2),kind=kindc2)
+ r13 = ( -cp12)/(sm1*sm3)
+ r23 = (cm2 -cp2 )/(sm2*sm3)
+ r34 = ( cm4-cp3 )/(sm3*sm4)
+ call rfun( r24,d24 ,(cm2+cm4-cp23)/(sm2*sm4) )
+!
+ if (r24.eq.-C1P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box15: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ q13 = qonv(r13,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ qss = q13/q23
+ qss = (qss*qss)/q24
+!
+ cc = r24/(sm2*sm4*cp12)
+ log24 = logc2(q24)/(C1P0+r24)
+ rslt(2) = C0P0
+ rslt(1) = -log24
+ rslt(0) = log24 * logc(qss) + li2c2(q24*q24,qonv(C1P0))
+ if (r34.ne.C0P0) then
+ qss = q34/q23
+ qz1 = qss*q24
+ qz2 = qss/q24
+ rslt(0) = rslt(0) - li2c2(qz1,qz2)*r34/(r23*r24)
+ endif
+ rslt(1) = cc*rslt(1)
+ rslt(0) = cc*rslt(0)
+ end subroutine
+
+
+ subroutine box14( rslt ,cp12,cp23 ,cm2,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | -------------------------------------------------
+! i*pi^2 / q^2 [(q+k1)^2-m2] (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=m2, k2^2=m2, k3^2=m4, (k1+k2+k3)^2=m4
+! m2,m4 should NOT be identically 0d0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp12,cp23,cm2,cm4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: sm2,sm4,r24,d24,cc
+!
+! write(*,*) 'MESSAGE from OneLOop box14: you are calling me' !CALLINGME
+!
+ if (cp12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box14: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ sm2 = mysqrt(cm2)
+ sm4 = mysqrt(cm4)
+ call rfun( r24,d24 ,(cm2+cm4-cp23)/(sm2*sm4) )
+!
+ if (r24.eq.-C1P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box14: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ cc = -2*logc2(qonv(r24,-1))*r24/(C1P0+r24)/(sm2*sm4*cp12)
+!
+ rslt(2) = C0P0
+ rslt(1) = cc
+ rslt(0) = -cc*logc(qonv(-cp12/(rmu*rmu),-1))
+ end subroutine
+
+
+ subroutine box13( rslt ,p2,p3,p4,p12,p23 ,m3,m4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | -------------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 [(q+k1+k2)^2-m3] [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=0, k2^2=p2, k3^2=p3, (k1+k2+k3)^2=p4
+! m3,m4 should NOT be identically 0d0
+! p4 should NOT be identical to m4
+! p2 should NOT be identical to m3
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p2,p3,p4,p12,p23,m3,m4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: cp2,cp3,cp4,cp12,cp23,cm3,cm4,sm3,sm4,sm1,sm2 &
+ ,r13,r14,r23,r24,r34,d34,cc,logd,li2d,loge,li2f,li2b,li2e
+ type(qmplx_type) :: q13,q14,q23,q24,q34,qy1,qy2
+ real(kindr2) :: h1,h2
+!
+! write(*,*) 'MESSAGE from OneLOop box13: you are calling me' !CALLINGME
+!
+ if (p12.eq.m3) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box13: ' &
+ ,'p12=m3, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (p23.eq.m4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box13: ' &
+ ,'p23=m4, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ h1 = abs((m3-p12)*(m4-p23))
+ h2 = abs((m3-p2 )*(m4-p4 ))
+ if (h1.ge.h2) then
+ cp2=p2 ;cp3=p3 ;cp4=p4 ;cp12=p12 ;cp23=p23 ;cm3=m3 ;cm4=m4
+ else
+ cp2=p12 ;cp3=p3 ;cp4=p23 ;cp12=p2 ;cp23=p4 ;cm3=m3 ;cm4=m4
+ endif
+!
+ sm3 = mysqrt(cm3)
+ sm4 = mysqrt(cm4)
+ sm1 = cmplx(abs(rmu),kind=kindc2)
+ sm2 = sm1
+!
+ r13 = (cm3-cp12)/(sm1*sm3)
+ r14 = (cm4-cp4 )/(sm1*sm4)
+ r23 = (cm3-cp2 )/(sm2*sm3)
+ r24 = (cm4-cp23)/(sm2*sm4)
+ call rfun( r34,d34 ,(cm3+cm4-cp3)/(sm3*sm4) )
+!
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ qy1 = q14*q23/q13/q24
+ logd = logc2(qy1 )/(r13*r24)
+ li2d = li2c2(qy1,qonv(C1P0))/(r13*r24)
+ loge = logc(q13)
+!
+ qy1 = q23/q24
+ qy2 = q13/q14
+ li2f = li2c2( qy1*q34,qy2*q34 )*r34/(r14*r24)
+ li2b = li2c2( qy1/q34,qy2/q34 )/(r34*r14*r24)
+ li2e = li2c2( q14/q24,q13/q23 )/(r23*r24)
+!
+ rslt(2) = C0P0
+ rslt(1) = logd
+ rslt(0) = li2f + li2b + 2*li2e - 2*li2d - 2*logd*loge
+ cc = sm1*sm2*sm3*sm4
+ rslt(1) = rslt(1)/cc
+ rslt(0) = rslt(0)/cc
+ end subroutine
+
+
+ subroutine box12( rslt ,cp3,cp4,cp12,cp23 ,cm3,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | -------------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 [(q+k1+k2)^2-m3] [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=0, k2^2=m3, k3^2=p3, (k1+k2+k3)^2=p4
+! m3,m4 should NOT be indentiallcy 0d0
+! p4 should NOT be identical to m4
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp3,cp4,cp12,cp23,cm3,cm4
+ real(kindc2) ,intent(in) :: rmu
+ complex(kindc2) :: sm3,sm4,sm1,sm2,r13,r14,r24,r34,d34,cc &
+ ,log13,log14,log24,log34,li2f,li2b,li2d
+ type(qmplx_type) :: q13,q14,q24,q34,qyy
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/32
+!
+! write(*,*) 'MESSAGE from OneLOop box12: you are calling me' !CALLINGME
+!
+ if (cp12.eq.cm3) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box12: ' &
+ ,'p12=m3, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (cp23.eq.cm4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box12: ' &
+ ,'p23=m4, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ sm3 = mysqrt(cm3)
+ sm4 = mysqrt(cm4)
+ sm1 = cmplx(abs(rmu),kind=kindc2)
+ sm2 = sm1
+!
+ r13 = (cm3-cp12)/(sm1*sm3)
+ r14 = (cm4-cp4 )/(sm1*sm4)
+ r24 = (cm4-cp23)/(sm2*sm4)
+ call rfun( r34,d34 ,(cm3+cm4-cp3)/(sm3*sm4) )
+!
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ log13 = logc(q13)
+ log14 = logc(q14)
+ log24 = logc(q24)
+ log34 = logc(q34)
+!
+ qyy = q14/q13
+ li2f = li2c(qyy*q34)
+ li2b = li2c(qyy/q34)
+ li2d = li2c(q14/q24)
+!
+ rslt(2) = C1P0/2
+ rslt(1) = log14 - log24 - log13
+ rslt(0) = 2*log13*log24 - log14*log14 - log34*log34 &
+ - 2*li2d - li2f - li2b - const
+ cc = (cm3-cp12)*(cm4-cp23) ! = sm1*sm2*sm3*sm4*r13*r24
+ rslt(2) = rslt(2)/cc
+ rslt(1) = rslt(1)/cc
+ rslt(0) = rslt(0)/cc
+ end subroutine
+
+
+ subroutine box11( rslt ,cp3,cp12,cp23 ,cm3,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | -------------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 [(q+k1+k2)^2-m3] [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=0, k2^2=m3, k3^2=p3, (k1+k2+k3)^2=m4
+! m3,m4 should NOT be indentiallcy 0d0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp3,cp12,cp23,cm3,cm4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: sm3,sm4,sm1,sm2,r13,r24,r34,d34 &
+ ,cc,log13,log24,log34
+ complex(kindc2) ,parameter :: const=(C1P0*TWOPI*TWOPI*7)/48
+!
+! write(*,*) 'MESSAGE from OneLOop box11: you are calling me' !CALLINGME
+!
+ if (cp12.eq.cm3) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box11: ' &
+ ,'p12=m3, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (cp23.eq.cm4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box11: ' &
+ ,'p23=m4, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ sm3 = mysqrt(cm3)
+ sm4 = mysqrt(cm4)
+ sm1 = cmplx(abs(rmu),kind=kindc2)
+ sm2 = sm1
+!
+ r13 = (cm3-cp12)/(sm1*sm3)
+ r24 = (cm4-cp23)/(sm2*sm4)
+ call rfun( r34,d34 ,(cm3+cm4-cp3 )/(sm3*sm4) )
+!
+ log13 = logc(qonv(r13,-1))
+ log24 = logc(qonv(r24,-1))
+ log34 = logc(qonv(r34,-1))
+!
+ rslt(2) = C1P0
+ rslt(1) = -log13-log24
+ rslt(0) = 2*log13*log24 - log34*log34 - const
+ cc = (cm3-cp12)*(cm4-cp23) ! = sm1*sm2*sm3*sm4*r13*r24
+ rslt(2) = rslt(2)/cc
+ rslt(1) = rslt(1)/cc
+ rslt(0) = rslt(0)/cc
+ end subroutine
+
+
+ subroutine box10( rslt ,p2,p3,p4,p12,p23 ,m4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | --------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=0, k2^2=p2, k3^2=p3, (k1+k2+k3)^2=p4
+! m4 should NOT be identically 0d0
+! p2 should NOT be identically 0d0
+! p4 should NOT be identical to m4
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p2,p3,p4,p12,p23,m4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: cp2,cp3,cp4,cp12,cp23,cm4,r13,r14,r23,r24,r34,z1,z0
+ type(qmplx_type) :: q13,q14,q23,q24,q34,qm4,qxx,qx1,qx2
+ real(kindr2) :: h1,h2
+!
+! write(*,*) 'MESSAGE from OneLOop box10: you are calling me' !CALLINGME
+!
+ if (p12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box10: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (p23.eq.m4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box10: ' &
+ ,'p23=mm, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ h1 = abs(p12*(m4-p23))
+ h2 = abs( p2*(m4-p4 ))
+ if (h1.ge.h2) then
+ cp2=p2 ;cp3=p3 ;cp4=p4 ;cp12=p12 ;cp23=p23 ;cm4=m4
+ else
+ cp2=p12 ;cp3=p3 ;cp4=p23 ;cp12=p2 ;cp23=p4 ;cm4=m4
+ endif
+!
+ r23 = -cp2
+ r13 = -cp12
+ r34 = cm4-cp3
+ r14 = cm4-cp4
+ r24 = cm4-cp23
+ q23 = qonv(r23,-1)
+ q13 = qonv(r13,-1)
+ q34 = qonv(r34,-1)
+ q14 = qonv(r14,-1)
+ q24 = qonv(r24,-1)
+ qm4 = qonv(cm4,-1)
+!
+ if (r34.ne.C0P0) then
+ qx1 = q34/qm4
+ qx2 = qx1*q14/q13
+ qx1 = qx1*q24/q23
+ z0 = -li2c2(qx1,qx2)*r34/(2*cm4*r23)
+ else
+ z0 = C0P0
+ endif
+!
+ qx1 = q23/q13
+ qx2 = q24/q14
+ qxx = qx1/qx2
+ z1 = -logc2(qxx)/r24
+ z0 = z0 - li2c2(qx1,qx2)/r14
+ z0 = z0 + li2c2(qxx,qonv(C1P0))/r24
+ z0 = z0 + z1*( logc(qm4/q24) - logc(qm4/(rmu*rmu))/2 )
+!
+ rslt(2) = C0P0
+ rslt(1) = -z1/r13
+ rslt(0) = -2*z0/r13
+ end subroutine
+
+
+ subroutine box09( rslt ,cp2,cp3,cp12,cp23 ,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | --------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=0, k2^2=p2, k3^2=p3, (k1+k2+k3)^2=m4
+! m4 should NOT be identically 0d0
+! p2 should NOT be identically 0d0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp2,cp3,cp12,cp23,cm4
+ real(kindr2) ,intent(in) :: rmu
+ complex(kindc2) :: logm,log12,log23,li12,li23,z2,z1,z0,cc &
+ ,r13,r23,r24,r34
+ type(qmplx_type) :: q13,q23,q24,q34,qm4,qxx
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/96
+!
+! write(*,*) 'MESSAGE from OneLOop box09: you are calling me' !CALLINGME
+!
+ if (cp12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box09: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (cp23.eq.cm4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box09: ' &
+ ,'p23=mm, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ r23 = -cp2
+ r13 = -cp12
+ r34 = cm4-cp3
+ r24 = cm4-cp23
+ q23 = qonv(r23,-1)
+ q13 = qonv(r13,-1)
+ q34 = qonv(r34,-1)
+ q24 = qonv(r24,-1)
+ qm4 = qonv(cm4,-1)
+!
+ logm = logc(qm4/(rmu*rmu))
+ qxx = q13/q23
+ log12 = logc(qxx)
+ li12 = li2c(qxx)
+!
+ qxx = q24/qm4
+ log23 = logc(qxx)
+ li23 = li2c(qxx*q34/q23)
+!
+ z2 = C1P0/2
+ z1 = -log12 - log23
+ z0 = li23 + 2*li12 + z1*z1 + const
+ cc = C1P0/(r13*r24)
+ rslt(2) = cc*z2
+ rslt(1) = cc*(z1 - z2*logm)
+ rslt(0) = cc*(z0 + (z2*logm/2-z1)*logm)
+ end subroutine
+
+
+ subroutine box08( rslt ,cp3,cp4,cp12,cp23 ,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | --------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=k2^2=0, k3^2=p3, (k1+k2+k3)^2=p4
+! mm should NOT be identically 0d0
+! p3 NOR p4 should be identically m4
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp3,cp4,cp12,cp23,cm4
+ real(kindr2) ,intent(in) :: rmu
+ type(qmplx_type) :: q13,q14,q24,q34,qm4,qxx,qx1,qx2,qx3
+ complex(kindc2) :: r13,r14,r24,r34,z1,z0,cc
+ real(kindr2) :: rmu2
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/16
+!
+! write(*,*) 'MESSAGE from OneLOop box08: you are calling me' !CALLINGME
+!
+ if (cp12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box08: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (cp23.eq.cm4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box08: ' &
+ ,'p23=mm, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ rmu2 = rmu*rmu
+ r13 = -cp12
+ r34 = cm4-cp3
+ r14 = cm4-cp4
+ r24 = cm4-cp23
+ q13 = qonv(r13,-1)
+ q34 = qonv(r34,-1)
+ q14 = qonv(r14,-1)
+ q24 = qonv(r24,-1)
+ qm4 = qonv(cm4,-1)
+!
+ qx1 = q34/q24
+ qx2 = q14/q24
+ qx3 = q13/rmu2
+ z1 = logc(qx1*qx2/qx3)
+ z0 = 2*( logc(q24/rmu2)*logc(qx3) - (li2c(qx1)+li2c(qx2)) )
+!
+ qx1 = q34/rmu2
+ qx2 = q14/rmu2
+ qxx = qx1*qx2/qx3
+ z0 = z0 - logc(qx1)**2 - logc(qx2)**2 &
+ + logc(qxx)**2/2 + li2c(qm4/qxx/rmu2)
+!
+ cc = C1P0/(r13*r24)
+ rslt(2) = cc
+ rslt(1) = cc*z1
+ rslt(0) = cc*( z0 - const )
+ end subroutine
+
+
+ subroutine box07( rslt ,cp4,cp12,cp23 ,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | --------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=k2^2=0, k3^2=m4, (k1+k2+k3)^2=p4
+! m3 should NOT be identically 0d0
+! p4 should NOT be identically m4
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp4,cp12,cp23,cm4
+ real(kindr2) ,intent(in) :: rmu
+ type(qmplx_type) :: q13,q14,q24,qm4
+ complex(kindc2) :: r13,r14,r24,logm,log12,log23,log4,li423 &
+ ,z2,z1,z0,cc
+ complex(kindc2) ,parameter :: const=(C1P0*TWOPI*TWOPI*13)/96
+!
+! write(*,*) 'MESSAGE from OneLOop box07: you are calling me' !CALLINGME
+!
+ if (cp12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box07: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (cp23.eq.cm4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box07: ' &
+ ,'p23=mm, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ r13 = -cp12
+ r14 = cm4-cp4
+ r24 = cm4-cp23
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q24 = qonv(r24,-1)
+ qm4 = qonv(cm4,-1)
+!
+ logm = logc(qm4/(rmu*rmu))
+ log12 = logc(q13/qm4)
+ log23 = logc(q24/qm4)
+ log4 = logc(q14/qm4)
+ li423 = li2c(q14/q24)
+!
+ z2 = (C1P0*3)/2
+ z1 = -2*log23 - log12 + log4
+ z0 = 2*(log12*log23 - li423) - log4*log4 - const
+ cc = C1P0/(r13*r24)
+ rslt(2) = cc*z2
+ rslt(1) = cc*(z1 - z2*logm)
+ rslt(0) = cc*(z0 + (z2*logm/2-z1)*logm)
+ end subroutine
+
+
+ subroutine box06( rslt ,cp12,cp23 ,cm4 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | --------------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 [(q+k1+k2+k3)^2-m4]
+!
+! with k1^2=k2^2=0, k3^2=(k1+k2+k3)^2=m4
+! m3 should NOT be identically 0d0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp12,cp23,cm4
+ real(kindr2) ,intent(in) :: rmu
+ type(qmplx_type) :: q13,q24,qm4
+ complex(kindc2) :: r13,r24,logm,log1,log2,z2,z1,z0,cc
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/12
+!
+! write(*,*) 'MESSAGE from OneLOop box06: you are calling me' !CALLINGME
+!
+ if (cp12.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box06: ' &
+ ,'p12=0, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (cp23.eq.cm4) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop box06: ' &
+ ,'p23=mm, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ r13 = -cp12
+ r24 = cm4-cp23
+ q13 = qonv(r13,-1)
+ q24 = qonv(r24,-1)
+ qm4 = qonv(cm4,-1)
+!
+ logm = logc(qm4/(rmu*rmu))
+ log1 = logc(q13/qm4)
+ log2 = logc(q24/qm4)
+!
+ z2 = C1P0*2
+ z1 = -2*log2 - log1
+ z0 = 2*(log2*log1 - const)
+ cc = C1P0/(r13*r24)
+ rslt(2) = cc*z2
+ rslt(1) = cc*(z1 - z2*logm)
+ rslt(0) = cc*(z0 + (z2*logm/2-z1)*logm)
+ end subroutine
+
+
+ subroutine box03( rslt ,p2,p4,p5,p6 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | ---------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 (q+k1+k2+k3)^2
+!
+! with k1^2=k3^2=0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p2,p4,p5,p6
+ real(kindr2) ,intent(in) :: rmu
+ type(qmplx_type) :: q2,q4,q5,q6,q26,q54,qy
+ complex(kindc2) :: logy
+ real(kindr2) :: rmu2
+!
+! write(*,*) 'MESSAGE from OneLOop box03: you are calling me' !CALLINGME
+!
+ rmu2 = rmu*rmu
+ q2 = qonv(-p2,-1)
+ q4 = qonv(-p4,-1)
+ q5 = qonv(-p5,-1)
+ q6 = qonv(-p6,-1)
+ q26 = q2/q6
+ q54 = q5/q4
+ qy = q26/q54
+ logy = logc2(qy)/(p5*p6)
+ rslt(1) = logy
+ rslt(0) = li2c2(q6/q4,q2/q5)/(p4*p5) &
+ + li2c2(q54,q26)/(p4*p6) &
+ - li2c2(qonv(C1P0),qy)/(p5*p6) &
+ - logy*logc(q54*q2*q6/(rmu2*rmu2))/2
+ rslt(2) = C0P0
+ rslt(1) = 2*rslt(1)
+ rslt(0) = 2*rslt(0)
+ end subroutine
+
+
+ subroutine box05( rslt ,p2,p3,p4,p5,p6 ,rmu )
+!*******************************************************************
+! calculates
+!
+! C / d^(Dim)q
+! ------ | ---------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 (q+k1+k2+k3)^2
+!
+! with k1^2=0
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p2,p3,p4,p5,p6
+ real(kindr2) ,intent(in) :: rmu
+ type(qmplx_type) ::q2,q3,q4,q5,q6 ,q25,q64,qy,qz
+ complex(kindc2) :: logy
+ real(kindr2) :: rmu2
+!
+! write(*,*) 'MESSAGE from OneLOop box05: you are calling me' !CALLINGME
+!
+ rmu2 = rmu*rmu
+ q2 = qonv(-p2,-1)
+ q3 = qonv(-p3,-1)
+ q4 = qonv(-p4,-1)
+ q5 = qonv(-p5,-1)
+ q6 = qonv(-p6,-1)
+ q25 = q2/q5
+ q64 = q6/q4
+ qy = q25/q64
+ qz = q64*q2*q5*q6*q6/q3/q3/(rmu2*rmu2)
+!
+ logy = logc2(qy)/(p5*p6)
+ rslt(2) = C0P0
+ rslt(1) = logy
+ rslt(0) = li2c2(q64,q25)/(p4*p5) &
+ - li2c2(qonv(C1P0),qy)/(p5*p6) &
+ - logy*logc(qz)/4
+ rslt(0) = 2*rslt(0)
+ end subroutine
+
+
+ subroutine box00( rslt ,cp ,api ,rmu )
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | ---------------------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2 (q+k1+k2+k3)^2
+!
+! with Dim = 4-2*eps
+! C = pi^eps * mu^(2*eps) * exp(gamma_Euler*eps)
+!
+! input: p1 = k1^2, p2 = k2^2, p3 = k3^2, p4 = (k1+k2+k3)^2,
+! p12 = (k1+k2)^2, p23 = (k2+k3)^2
+! output: rslt(0) = eps^0 -coefficient
+! rslt(1) = eps^(-1)-coefficient
+! rslt(2) = eps^(-2)-coefficient
+!
+! If any of these numbers is IDENTICALLY 0d0, the corresponding
+! IR-singular case is returned.
+!*******************************************************************
+ use avh_olo_loga ,only: loga
+ use avh_olo_li2a ,only: li2a
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp(6)
+ real(kindr2) ,intent(in) :: api(6),rmu
+ complex(kindc2) :: log3,log4,log5,log6,li24,li25,li26 &
+ ,li254,li263
+ real(kindr2) :: rp1,rp2,rp3,rp4,rp5,rp6,pp(6),ap(6),gg,ff,hh,arg,rmu2
+ integer :: icase,sf,sgn,i3,i4,i5,i6
+ integer ,parameter :: base(4)=(/8,4,2,1/)
+ complex(kindc2) ,parameter :: pi2=C1P0*TWOPI*TWOPI/4
+!
+ rmu2 = rmu*rmu
+ ff = api(5)*api(6)
+ gg = api(2)*api(4)
+ hh = api(1)*api(3)
+ if (ff.ge.gg.and.ff.ge.hh) then
+ pp(1)=real(cp(1)) ;ap(1)=api(1)
+ pp(2)=real(cp(2)) ;ap(2)=api(2)
+ pp(3)=real(cp(3)) ;ap(3)=api(3)
+ pp(4)=real(cp(4)) ;ap(4)=api(4)
+ pp(5)=real(cp(5)) ;ap(5)=api(5)
+ pp(6)=real(cp(6)) ;ap(6)=api(6)
+ elseif (gg.ge.ff.and.gg.ge.hh) then
+ pp(1)=real(cp(1)) ;ap(1)=api(1)
+ pp(2)=real(cp(6)) ;ap(2)=api(6)
+ pp(3)=real(cp(3)) ;ap(3)=api(3)
+ pp(4)=real(cp(5)) ;ap(4)=api(5)
+ pp(5)=real(cp(4)) ;ap(5)=api(4)
+ pp(6)=real(cp(2)) ;ap(6)=api(2)
+ else
+ pp(1)=real(cp(5)) ;ap(1)=api(5)
+ pp(2)=real(cp(2)) ;ap(2)=api(2)
+ pp(3)=real(cp(6)) ;ap(3)=api(6)
+ pp(4)=real(cp(4)) ;ap(4)=api(4)
+ pp(5)=real(cp(1)) ;ap(5)=api(1)
+ pp(6)=real(cp(3)) ;ap(6)=api(3)
+ endif
+!
+ icase = 0
+ if (ap(1).gt.R0P0) icase = icase + base(1)
+ if (ap(2).gt.R0P0) icase = icase + base(2)
+ if (ap(3).gt.R0P0) icase = icase + base(3)
+ if (ap(4).gt.R0P0) icase = icase + base(4)
+ rp1 = pp(permtable(1,icase))
+ rp2 = pp(permtable(2,icase))
+ rp3 = pp(permtable(3,icase))
+ rp4 = pp(permtable(4,icase))
+ rp5 = pp(permtable(5,icase))
+ rp6 = pp(permtable(6,icase))
+ icase = casetable( icase)
+!
+ i3=0 ;if (-rp3.lt.R0P0) i3=-1
+ i4=0 ;if (-rp4.lt.R0P0) i4=-1
+ i5=0 ;if (-rp5.lt.R0P0) i5=-1
+ i6=0 ;if (-rp6.lt.R0P0) i6=-1
+!
+ if (icase.eq.0) then
+! 0 masses non-zero
+! write(*,*) 'MESSAGE from OneLOop box00 0: you are calling me' !CALLINGME
+ gg = R1P0/( rp5 * rp6 )
+ log5 = loga(-rp5/rmu2, i5 )
+ log6 = loga(-rp6/rmu2, i6 )
+ rslt(2) = gg*( 4*C1P0 )
+ rslt(1) = gg*(-2*(log5 + log6) )
+ rslt(0) = gg*( log5**2 + log6**2 - loga( rp5/rp6 ,i5-i6 )**2 - (pi2*4)/3 )
+ elseif (icase.eq.1) then
+! 1 mass non-zero
+! write(*,*) 'MESSAGE from OneLOop box00 1: you are calling me' !CALLINGME
+ gg = R1P0/( rp5 * rp6 )
+ ff = gg*( rp5 + rp6 - rp4 )
+ log4 = loga(-rp4/rmu2,i4)
+ log5 = loga(-rp5/rmu2,i5)
+ log6 = loga(-rp6/rmu2,i6)
+ sf = nint(sign(R1P0,ff))
+ sgn = 0
+ arg = rp4*ff
+ if (arg.lt.R0P0) sgn = sf
+ li24 = li2a(arg,sgn)
+ sgn = 0
+ arg = rp5*ff
+ if (arg.lt.R0P0) sgn = sf
+ li25 = li2a(arg,sgn)
+ sgn = 0
+ arg = rp6*ff
+ if (arg.lt.R0P0) sgn = sf
+ li26 = li2a(arg,sgn)
+ rslt(2) = gg*( 2*C1P0 )
+ rslt(1) = gg*( 2*(log4-log5-log6) )
+ rslt(0) = gg*( log5**2 + log6**2 - log4**2 - pi2/2 &
+ + 2*(li25 + li26 - li24) )
+ elseif (icase.eq.2) then
+! 2 neighbour masses non-zero
+! write(*,*) 'MESSAGE from OneLOop box00 2: you are calling me' !CALLINGME
+ gg = R1P0/( rp5 * rp6 )
+ ff = gg*( rp5 + rp6 - rp4 )
+ log3 = loga(-rp3/rmu2,i3)
+ log4 = loga(-rp4/rmu2,i4)
+ log5 = loga(-rp5/rmu2,i5)
+ log6 = loga(-rp6/rmu2,i6)
+ li254 = li2a( rp4/rp5 ,i4-i5 )
+ li263 = li2a( rp3/rp6 ,i3-i6 )
+ sf = nint(sign(R1P0,ff))
+ sgn = 0
+ arg = rp4*ff
+ if (arg.lt.R0P0) sgn = sf
+ li24 = li2a(arg,sgn)
+ sgn = 0
+ arg = rp5*ff
+ if (arg.lt.R0P0) sgn = sf
+ li25 = li2a(arg,sgn)
+ sgn = 0
+ arg = rp6*ff
+ if (arg.lt.R0P0) sgn = sf
+ li26 = li2a(arg,sgn)
+ rslt(2) = gg
+ rslt(1) = gg*( log4 + log3 - log5 - 2*log6 )
+ rslt(0) = gg*( log5**2 + log6**2 - log3**2 - log4**2 &
+ + (log3 + log4 - log5)**2/2 &
+ - pi2/12 + 2*(li254 - li263 + li25 + li26 - li24) )
+ elseif (icase.eq.5) then
+! 2 opposite masses non-zero
+ call box03( rslt ,cmplx(rp2,kind=kindc2),cmplx(rp4,kind=kindc2) &
+ ,cmplx(rp5,kind=kindc2),cmplx(rp6,kind=kindc2) ,rmu )
+ elseif (icase.eq.3) then
+! 3 masses non-zero
+ call box05( rslt ,cmplx(rp2,kind=kindc2),cmplx(rp3,kind=kindc2) &
+ ,cmplx(rp4,kind=kindc2),cmplx(rp5,kind=kindc2) &
+ ,cmplx(rp6,kind=kindc2) ,rmu )
+ elseif (icase.eq.4) then
+! 4 masses non-zero
+ call boxf0( rslt ,cmplx(rp1,kind=kindc2),cmplx(rp2,kind=kindc2) &
+ ,cmplx(rp3,kind=kindc2),cmplx(rp4,kind=kindc2) &
+ ,cmplx(rp5,kind=kindc2),cmplx(rp6,kind=kindc2) )
+ endif
+ end subroutine
+
+
+ subroutine boxf0( rslt ,p1,p2,p3,p4,p12,p23 )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with all internal masses
+! equal zero. Based on the formulas from
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23
+ type(qmplx_type) :: q12,q13,q14,q23,q24,q34,qx1,qx2,qss
+ complex(kindc2) :: aa,bb,cc,dd,x1,x2,ss,r12,r13,r14,r23,r24,r34
+ real(kindr2) :: hh
+!
+! write(*,*) 'MESSAGE from OneLOop boxf0: you are calling me' !CALLINGME
+!
+ r12 = -p1 ! p1
+ r13 = -p12 ! p1+p2
+ r14 = -p4 ! p1+p2+p3
+ r23 = -p2 ! p2
+ r24 = -p23 ! p2+p3
+ r34 = -p3 ! p3
+!
+ aa = r34*r24
+!
+ if (r13.eq.C0P0.or.aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf0: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = r13*r24 + r12*r34 - r14*r23
+ cc = r12*r13
+ hh = real(r23)
+ dd = mysqrt( bb*bb - 4*aa*cc , -real(aa)*hh )
+ call solabc(x1,x2,dd ,aa,bb,cc ,1)
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 , hh)
+ qx2 = qonv(x2 ,-hh)
+ q12 = qonv(r12,-1)
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ rslt = C0P0
+!
+ qss = q34/q13
+ rslt(0) = rslt(0) + li2c2(qx1*qss,qx2*qss) * r34/r13
+!
+ qss = q24/q12
+ rslt(0) = rslt(0) + li2c2(qx1*qss,qx2*qss) * r24/r12
+!
+ ss = -logc2(qx1/qx2) / x2
+ rslt(0) = rslt(0) + ss*( logc(qx1*qx2)/2 - logc(q12*q13/q14/q23) )
+!
+ rslt(0) = -rslt(0) / aa
+ end subroutine
+
+
+ subroutine boxf1( rslt ,p1,p2,p3,p4,p12,p23 ,m4 )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with one internal mass
+! non-zero. Based on the formulas from
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23 ,m4
+ type(qmplx_type) :: qx1,qx2,qss,q12,q13,q14,q23,q24,q34
+ complex(kindc2) :: smm,sm4,aa,bb,cc,dd,x1,x2,r12,r13,r14,r23,r24,r34
+ logical :: r12zero,r13zero
+!
+! write(*,*) 'MESSAGE from OneLOop boxf1: you are calling me' !CALLINGME
+!
+ sm4 = mysqrt(m4)
+ smm = cmplx(abs(sm4),kind=kindc2)
+!
+ r12 = C0P0
+ r13 = C0P0
+ r14 = C0P0
+ r23 = C0P0
+ r24 = C0P0
+ r34 = C0P0
+ if (m4.ne.p4 ) r12 = ( m4-p4 *oieps )/(smm*sm4)
+ if (m4.ne.p23) r13 = ( m4-p23*oieps )/(smm*sm4)
+ if (m4.ne.p3 ) r14 = ( m4-p3 *oieps )/(smm*sm4)
+ r23 = ( -p1 *oieps )/(smm*smm)
+ r24 = ( -p12*oieps )/(smm*smm)
+ r34 = ( -p2 *oieps )/(smm*smm)
+!
+ r12zero = (r12.eq.C0P0)
+ r13zero = (r13.eq.C0P0)
+!
+ aa = r34*r24
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf1: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = r13*r24 + r12*r34 - r14*r23
+ cc = r12*r13 - r23
+ call solabc(x1,x2,dd ,aa,bb,cc ,0)
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 ,1 )
+ qx2 = qonv(x2 ,1 )
+ q12 = qonv(r12,-1)
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ rslt = C0P0
+!
+ if (r12zero.and.r13zero) then
+ qss = qx1*qx2*q34*q24/q23
+ qss = qss*qss
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( qss )/(x2*2)
+ else
+ if (r13zero) then
+ qss = q34*q12/q23
+ qss = qx1*qx2*qss*qss
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( qss )/(x2*2)
+ else
+ qss = q34/q13
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r34/r13
+ endif
+ if (r12zero) then
+ qss = q24*q13/q23
+ qss = qx1*qx2*qss*qss
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( qss )/(x2*2)
+ else
+ qss = q24/q12
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r24/r12
+ endif
+ if (.not.r12zero.and..not.r13zero) then
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( q12*q13/q23 )/x2
+ endif
+ endif
+!
+ if (r14.ne.C0P0) then
+ rslt(0) = rslt(0) - li2c2( qx1*q14 ,qx2*q14 )*r14
+ endif
+!
+ rslt(0) = -rslt(0)/(aa*smm*smm*smm*sm4)
+ end subroutine
+
+
+ subroutine boxf5( rslt ,p1,p2,p3,p4,p12,p23, m2,m4 )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with two opposite internal
+! masses non-zero. Based on the formulas from
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23,m2,m4
+ call boxf2( rslt ,p12,p2,p23,p4,p1,p3 ,m2,m4 )
+ end subroutine
+
+
+ subroutine boxf2( rslt ,p1,p2,p3,p4,p12,p23 ,m3,m4 )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with two adjacent internal
+! masses non-zero. Based on the formulas from
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23,m3,m4
+ type(qmplx_type) :: qx1,qx2,qss,q12,q13,q14,q23,q24,q34
+ complex(kindc2) :: smm,sm3,sm4,aa,bb,cc,dd,x1,x2 &
+ ,r12,r13,r14,r23,r24,r34,d14,k14
+ logical :: r12zero,r13zero,r24zero,r34zero
+!
+! write(*,*) 'MESSAGE from OneLOop boxf2: you are calling me' !CALLINGME
+!
+ sm3 = mysqrt(m3)
+ sm4 = mysqrt(m4)
+!
+ smm = cmplx(abs(sm3),kind=kindc2)
+!
+ r12 = C0P0
+ r13 = C0P0
+ k14 = C0P0
+ r23 = C0P0
+ r24 = C0P0
+ r34 = C0P0
+ if ( m4.ne.p4 ) r12 = ( m4-p4 *oieps )/(smm*sm4)
+ if ( m4.ne.p23) r13 = ( m4-p23*oieps )/(smm*sm4)
+ if (m3+m4.ne.p3 ) k14 = ( m3+m4-p3 *oieps )/(sm3*sm4)
+ r23 = ( -p1 *oieps )/(smm*smm)
+ if ( m3.ne.p12) r24 = ( m3-p12*oieps )/(smm*sm3)
+ if ( m3.ne.p2 ) r34 = ( m3-p2 *oieps )/(smm*sm3)
+!
+ r12zero = (r12.eq.C0P0)
+ r13zero = (r13.eq.C0P0)
+ r24zero = (r24.eq.C0P0)
+ r34zero = (r34.eq.C0P0)
+ if (r12zero.and.r24zero) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf2: ' &
+ ,'m4=p4 and m3=p12, returning 0'
+ rslt = C0P0
+ return
+ endif
+ if (r13zero.and.r34zero) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf2: ' &
+ ,'m4=p23 and m3=p2, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ call rfun( r14,d14 ,k14 )
+!
+ aa = r34*r24 - r23
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf2: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = r13*r24 + r12*r34 - k14*r23
+ cc = r12*r13 - r23
+ call solabc(x1,x2,dd ,aa,bb,cc ,0)
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 ,1 )
+ qx2 = qonv(x2 ,1 )
+ q12 = qonv(r12,-1)
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ rslt = C0P0
+!
+ rslt(0) = rslt(0) - li2c2( qx1*q14 ,qx2*q14 )*r14
+ rslt(0) = rslt(0) - li2c2( qx1/q14 ,qx2/q14 )/r14
+!
+ if (r12zero.and.r13zero) then
+ qss = qx1*qx2*q34*q24/q23
+ qss = qss*qss
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( qss )/(x2*2)
+ else
+ if (r13zero) then
+ qss = q34*q12/q23
+ qss = qx1*qx2*qss*qss
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( qss )/(x2*2)
+ elseif (.not.r34zero) then
+ qss = q34/q13
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r34/r13
+ endif
+ if (r12zero) then
+ qss = q24*q13/q23
+ qss = qx1*qx2*qss*qss
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( qss )/(x2*2)
+ elseif (.not.r24zero) then
+ qss = q24/q12
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r24/r12
+ endif
+ if (.not.r12zero.and..not.r13zero) then
+ rslt(0) = rslt(0) + logc2( qx1/qx2 )*logc( q12*q13/q23 )/x2
+ endif
+ endif
+!
+ rslt(0) = -rslt(0)/(aa*smm*smm*sm3*sm4)
+ end subroutine
+
+
+ subroutine boxf3( rslt ,pp ,mm )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with three internal masses
+! non-zero.
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: pp(6),mm(4)
+ integer :: j
+ integer ,parameter :: ip(6)=(/4,5,2,6,3,1/)
+ integer ,parameter :: im(4)=(/4,1,3,2/)
+ integer ,parameter :: ic(4,6)=reshape((/1,2,3,4 ,2,3,4,1 ,3,4,1,2 &
+ ,4,1,2,3 ,5,6,5,6 ,6,5,6,5/),(/4,6/))
+!
+ if (mm(1).eq.C0P0) then ;j=3
+ elseif (mm(2).eq.C0P0) then ;j=4
+ elseif (mm(3).eq.C0P0) then ;j=1
+ else ;j=2
+ endif
+ call boxf33( rslt ,pp(ic(j,ip(1))) ,pp(ic(j,ip(2))) ,pp(ic(j,ip(3))) &
+ ,pp(ic(j,ip(4))) ,pp(ic(j,ip(5))) ,pp(ic(j,ip(6))) &
+ ,mm(ic(j,im(1))) ,mm(ic(j,im(2))) ,mm(ic(j,im(4))) )
+ end subroutine
+
+ subroutine boxf33( rslt ,p1,p2,p3,p4,p12,p23, m1,m2,m4 )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with three internal masses
+! non-zero, and m3=0. Based on the formulas from
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23,m1,m2,m4
+ type(qmplx_type) :: qx1,qx2,qss,q12,q13,q14,q23,q24,q34,qy1,qy2
+ complex(kindc2) :: sm1,sm2,sm3,sm4 ,aa,bb,cc,dd,x1,x2 &
+ ,r12,r13,r14,r23,r24,r34,d12,d14,d24,k12,k14,k24
+ logical ::r13zero,r23zero,r34zero
+!
+! write(*,*) 'MESSAGE from OneLOop boxf33: you are calling me' !CALLINGME
+!
+ sm1 = mysqrt(m1)
+ sm2 = mysqrt(m2)
+ sm4 = mysqrt(m4)
+ sm3 = cmplx(abs(sm2),kind=kindc2)
+!
+ k12 = C0P0
+ r13 = C0P0
+ k14 = C0P0
+ r23 = C0P0
+ k24 = C0P0
+ r34 = C0P0
+ if (m1+m2.ne.p1 ) k12 = ( m1 + m2 - p1 *oieps )/(sm1*sm2) ! p1
+ if (m1 .ne.p12) r13 = ( m1 - p12*oieps )/(sm1*sm3) ! p1+p2
+ if (m1+m4.ne.p4 ) k14 = ( m1 + m4 - p4 *oieps )/(sm1*sm4) ! p1+p2+p3
+ if (m2 .ne.p2 ) r23 = ( m2 - p2 *oieps )/(sm2*sm3) ! p2
+ if (m2+m4.ne.p23) k24 = ( m2 + m4 - p23*oieps )/(sm2*sm4) ! p2+p3
+ if ( m4.ne.p3 ) r34 = ( m4 - p3 *oieps )/(sm3*sm4) ! p3
+!
+ r13zero = (r13.eq.C0P0)
+ r23zero = (r23.eq.C0P0)
+ r34zero = (r34.eq.C0P0)
+ if (r13zero) then
+ if (r23zero) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf33: ' &
+ ,'m4=p4 and m3=p12, returning 0'
+ rslt = C0P0
+ return
+ elseif (r34zero) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf33: ' &
+ ,'m2=p1 and m3=p12, returning 0'
+ rslt = C0P0
+ return
+ endif
+ endif
+!
+ call rfun( r12,d12 ,k12 )
+ call rfun( r14,d14 ,k14 )
+ call rfun( r24,d24 ,k24 )
+!
+ aa = r34/r24 - r23
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf33: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = -r13*d24 + k12*r34 - k14*r23
+ cc = k12*r13 + r24*r34 - k14*r24*r13 - r23
+ call solabc(x1,x2,dd ,aa,bb,cc ,0)
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 ,1 ) ! x1 SHOULD HAVE im. part
+ qx2 = qonv(x2 ,1 ) ! x2 SHOULD HAVE im. part
+ q12 = qonv(r12,-1)
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ rslt = C0P0
+!
+ qy1 = qx1/q24
+ qy2 = qx2/q24
+ rslt(0) = rslt(0) + li2c2( qy1*q12 ,qy2*q12 )/r24*r12
+ rslt(0) = rslt(0) + li2c2( qy1/q12 ,qy2/q12 )/r24/r12
+ rslt(0) = rslt(0) - li2c2( qx1*q14 ,qx2*q14 )*r14
+ rslt(0) = rslt(0) - li2c2( qx1/q14 ,qx2/q14 )/r14
+!
+ if (.not.r13zero) then
+ if (.not.r23zero) then
+ qss = q23/q13/q24
+ rslt(0) = rslt(0) - li2c2( qx1*qss ,qx2*qss )*r23/(r13*r24)
+ endif
+ if (.not.r34zero) then
+ qss = q34/q13
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r34/r13
+ endif
+ else
+ rslt(0) = rslt(0) - logc2( qx1/qx2 )*logc( q23/q24/q34 )/x2
+ endif
+!
+ rslt(0) = -rslt(0)/(aa*sm1*sm2*sm3*sm4)
+ end subroutine
+
+
+ subroutine boxf4( rslt ,p1,p2,p3,p4,p12,p23 ,m1,m2,m3,m4 )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function with all internal masses
+! non-zero. Based on the formulas from
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+!*******************************************************************
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3,p4,p12,p23,m1,m2,m3,m4
+ type(qmplx_type) :: q12,q13,q14,q23,q24,q34,qx1,qx2,qy1,qy2,qtt
+ complex(kindc2) :: sm1,sm2,sm3,sm4 ,aa,bb,cc,dd,x1,x2,tt &
+ ,k12,k13,k14,k23,k24,k34 &
+ ,r12,r13,r14,r23,r24,r34 &
+ ,d12,d13,d14,d23,d24,d34
+ real(kindr2) :: h1,h2
+!
+! write(*,*) 'MESSAGE from OneLOop boxf4: you are calling me' !CALLINGME
+!
+ sm1 = mysqrt(m1)
+ sm2 = mysqrt(m2)
+ sm3 = mysqrt(m3)
+ sm4 = mysqrt(m4)
+!
+ k12 = C0P0
+ k13 = C0P0
+ k14 = C0P0
+ k23 = C0P0
+ k24 = C0P0
+ k34 = C0P0
+ if (m1+m2.ne.p1 ) k12 = ( m1 + m2 - p1 *oieps)/(sm1*sm2) ! p1
+ if (m1+m3.ne.p12) k13 = ( m1 + m3 - p12*oieps)/(sm1*sm3) ! p1+p2
+ if (m1+m4.ne.p4 ) k14 = ( m1 + m4 - p4 *oieps)/(sm1*sm4) ! p1+p2+p3
+ if (m2+m3.ne.p2 ) k23 = ( m2 + m3 - p2 *oieps)/(sm2*sm3) ! p2
+ if (m2+m4.ne.p23) k24 = ( m2 + m4 - p23*oieps)/(sm2*sm4) ! p2+p3
+ if (m3+m4.ne.p3 ) k34 = ( m3 + m4 - p3 *oieps)/(sm3*sm4) ! p3
+!
+ call rfun( r12,d12 ,k12 )
+ call rfun( r13,d13 ,k13 )
+ call rfun( r14,d14 ,k14 )
+ call rfun( r23,d23 ,k23 )
+ call rfun( r24,d24 ,k24 )
+ call rfun( r34,d34 ,k34 )
+!
+ aa = k34/r24 + r13*k12 - k14*r13/r24 - k23
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxf4: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = d13*d24 + k12*k34 - k14*k23
+ cc = k12/r13 + r24*k34 - k14*r24/r13 - k23
+ call solabc(x1,x2,dd ,aa,bb,cc ,0)
+!
+ h1 = real(k23 - r13*k12 - r24*k34 + r13*r24*k14)
+ h2 = h1*real(aa)*real(x1)
+ h1 = h1*real(aa)*real(x2)
+!
+ qx1 = qonv(-x1,-h1) ! x1 should have im. part
+ qx2 = qonv(-x2,-h2) ! x2 should have im. part
+ q12 = qonv(r12,-1)
+ q13 = qonv(r13,-1)
+ q14 = qonv(r14,-1)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ rslt = C0P0
+!
+ qy1 = qx1/q24
+ qy2 = qx2/q24
+ rslt(0) = rslt(0) + ( li2c2( qy1*q12 ,qy2*q12 )*r12 &
+ + li2c2( qy1/q12 ,qy2/q12 )/r12 )/r24
+ tt = r13/r24
+ qtt = qonv(tt,-real(r24) )
+ qy1 = qx1*qtt
+ qy2 = qx2*qtt
+ rslt(0) = rslt(0) - ( li2c2( qy1*q23 ,qy2*q23 )*r23 &
+ + li2c2( qy1/q23 ,qy2/q23 )/r23 )*tt
+ qy1 = qx1*q13
+ qy2 = qx2*q13
+ rslt(0) = rslt(0) + ( li2c2( qy1*q34 ,qy2*q34 )*r34 &
+ + li2c2( qy1/q34 ,qy2/q34 )/r34 )*r13
+!
+ rslt(0) = rslt(0) - ( li2c2( qx1*q14 ,qx2*q14 )*r14 &
+ + li2c2( qx1/q14 ,qx2/q14 )/r14 )
+!
+ rslt(0) = -rslt(0)/(aa*sm1*sm2*sm3*sm4)
+ end subroutine
+
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_boxc.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_boxc.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_boxc.f90 (revision 119)
@@ -0,0 +1,617 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_boxc
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: boxc,init_boxc
+ real(kindr2) :: thrss3fun=epsilon(R1P0)*1000
+ integer :: ndigits=0
+contains
+
+ subroutine init_boxc(ndig)
+ integer ,intent(in) :: ndig
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ if (ndigits.lt.16) then ;thrss3fun = epsilon(R1P0)*1000
+ elseif (ndigits.lt.24) then ;thrss3fun = epsilon(R1P0)*30000
+ else ;thrss3fun = epsilon(R1P0)*1000000
+ endif
+ end subroutine
+
+
+ subroutine boxc( rslt ,pp_in,mm_in ,ap_in )
+!*******************************************************************
+! Finite 1-loop scalar 4-point function for complex internal masses
+! Based on the formulas from
+! Dao Thi Nhung and Le Duc Ninh, arXiv:0902.0325 [hep-ph]
+! G. 't Hooft and M.J.G. Veltman, Nucl.Phys.B153:365-401,1979
+!*******************************************************************
+ use avh_olo_box ,only: base,casetable,ll=>permtable
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(inout) :: pp_in(6),mm_in(4)
+ real(kindr2) ,intent(in) :: ap_in(6)
+ complex(kindc2) :: pp(6),mm(4)
+ real(kindr2) :: ap(6),aptmp(6),rem,imm,hh
+ complex(kindc2) :: a,b,c,d,e,f,g,h,j,k,dpe,epk,x1,x2,sdnt,o1,j1,e1
+ integer :: icase,jcase,ii,jj
+ integer ,parameter :: lp(6,3)=&
+ reshape((/1,2,3,4,5,6 ,5,2,6,4,1,3 ,1,6,3,5,4,2/),(/6,3/))
+ integer ,parameter :: lm(4,3)=&
+ reshape((/1,2,3,4 ,1,3,2,4 ,1,2,4,3 /),(/4,3/))
+ real(kindr2) ,parameter :: small=epsilon(R1P0)
+!
+! write(*,*) 'MESSAGE from OneLOop boxc: you are calling me' !CALLINGME
+!
+ rslt = C0P0
+!
+ hh = R0P0
+ do ii=1,6
+ aptmp(ii) = ap_in(ii)
+ if (aptmp(ii).gt.hh) hh = aptmp(ii)
+ enddo
+ hh = 100*small*hh
+ do ii=1,6
+ if (aptmp(ii).lt.hh) aptmp(ii) = R0P0
+ enddo
+!
+ if (aptmp(5).eq.R0P0.or.aptmp(6).eq.R0P0) then
+ if (aptmp(1).eq.R0P0.or.aptmp(3).eq.R0P0) then
+ if (aptmp(2).eq.R0P0.or.aptmp(4).eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxc: ' &
+ ,'no choice with |s| and |t| large enough, putting them by hand'
+ if (aptmp(5).eq.R0P0) then
+ aptmp(5) = hh
+ pp_in(5) = cmplx(sign(hh,real(pp_in(5))),kind=kindc2)
+ endif
+ if (aptmp(6).eq.R0P0) then
+ aptmp(6) = hh
+ pp_in(6) = cmplx(sign(hh,real(pp_in(6))),kind=kindc2)
+ endif
+ jj = 1
+ else
+ jj = 3
+ endif
+ else
+ jj = 2
+ endif
+ else
+ jj = 1
+ endif
+ do ii=1,6
+ ap(ii) = aptmp(lp(ii,jj))
+ if (ap(ii).gt.R0P0) then ;pp(ii) = pp_in(lp(ii,jj))
+ else ;pp(ii) = C0P0
+ endif
+ enddo
+ do ii=1,4
+ rem = real(mm_in(lm(ii,jj)))
+ imm = aimag(mm_in(lm(ii,jj)))
+ hh = small*abs(rem)
+ if (abs(imm).lt.hh) imm = -hh
+ mm(ii) = cmplx(rem,imm,kind=kindc2)
+ enddo
+!
+ icase = 0
+ do ii=1,4
+ if (ap(ii).gt.R0P0) icase = icase + base(ii)
+ enddo
+!
+ if (icase.lt.15) then
+! at least one exernal mass equal zero
+ jcase = casetable(icase)
+ if (jcase.eq.0.or.jcase.eq.1.or.jcase.eq.5) then
+! two opposite masses equal zero
+ a = pp(ll(5,icase)) - pp(ll(1,icase))
+ c = pp(ll(4,icase)) - pp(ll(5,icase)) - pp(ll(3,icase))
+ g = pp(ll(2,icase))
+ h = pp(ll(6,icase)) - pp(ll(2,icase)) - pp(ll(3,icase))
+ d = (mm(ll(3,icase)) - mm(ll(4,icase))) - pp(ll(3,icase))
+ e = (mm(ll(1,icase)) - mm(ll(3,icase))) + pp(ll(3,icase)) - pp(ll(4,icase))
+ f = mm(ll(4,icase))
+ j = (mm(ll(2,icase)) - mm(ll(3,icase))) - pp(ll(6,icase)) + pp(ll(3,icase))
+ rslt(0) = t13fun( a,c,g,h ,d,e,f,j )
+ else
+ a = pp(ll(3,icase))
+ b = pp(ll(2,icase))
+ c = pp(ll(6,icase)) - pp(ll(2,icase)) - pp(ll(3,icase))
+ h = pp(ll(4,icase)) - pp(ll(5,icase)) - pp(ll(6,icase)) + pp(ll(2,icase))
+ j = pp(ll(5,icase)) - pp(ll(1,icase)) - pp(ll(2,icase))
+ d = (mm(ll(3,icase)) - mm(ll(4,icase))) - pp(ll(3,icase))
+ e = (mm(ll(2,icase)) - mm(ll(3,icase))) - pp(ll(6,icase)) + pp(ll(3,icase))
+ k = (mm(ll(1,icase)) - mm(ll(2,icase))) + pp(ll(6,icase)) - pp(ll(4,icase))
+ f = mm(ll(4,icase))
+ epk = (mm(ll(1,icase)) - mm(ll(3,icase))) + pp(ll(3,icase)) - pp(ll(4,icase))
+ rslt(0) = tfun( a,b ,c ,h,j ,d,e ,f,k ) &
+ - tfun( a,b+j,c+h,h,j ,d,epk,f,k )
+ endif
+ else
+! no extenal mass equal zero
+ if (real((pp(5)-pp(1)-pp(2))**2-4*pp(1)*pp(2)).gt.R0P0)then ;icase=0 !12, no permutation
+ elseif(real((pp(6)-pp(2)-pp(3))**2-4*pp(2)*pp(3)).gt.R0P0)then ;icase=8 !23, 1 cyclic permutation
+ elseif(real((pp(4)-pp(5)-pp(3))**2-4*pp(5)*pp(3)).gt.R0P0)then ;icase=4 !34, 2 cyclic permutations
+ elseif(real((pp(4)-pp(1)-pp(6))**2-4*pp(1)*pp(6)).gt.R0P0)then ;icase=2 !41, 3 cyclic permutations
+ else
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxc: ' &
+ ,'no positive lambda, returning 0'
+ return
+ endif
+ a = pp(ll(3,icase))
+ b = pp(ll(2,icase))
+ g = pp(ll(1,icase))
+ c = pp(ll(6,icase)) - pp(ll(2,icase)) - pp(ll(3,icase))
+ h = pp(ll(4,icase)) - pp(ll(5,icase)) - pp(ll(6,icase)) + pp(ll(2,icase))
+ j = pp(ll(5,icase)) - pp(ll(1,icase)) - pp(ll(2,icase))
+ d = (mm(ll(3,icase)) - mm(ll(4,icase))) - pp(ll(3,icase))
+ e = (mm(ll(2,icase)) - mm(ll(3,icase))) - pp(ll(6,icase)) + pp(ll(3,icase))
+ k = (mm(ll(1,icase)) - mm(ll(2,icase))) + pp(ll(6,icase)) - pp(ll(4,icase))
+ f = mm(ll(4,icase))
+ dpe = (mm(ll(2,icase)) - mm(ll(4,icase))) - pp(ll(6,icase))
+ epk = (mm(ll(1,icase)) - mm(ll(3,icase))) + pp(ll(3,icase)) - pp(ll(4,icase))
+ call solabc( x1,x2 ,sdnt ,g,j,b ,0 )
+ if (aimag(sdnt).ne.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop boxc: ' &
+ ,'no real solution for alpha, returning 0'
+ return
+ endif
+!BAD if (abs(real(x1)).gt.abs(real(x2))) then
+ if (abs(real(x1)).lt.abs(real(x2))) then !BETTER
+ sdnt = x1
+ x1 = x2
+ x2 = sdnt
+ endif
+ o1 = C1P0-x1
+ j1 = j+2*g*x1
+ e1 = e+k*x1
+ rslt(0) = -tfun( a+b+c,g ,j+h,c+2*b+(h+j)*x1,j1 ,dpe,k ,f,e1 ) &
+ + o1*tfun( a ,b+g+j,c+h,c+h*x1 ,o1*j1 ,d ,epk,f,e1 ) &
+ + x1*tfun( a ,b ,c ,c+h*x1 ,-j1*x1,d ,e ,f,e1 )
+ endif
+ end subroutine
+
+
+ function t13fun( aa,cc,gg,hh ,dd,ee,ff,jj ) result(rslt)
+!*******************************************************************
+! /1 /x y
+! | dx | dy -----------------------------------------------------
+! /0 /0 (gy^2 + hxy + dx + jy + f)*(ax^2 + cxy + dx + ey + f)
+!
+! jj should have negative imaginary part
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,cc,gg,hh ,dd,ee,ff,jj
+ complex(kindc2) :: rslt ,kk,ll,nn,y1,y2,sdnt,ieps
+ real(kindr2) ,parameter :: small=epsilon(R1P0)**2
+!
+! write(*,*) 'MESSAGE from OneLOop t13fun: you are calling me' !CALLINGME
+!
+ ieps = cmplx(R0P0,small*abs(real(ff)),kind=kindc2)
+!
+ kk = hh*aa - cc*gg
+ ll = aa*dd + hh*ee - dd*gg - cc*jj
+ nn = dd*(ee - jj) + (hh - cc)*(ff-ieps)
+ call solabc( y1,y2 ,sdnt ,kk,ll,nn ,0 )
+!
+ rslt = - s3fun( y1,y2 ,C0P0,C1P0 ,aa ,ee+cc,dd+ff ) &
+ + s3fun( y1,y2 ,C0P0,C1P0 ,gg ,jj+hh,dd+ff ) &
+ - s3fun( y1,y2 ,C0P0,C1P0 ,gg+hh,dd+jj,ff ) &
+ + s3fun( y1,y2 ,C0P0,C1P0 ,aa+cc,ee+dd,ff )
+!
+ rslt = rslt/kk
+ end function
+
+
+ function t1fun( aa,cc,gg,hh ,dd,ee,ff,jj ) result(rslt)
+!*******************************************************************
+! /1 /x 1
+! | dx | dy ----------------------------------------------
+! /0 /0 (g*x + h*x + j)*(a*x^2 + c*xy + d*x + e*y + f)
+!
+! jj should have negative imaginary part
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,cc,gg,hh ,dd,ee,ff,jj
+ complex(kindc2) ::rslt ,kk,ll,nn,y1,y2,sdnt,ieps
+ real(kindr2) ,parameter :: small=epsilon(R1P0)**2
+!
+! write(*,*) 'MESSAGE from OneLOop t1fun: you are calling me' !CALLINGME
+!
+ ieps = cmplx(R0P0,small*abs(real(ff)),kind=kindc2)
+!
+ kk = hh*aa - cc*gg
+ ll = hh*dd - cc*jj - ee*gg
+ nn = hh*(ff-ieps) - ee*jj
+ call solabc( y1,y2 ,sdnt ,kk,ll,nn ,0 )
+!
+ rslt = - s3fun( y1,y2 ,C0P0,C1P0 ,aa+cc,dd+ee,ff ) &
+ + s3fun( y1,y2 ,C0P0,C1P0 ,C0P0 ,gg+hh,jj ) &
+ - s3fun( y1,y2 ,C0P0,C1P0 ,C0P0 ,gg ,jj ) &
+ + s3fun( y1,y2 ,C0P0,C1P0 ,aa ,dd ,ff )
+!
+ rslt = rslt/kk
+ end function
+
+
+ function tfun( aa,bb,cc ,gin,hin ,dd,ee,ff ,jin ) result(rslt)
+!*******************************************************************
+! /1 /x 1
+! | dx | dy ------------------------------------------------------
+! /0 /0 (g*x + h*x + j)*(a*x^2 + b*y^2 + c*xy + d*x + e*y + f)
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,bb,cc ,gin,hin ,dd,ee,ff ,jin
+ complex(kindc2) :: rslt ,gg,hh,jj,zz(2),beta,tmpa(2),tmpb(2) &
+ ,tmpc(2),kiz(2),ll,nn,kk,y1,y2,yy(2,2),sdnt,ieps
+ real(kindr2) :: sj,ab1,ab2,ac1,ac2,abab,acac,abac,det,ap1,ap2 &
+ ,apab,apac,x1(2,2),x2(2,2),xmin
+ integer :: iz,iy,izmin
+ logical :: pp(2,2),p1,p2
+ real(kindr2) ,parameter :: small=epsilon(R1P0)**2
+!
+! write(*,*) 'MESSAGE from OneLOop tfun: you are calling me' !CALLINGME
+!
+ sj = aimag(jin)
+ if (sj.eq.R0P0) then
+ sj = -R1P0
+ else
+ sj = sign(R1P0,aimag(jin))
+ endif
+ gg = -sj*gin
+ hh = -sj*hin
+ jj = -sj*jin
+!
+ if (bb.eq.C0P0) then
+ rslt = -sj*t1fun( aa,cc,gg,hh ,dd,ee,ff,jj )
+ return
+ elseif (aa.eq.C0P0) then
+ rslt = -sj*t1fun( bb+cc,-cc,-gg-hh,gg,-dd-ee-2*(bb+cc),dd+cc,dd+ee+bb+cc+ff,gg+hh+jj )
+ return
+ endif
+!
+ ieps = cmplx(R0P0,small*abs(real(ff)),kind=kindc2)
+!
+ call solabc( zz(1),zz(2) ,sdnt ,bb,cc,aa ,0 )
+ if (abs(zz(1)).gt.abs(zz(2))) then
+ beta = zz(1)
+ zz(1) = zz(2)
+ zz(2) = beta
+ endif
+!
+ do iz=1,2
+ beta = zz(iz)
+ tmpa(iz) = gg + beta*hh
+ tmpb(iz) = cc + 2*beta*bb
+ tmpc(iz) = dd + beta*ee
+ kiz(iz) = bb*tmpa(iz) - hh*tmpb(iz)
+ ll = ee*tmpa(iz) - hh*tmpc(iz) - jj*tmpb(iz)
+ nn = (ff-ieps)*tmpa(iz) - jj*tmpc(iz)
+ call solabc( yy(iz,1),yy(iz,2) ,sdnt ,kiz(iz),ll,nn ,0 )
+ if (abs(aimag(beta)).ne.R0P0) then
+ ab1 = real(-beta)
+ ab2 = aimag(-beta)
+ ac1 = ab1+R1P0 !real(C1P0-beta)
+ ac2 = ab2 !aimag(C1P0-beta)
+ abab = ab1*ab1 + ab2*ab2
+ acac = ac1*ac1 + ac2*ac2
+ abac = ab1*ac1 + ab2*ac2
+ det = abab*acac - abac*abac
+ do iy=1,2
+ ap1 = real(yy(iz,iy))
+ ap2 = aimag(yy(iz,iy))
+ apab = ap1*ab1 + ap2*ab2
+ apac = ap1*ac1 + ap2*ac2
+ x1(iz,iy) = ( acac*apab - abac*apac )/det
+ x2(iz,iy) = (-abac*apab + abab*apac )/det
+ enddo
+ else
+ do iy=1,2
+ x1(iz,iy) = -R1P0
+ x2(iz,iy) = -R1P0
+ enddo
+ endif
+ enddo
+ xmin = R1P0
+ izmin = 2
+ do iz=1,2
+ do iy=1,2
+ if ( x1(iz,iy).ge.R0P0.and.x2(iz,iy).ge.R0P0 &
+ .and.x1(iz,iy)+x2(iz,iy).le.R1P0 ) then
+ pp(iz,iy) = .true.
+ if (x1(iz,iy).lt.xmin) then
+ xmin = x1(iz,iy)
+ izmin = iz
+ endif
+ if (x2(iz,iy).lt.xmin) then
+ xmin = x2(iz,iy)
+ izmin = iz
+ endif
+ else
+ pp(iz,iy) = .false.
+ endif
+ enddo
+ enddo
+ iz = izmin+1
+ if (iz.eq.3) iz = 1
+!
+ beta = zz(iz)
+ kk = kiz(iz)
+ y1 = yy(iz,1)
+ y2 = yy(iz,2)
+ p1 = pp(iz,1)
+ p2 = pp(iz,2)
+!
+ rslt = + s3fun( y1,y2 ,beta ,C1P0 ,C0P0 ,hh ,gg+jj ) &
+ - s3fun( y1,y2 ,C0P0 ,C1P0-beta ,C0P0 ,gg+hh, jj ) &
+ + s3fun( y1,y2 ,C0P0 , -beta ,C0P0 ,gg , jj ) &
+ - s3fun( y1,y2 ,beta ,C1P0 ,bb ,cc+ee,aa+dd+ff ) &
+ + s3fun( y1,y2 ,C0P0 ,C1P0-beta ,aa+bb+cc,dd+ee,ff ) &
+ - s3fun( y1,y2 ,C0P0 , -beta ,aa ,dd ,ff )
+!
+ sdnt = plnr( y1,y2 ,p1,p2, tmpa(iz),tmpb(iz),tmpc(iz) )
+ if (aimag(beta).le.R0P0) then ;rslt = rslt + sdnt
+ else ;rslt = rslt - sdnt
+ endif
+!
+ rslt = -sj*rslt/kk
+ end function
+
+
+ function s3fun( y1i,y2i ,dd,ee ,aa,bb,cin ) result(rslt)
+!*******************************************************************
+! Calculate
+! ( S3(y1i) - S3(y2i) )/( y1i - y2i )
+! where
+! /1 ee * ln( aa*x^2 + bb*x + cc )
+! S3(y) = | dx -----------------------------
+! /0 ee*x - y - dd
+!
+! y1i,y2i should have a non-zero imaginary part
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ complex(kindc2) ,intent(in) :: y1i,y2i ,dd,ee ,aa,bb,cin
+ complex(kindc2) :: rslt ,y1,y2,fy1y2,z1,z2,tmp,cc
+ real(kindr2) ::rea,reb,rez1,rez2,imz1,imz2,simc
+ real(kindr2) ,parameter :: small=epsilon(R1P0)**2
+!
+ if (ee.eq.C0P0) then
+ rslt = C0P0
+ return
+ endif
+!
+ cc = cin
+ rea = abs(aa)
+ reb = abs(bb)
+ simc = abs(cc)
+ if (simc.lt.thrss3fun*min(rea,reb)) cc = C0P0
+!
+ simc = aimag(cc)
+ if (simc.eq.R0P0) then
+ simc = aimag(bb)
+ if (simc.eq.R0P0) simc = -R1P0
+ endif
+ simc = sign(R1P0,simc)
+!
+ y1 = (dd+y1i)/ee
+ y2 = (dd+y2i)/ee
+ if (aimag(y1).eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop s3fun: ' &
+ ,'y1 has zero imaginary part'
+ endif
+ if (aimag(y2).eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop s3fun: ' &
+ ,'y2 has zero imaginary part'
+ endif
+ fy1y2 = r0fun( y1,y2 )
+!
+ if (aa.ne.C0P0) then
+!
+ call solabc( z1,z2 ,tmp ,aa,bb,cc ,0 )
+ rea = sign(R1P0,real(aa))
+ rez1 = real(z1)
+ rez2 = real(z2)
+ imz1 = aimag(z1) ! sign(Im(a*z1*z2)) = simc
+ imz2 = aimag(z2)
+ if (imz1.eq.R0P0) imz1 = simc*rea*sign(R1P0,rez2)*abs(small*rez1)
+ if (imz2.eq.R0P0) imz2 = simc*rea*sign(R1P0,rez1)*abs(small*rez2)
+ z1 = cmplx( rez1,imz1,kind=kindc2 )
+ z2 = cmplx( rez2,imz2,kind=kindc2 )
+ rslt = fy1y2 * ( logc(qonv(aa,simc)) &
+ + eta3( -z1,-imz1,-z2,-imz2,C0P0,simc*rea ) ) &
+ + r1fun( z1,y1,y2,fy1y2 ) &
+ + r1fun( z2,y1,y2,fy1y2 )
+!
+ elseif (bb.ne.C0P0) then
+!
+ z1 = -cc/bb ! - i|eps|Re(b)
+ reb = real(bb)
+ rez1 = real(z1)
+ imz1 = aimag(z1)
+ if (abs(imz1).eq.R0P0) then
+ imz1 = -simc*reb*abs(small*rez1/reb)
+ z1 = cmplx( rez1,imz1,kind=kindc2 )
+ endif
+ rslt = fy1y2 * ( logc(qonv(bb,simc)) &
+ + eta3(bb,simc ,-z1,-imz1 ,cc,simc) ) &
+ + r1fun( z1,y1,y2,fy1y2 )
+!
+ elseif (cc.ne.C0P0) then
+!
+ rslt = logc( qonv(cc,simc) )*fy1y2
+!
+ else!if (aa=bb=cc=0)
+!
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop s3fun: ' &
+ ,'cc equal zero, returning 0'
+ rslt = C0P0
+!
+ endif
+!
+ rslt = rslt/ee
+ end function
+
+
+ function r1fun( zz,y1,y2,fy1y2 ) result(rslt)
+!*******************************************************************
+! calculates ( R1(y1,z) - R1(y2,z) )/( y1 - y2 )
+! where
+! / / 1-y \ / 1-z \ \
+! R1(y,z) = ln(y-z) * | log |-----| - log |-----| |
+! \ \ -y / \ -z / /
+!
+! / y-z \ / y-z \
+! - Li2 |1 - ----| + Li2 |1 - ----|
+! \ -z / \ 1-z /
+!
+! / 1-y1 \ / 1-y2 \
+! log |------| - log |------|
+! input fy1y2 should be equal to \ -y1 / \ -y2 /
+! ---------------------------
+! y1 - y2
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(in) :: y1,y2,zz,fy1y2
+ complex(kindc2) :: rslt ,oz
+ type(qmplx_type) :: q1z,q2z,qq
+ real(kindr2) :: h12,hz1,hz2,hzz,hoz
+ logical :: zzsmall,ozsmall
+!
+ oz = C1P0-zz
+ h12 = abs(y1-y2)
+ hz1 = abs(y1-zz)
+ hz2 = abs(y2-zz)
+ hzz = abs(zz)
+ hoz = abs(oz)
+ q1z = qonv(y1-zz)
+ q2z = qonv(y2-zz)
+!
+ zzsmall = .false.
+ ozsmall = .false.
+ if (hzz.lt.hz1.and.hzz.lt.hz2.and.hzz.lt.hoz) then ! |z| < |y1-z|,|y2-z|
+ zzsmall = .true.
+ rslt = fy1y2*logc( q1z ) &
+ - ( logc(q1z*q2z)/2 + logc(qonv((y2-C1P0)/y2)) &
+ - logc(qonv(oz)) )*logc2(q1z/q2z)/(y2-zz)
+ elseif (hoz.lt.hz1.and.hoz.lt.hz2) then ! |1-z| < |y1-z|,|y2-z|
+ ozsmall = .true.
+ rslt = fy1y2*logc( q1z ) &
+ - (-logc(q1z*q2z)/2 + logc(qonv((y2-C1P0)/y2)) &
+ + logc(qonv(-zz)) )*logc2(q1z/q2z)/(y2-zz)
+ elseif (h12.le.hz2.and.hz2.le.hz1) then ! |y1-y2| < |y2-z| < |y1-z|
+ rslt = fy1y2*logc( q1z ) - r0fun( y2,zz )*logc2( q1z/q2z )
+ elseif (h12.le.hz1.and.hz1.le.hz2) then ! |y1-y2| < |y2-z| < |y1-z|
+ rslt = fy1y2*logc( q2z ) - r0fun( y1,zz )*logc2( q2z/q1z )
+ else!if(hz1.lt.h12.or.hz2.lt.h12) then ! |y2-z|,|y1-z| < |y1-y2|
+ rslt = C0P0
+ if (hz1.ne.R0P0) rslt = rslt + (y1-zz)*logc( q1z )*r0fun( y1,zz )
+ if (hz2.ne.R0P0) rslt = rslt - (y2-zz)*logc( q2z )*r0fun( y2,zz )
+ rslt = rslt/(y1-y2)
+ endif
+!
+ if (zzsmall) then ! |z| < |y1-z|,|y2-z|
+ qq = qonv(-zz)
+ rslt = rslt + ( li2c( qq/q1z ) - li2c( qq/q2z ) )/(y1-y2)
+ else
+ qq = qonv(-zz)
+ rslt = rslt + li2c2( q1z/qq ,q2z/qq )/zz
+ endif
+!
+ if (ozsmall) then ! |1-z| < |y1-z|,|y2-z|
+ qq = qonv(oz)
+ rslt = rslt - ( li2c( qq/q1z ) - li2c( qq/q2z ) )/(y1-y2)
+ else
+ qq = qonv(oz)
+ rslt = rslt + li2c2( q1z/qq ,q2z/qq )/oz
+ endif
+ end function
+
+
+ function r0fun( y1,y2 ) result(rslt)
+!*******************************************************************
+! / 1-y1 \ / 1-y2 \
+! log |------| - log |------|
+! \ -y1 / \ -y2 /
+! ---------------------------
+! y1 - y2
+!
+! y1,y2 should have non-zero imaginary parts
+!*******************************************************************
+ use avh_olo_logc2 ,only: logc2
+ complex(kindc2) ,intent(in) :: y1,y2
+ complex(kindc2) :: rslt ,oy1,oy2
+ oy1 = C1P0-y1
+ oy2 = C1P0-y2
+ rslt = logc2( qonv(-y2)/qonv(-y1) )/y1 &
+ + logc2( qonv(oy2)/qonv(oy1) )/oy1
+ end function
+
+
+ function plnr( y1,y2 ,p1,p2 ,aa,bb,cc ) result(rslt)
+!*******************************************************************
+! / a \ / a \
+! p1*log |--------| - p2*log |--------|
+! \ b*y1+c / \ b*y2+c /
+! 2*pi*imag* -------------------------------------
+! y1 - y2
+!
+! p1,p2 are logical, to be interpreted as 0,1 in the formula above
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ complex(kindc2) ,intent(in) :: y1,y2 ,aa,bb,cc
+ logical ,intent(in) :: p1,p2
+ complex(kindc2) :: rslt ,x1,x2,xx
+ type(qmplx_type) :: q1,q2
+ complex(kindc2) ,parameter :: twopii=CiP0*TWOPI
+!
+ if (p1) then
+ x1 = bb*y1 + cc
+ xx = aa/x1
+ if (aimag(xx).eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop plnr: ' &
+ ,'aa/x1 has zero imaginary part'
+ endif
+ q1 = qonv(xx)
+ endif
+ if (p2) then
+ x2 = bb*y2 + cc
+ xx = aa/x2
+ if (aimag(xx).eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop plnr: ' &
+ ,'aa/x2 has zero imaginary part'
+ endif
+ q2 = qonv(xx)
+ endif
+ if (p1) then
+ if (p2) then
+ rslt = logc2( q2/q1 ) * twopii*bb/x2
+ else
+ rslt = logc( q1 ) * twopii/(y1-y2)
+ endif
+ elseif (p2) then
+ rslt = logc( q2 ) * twopii/(y2-y1) ! minus sign
+ else
+ rslt = C0P0
+ endif
+ end function
+
+
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_func.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_func.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_func.f90 (revision 119)
@@ -0,0 +1,1085 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_func
+ use avh_olo_kinds
+ use avh_olo_units
+!
+ implicit none
+!
+ type :: qmplx_type
+ complex(kindc2) :: c
+ integer :: p
+ end type
+!
+ interface mysqrt
+ module procedure mysqrt_0,mysqrt_r,mysqrt_i
+ end interface
+!
+ interface qonv
+ module procedure qonv_r,qonv_0,qonv_i
+ end interface
+!
+ interface operator (*)
+ module procedure prduct,prduct_r
+ end interface
+ interface operator (/)
+ module procedure ratio,ratio_r
+ end interface
+!
+ interface eta5
+ module procedure eta5_0
+ end interface
+ interface eta3
+ module procedure eta3_r,eta3_0
+ end interface
+ interface eta2
+ module procedure eta2_r,eta2_0
+ end interface
+!
+contains
+!
+!
+ function mysqrt_0(xx) result(rslt)
+!*******************************************************************
+! Returns the square-root of xx .
+! If Im(xx) is equal zero and Re(xx) is negative, the result is
+! negative imaginary.
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ complex(kindc2) :: rslt ,zz
+ real(kindr2) :: xim,xre
+ xim = aimag(xx)
+ if (xim.eq.R0P0) then
+ xre = real(xx)
+ if (xre.ge.R0P0) then
+ zz = cmplx(sqrt(xre),R0P0,kind=kindc2)
+ else
+ zz = cmplx(R0P0,-sqrt(-xre),kind=kindc2)
+ endif
+ else
+ zz = sqrt(xx)
+ endif
+ rslt = zz
+ end function
+
+ function mysqrt_r(xx,sgn) result(rslt)
+!*******************************************************************
+! Returns the square-root of xx .
+! If Im(xx) is equal zero and Re(xx) is negative, the result is
+! imaginary and has the same sign as sgn .
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ real(kindr2) ,intent(in) :: sgn
+ complex(kindc2) :: rslt ,zz
+ real(kindr2) :: xim,xre
+ xim = aimag(xx)
+ if (xim.eq.R0P0) then
+ xre = real(xx)
+ if (xre.ge.R0P0) then
+ zz = cmplx(sqrt(xre),R0P0,kind=kindc2)
+ else
+ zz = cmplx(R0P0,sign(sqrt(-xre),sgn),kind=kindc2)
+ endif
+ else
+ zz = sqrt(xx)
+ endif
+ rslt = zz
+ end function
+
+ function mysqrt_i(xx,sgn) result(rslt)
+!*******************************************************************
+! Returns the square-root of xx .
+! If Im(xx) is equal zero and Re(xx) is negative, the result is
+! imaginary and has the same sign as sgn .
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ integer ,intent(in) :: sgn
+ complex(kindc2) :: rslt ,zz
+ real(kindr2) :: xim,xre
+ xim = aimag(xx)
+ if (xim.eq.R0P0) then
+ xre = real(xx)
+ if (xre.ge.R0P0) then
+ zz = cmplx(sqrt(xre),R0P0,KIND=kindc2)
+ else
+ zz = cmplx(R0P0,sign(sqrt(-xre),real(sgn,KIND=kindr2)),KIND=kindc2)
+ endif
+ else
+ zz = sqrt(xx)
+ endif
+ rslt = zz
+ end function
+
+
+ subroutine solabc( x1,x2 ,dd ,aa,bb,cc ,imode )
+!*******************************************************************
+! Returns the solutions x1,x2 to the equation aa*x^2+bb*x+cc=0
+! Also returns dd = aa*(x1-x2)
+! If imode=/=0 it uses dd as input as value of sqrt(b^2-4*a*c)
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: x1,x2
+ complex(kindc2) ,intent(inout) :: dd
+ complex(kindc2) ,intent(in) :: aa,bb,cc
+ integer ,intent(in) :: imode
+ complex(kindc2) :: qq,hh
+ real(kindr2) :: r1,r2
+!
+ if (aa.eq.C0P0) then
+ if (bb.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop solabc: ' &
+ ,'no solutions, returning 0'
+ x1 = C0P0
+ x2 = C0P0
+ dd = C0P0
+ else
+ x1 = -cc/bb
+ x2 = x1
+ dd = bb
+ endif
+ elseif (cc.eq.C0P0) then
+ dd = -bb
+ x1 = dd/aa
+ x2 = C0P0
+ else
+ if (imode.eq.0) dd = sqrt(bb*bb - 4*aa*cc)
+ qq = -bb+dd
+ hh = -bb-dd
+ r1 = abs(qq)
+ r2 = abs(hh)
+ if (r1.ge.r2) then
+ x1 = qq/(2*aa)
+ x2 = (2*cc)/qq
+ else
+ qq = hh
+ x2 = qq/(2*aa)
+ x1 = (2*cc)/qq
+ endif
+ endif
+ end subroutine
+
+
+ subroutine rfun(rr,dd ,qq)
+!*******************************************************************
+! Returns rr such that qq = rr + 1/rr and Im(rr) has the same
+! sign as Im(qq) .
+! If Im(qq) is zero, then Im(rr) is negative or zero.
+! If Im(rr) is zero, then |rr| > 1/|rr| .
+! Also returns dd = rr - 1/rr .
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: rr,dd
+ complex(kindc2) ,intent(in) :: qq
+ complex(kindc2) :: r2
+ real(kindr2) :: aa,bb
+ integer :: ir,ik
+ complex(kindc2) ,parameter :: two=2*C1P0,four=4*C1P0
+ dd = sqrt(qq*qq-four)
+ rr = qq+dd
+ r2 = qq-dd
+ aa = abs(rr)
+ bb = abs(r2)
+ if (bb.gt.aa) then
+ rr = r2
+ dd = -dd
+ endif
+ aa = aimag(qq)
+ bb = aimag(rr)
+ if (aa.eq.R0P0) then
+ if (bb.le.R0P0) then
+ rr = rr/two
+ else
+ rr = two/rr
+ dd = -dd
+ endif
+ else
+ ik = int(sign(R1P0,aa))
+ ir = int(sign(R1P0,bb))
+ if (ir.eq.ik) then
+ rr = rr/two
+ else
+ rr = two/rr
+ dd = -dd
+ endif
+ endif
+ end subroutine
+
+ subroutine rfun0(rr ,dd,qq)
+!*******************************************************************
+! Like rfun, but now dd is input, which may get a minus sign
+!*******************************************************************
+ complex(kindc2) ,intent(out) :: rr
+ complex(kindc2) ,intent(inout) :: dd
+ complex(kindc2) ,intent(in) :: qq
+ complex(kindc2) :: r2
+ real(kindr2) :: aa,bb
+ integer :: ir,ik
+ complex(kindc2) ,parameter :: two=2*C1P0
+ rr = qq+dd
+ r2 = qq-dd
+ aa = abs(rr)
+ bb = abs(r2)
+ if (bb.gt.aa) then
+ rr = r2
+ dd = -dd
+ endif
+ aa = aimag(qq)
+ bb = aimag(rr)
+ if (aa.eq.R0P0) then
+ if (bb.le.R0P0) then
+ rr = rr/two
+ else
+ rr = two/rr
+ dd = -dd
+ endif
+ else
+ ik = int(sign(R1P0,aa))
+ ir = int(sign(R1P0,bb))
+ if (ir.eq.ik) then
+ rr = rr/two
+ else
+ rr = two/rr
+ dd = -dd
+ endif
+ endif
+ end subroutine
+
+
+ function qonv_r(xx,sgn) result(rslt)
+!*******************************************************************
+! zz=rslt%c ,iz=rslt%p
+! Determine zz,iz such that xx = zz*exp(iz*imag*pi) and Re(zz)
+! is positive. If Im(x)=0 and Re(x)<0 then iz becomes the
+! sign of sgn .
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ real(kindr2) ,intent(in) :: sgn
+ type(qmplx_type) :: rslt
+ real(kindr2) :: xre,xim
+ xre = real(xx)
+ if (xre.ge.R0P0) then
+ rslt%c = xx
+ rslt%p = 0
+ else
+ xim = aimag(xx)
+ if (xim.eq.R0P0) then
+ rslt%c = cmplx(-xre,R0P0,kind=kindc2)
+ rslt%p = int(sign(R1P0,sgn))
+ else
+ rslt%c = -xx
+ rslt%p = int(sign(R1P0,xim)) ! xim = -Im(rslt%c)
+ endif
+ endif
+ end function
+!
+ function qonv_i(xx,sgn) result(rslt)
+!*******************************************************************
+! zz=rslt%c ,iz=rslt%p
+! Determine zz,iz such that xx = zz*exp(iz*imag*pi) and Re(zz)
+! is positive. If Im(x)=0 and Re(x)<0 then iz becomes the
+! sign of sgn .
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ integer ,intent(in) :: sgn
+ type(qmplx_type) :: rslt
+ real(kindr2) :: xre,xim
+ xre = real(xx)
+ if (xre.ge.R0P0) then
+ rslt%c = xx
+ rslt%p = 0
+ else
+ xim = aimag(xx)
+ if (xim.eq.R0P0) then
+ rslt%c = cmplx(-xre,R0P0,kind=kindc2)
+ rslt%p = sign(1,sgn)
+ else
+ rslt%c = -xx
+ rslt%p = int(sign(R1P0,xim)) ! xim = -Im(rslt%c)
+ endif
+ endif
+ end function
+!
+ function qonv_0(xx) result(rslt)
+!*******************************************************************
+! zz=rslt%c ,iz=rslt%p
+! Determine zz,iz such that xx = zz*exp(iz*imag*pi) and Re(zz)
+! is positive. If Im(x)=0 and Re(x)<0 then iz=1
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ type(qmplx_type) :: rslt
+ real(kindr2) :: xre,xim
+ xre = real(xx)
+ if (xre.ge.R0P0) then
+ rslt%c = xx
+ rslt%p = 0
+ else
+ xim = aimag(xx)
+ if (xim.eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop qonv: ' &
+ ,'negative input with undefined sign for the imaginary part, ' &
+ ,'putting +ieps'
+ rslt%c = cmplx(-xre,R0P0,kind=kindc2)
+ rslt%p = 1
+ else
+ rslt%c = -xx
+ rslt%p = int(sign(R1P0,xim)) ! xim = -Im(rslt%c)
+ endif
+ endif
+ end function
+!
+ function directly(xx,ix) result(rslt)
+!*******************************************************************
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: xx
+ integer ,intent(in) :: ix
+ type(qmplx_type) :: rslt
+ rslt%c = xx
+ rslt%p = ix
+ end function
+
+
+ function sheet(xx) result(ii)
+!*******************************************************************
+! Returns the number of the Riemann-sheet (times 2) for the complex
+! number xx*exp(ix*imag*pi) . The real part of xx is assumed to be
+! positive or zero. Examples:
+! xx=1+imag, ix=-1 -> ii= 0
+! xx=1+imag, ix= 1 -> ii= 2
+! xx=1-imag, ix=-1 -> ii=-2
+! xx=1-imag, ix= 1 -> ii= 0
+! xx=1 , ix= 1 -> ii= 0 convention that log(-1)=pi on
+! xx=1 , ix=-1 -> ii=-2 the principal Riemann-sheet
+!*******************************************************************
+ type(qmplx_type) ,intent(in) :: xx
+ integer :: ii,jj
+ real(kindr2) :: xim
+ ii = xx%p/2*2
+ jj = xx%p-ii
+ xim = aimag(xx%c)
+ if (xim.le.R0P0) then ! also xim=0 <==> log(-1)=pi, not -pi
+ if (jj.eq.-1) ii = ii-2
+ else
+ if (jj.eq. 1) ii = ii+2
+ endif
+ end function
+
+
+ function prduct(yy,xx) result(zz)
+!*******************************************************************
+! Return the product zz of yy and xx
+! keeping track of (the multiple of pi of) the phase %p such that
+! the real part of zz%c remains positive
+!*******************************************************************
+ type(qmplx_type) ,intent(in) :: yy,xx
+ type(qmplx_type) :: zz
+ zz%c = yy%c*xx%c
+ zz%p = yy%p+xx%p
+ if (real(zz%c).lt.R0P0) then
+ zz%p = zz%p + int(sign(R1P0,aimag(xx%c)))
+ zz%c = -zz%c
+ endif
+ end function
+
+ function prduct_r(yy,xx) result(zz)
+!*******************************************************************
+! Return the product zz of yy and xx
+! keeping track of (the multiple of pi of) the phase %p such that
+! the real part of zz%c remains positive
+!*******************************************************************
+ type(qmplx_type) ,intent(in) :: yy
+ real(kindr2) ,intent(in) :: xx
+ type(qmplx_type) :: zz
+ zz%c = yy%c*abs(xx)
+ zz%p = yy%p
+ end function
+
+ function ratio(yy,xx) result(zz)
+!*******************************************************************
+! Return the ratio zz of yy and xx
+! keeping track of (the multiple of pi of) the phase %p such that
+! the real part of zz%c remains positive
+!*******************************************************************
+ type(qmplx_type) ,intent(in) :: yy,xx
+ type(qmplx_type) :: zz
+ zz%c = yy%c/xx%c
+ zz%p = yy%p-xx%p
+ if (real(zz%c).lt.R0P0) then
+ zz%p = zz%p - int(sign(R1P0,aimag(xx%c)))
+ zz%c = -zz%c
+ endif
+ end function
+!
+ function ratio_r(yy,xx) result(zz)
+!*******************************************************************
+!*******************************************************************
+ type(qmplx_type) ,intent(in) :: yy
+ real(kindr2) ,intent(in) :: xx
+ type(qmplx_type) :: zz
+ zz%c = yy%c/abs(xx)
+ zz%p = yy%p
+ end function
+!
+!
+ function eta3_r( aa,sa ,bb,sb ,cc,sc ) result(rslt)
+!*******************************************************************
+! 2*pi*imag times the result of
+! theta(-Im(a))*theta(-Im(b))*theta( Im(c))
+! - theta( Im(a))*theta( Im(b))*theta(-Im(c))
+! where a,b,c are interpreted as a+i|eps|sa, b+i|eps|sb, c+i|eps|sc
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,bb,cc
+ real(kindr2) ,intent(in) :: sa,sb,sc
+ complex(kindc2) :: rslt
+ real(kindr2) :: ima,imb,imc
+ ima = aimag(aa)
+ imb = aimag(bb)
+ imc = aimag(cc)
+ if (ima.eq.R0P0) ima = sa
+ if (imb.eq.R0P0) imb = sb
+ if (imc.eq.R0P0) imc = sc
+ ima = sign(R1P0,ima)
+ imb = sign(R1P0,imb)
+ imc = sign(R1P0,imc)
+ if (ima.eq.imb.and.ima.ne.imc) then
+ rslt = cmplx(R0P0,imc*TWOPI,kind=kindc2)
+ else
+ rslt = C0P0
+ endif
+ end function
+!
+ function eta3_0( aa ,bb ,cc ) result(rslt)
+!*******************************************************************
+! 2*pi*imag times the result of
+! theta(-Im(a))*theta(-Im(b))*theta( Im(c))
+! - theta( Im(a))*theta( Im(b))*theta(-Im(c))
+! where a,b,c are interpreted as a+i|eps|sa, b+i|eps|sb, c+i|eps|sc
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,bb,cc
+ complex(kindc2) :: rslt
+ real(kindr2) :: ima,imb,imc
+ ima = aimag(aa)
+ imb = aimag(bb)
+ imc = aimag(cc)
+ ima = sign(R1P0,ima)
+ imb = sign(R1P0,imb)
+ imc = sign(R1P0,imc)
+ if (ima.eq.imb.and.ima.ne.imc) then
+ rslt = cmplx(R0P0,imc*TWOPI,kind=kindc2)
+ else
+ rslt = C0P0
+ endif
+ end function
+!
+ function eta5_0( aa ,b1,c1 ,b2,c2 ) result(rslt)
+!*******************************************************************
+! eta3(aa,b1,c1) - eta3(aa,b2,c2)
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,b1,c1 ,b2,c2
+ complex(kindc2) :: rslt
+ real(kindr2) :: imaa,imb1,imc1,imb2,imc2
+ imaa = sign(R1P0,aimag(aa))
+ imb1 = sign(R1P0,aimag(b1))
+ imb2 = sign(R1P0,aimag(b2))
+ imc1 = sign(R1P0,aimag(c1))
+ imc2 = sign(R1P0,aimag(c2))
+ if (imaa.eq.imb1) then
+ if (imaa.eq.imb2) then
+ if (imc1.eq.imc2) then
+ rslt = C0P0
+ elseif (imaa.ne.imc1) then
+ rslt = cmplx(R0P0, imc1*TWOPI,kind=kindc2)
+ else
+ rslt = cmplx(R0P0,-imc2*TWOPI,kind=kindc2)
+ endif
+ elseif (imaa.ne.imc1) then
+ rslt = cmplx(R0P0, imc1*TWOPI,kind=kindc2)
+ else
+ rslt = C0P0
+ endif
+ elseif (imaa.eq.imb2.and.imaa.ne.imc2) then
+ rslt = cmplx(R0P0,-imc2*TWOPI,kind=kindc2)
+ else
+ rslt = C0P0
+ endif
+ end function
+
+ function eta2_r( aa,sa ,bb,sb ) result(rslt)
+!*******************************************************************
+! The same as eta3, but with c=a*b, so that
+! eta(a,b) = log(a*b) - log(a) - log(b)
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,bb
+ real(kindr2) ,intent(in) :: sa,sb
+ complex(kindc2) :: rslt
+ real(kindr2) :: rea,reb,ima,imb,imab
+ rea = real(aa) ;ima = aimag(aa)
+ reb = real(bb) ;imb = aimag(bb)
+ imab = rea*imb + reb*ima
+ if (ima.eq.R0P0) ima = sa
+ if (imb.eq.R0P0) imb = sb
+ if (imab.eq.R0P0) imab = sign(rea,sb) + sign(reb,sa)
+ ima = sign(R1P0,ima)
+ imb = sign(R1P0,imb)
+ imab = sign(R1P0,imab)
+ if (ima.eq.imb.and.ima.ne.imab) then
+ rslt = cmplx(R0P0,imab*TWOPI,kind=kindc2)
+ else
+ rslt = C0P0
+ endif
+ end function
+!
+ function eta2_0( aa ,bb ) result(rslt)
+!*******************************************************************
+!*******************************************************************
+ complex(kindc2) ,intent(in) :: aa,bb
+ complex(kindc2) :: rslt
+ real(kindr2) :: rea,reb,ima,imb,imab
+ rea = real(aa) ;ima = aimag(aa)
+ reb = real(bb) ;imb = aimag(bb)
+ rea = rea*imb
+ reb = reb*ima
+ imab = rea+reb
+ ima = sign(R1P0,ima)
+ imb = sign(R1P0,imb)
+ imab = sign(R1P0,imab)
+ if (ima.eq.imb.and.ima.ne.imab) then
+ rslt = cmplx(R0P0,imab*TWOPI,kind=kindc2)
+ else
+ rslt = C0P0
+ endif
+ end function
+!
+end module
+
+
+module avh_olo_loga
+!*******************************************************************
+! log( |xx|*exp(imag*pi*iph) ) = log|xx| + imag*pi*iph
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: loga
+ real(kindr2) ,parameter :: pi=TWOPI/2
+contains
+!
+ function loga(xx,iph) result(rslt)
+ real(kindr2) ,intent(in) :: xx
+ integer ,intent(in) :: iph
+ complex(kindc2) :: rslt
+ real(kindr2) :: rr
+!
+ rr = abs(xx)
+ if (rr.eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop loga: ' &
+ ,'|xx|=',rr
+ endif
+ rslt = cmplx(log(rr),iph*pi,kind=kindc2)
+ end function
+!
+end module
+
+
+module avh_olo_bern
+!*******************************************************************
+! the first nn Bernoulli numbers
+!*******************************************************************
+ use avh_olo_kinds
+ implicit none
+ private
+ public :: init_bern,rbern,cbern
+ integer ,parameter :: nn=40
+ real(kindr2) :: rbern(nn) !PROTECTED
+ complex(kindc2) :: cbern(nn) !PROTECTED
+ integer :: ndigits=0
+
+ ! protected :: rbern, cbern
+contains
+!
+ subroutine init_bern(ndig)
+ integer ,intent(in) :: ndig
+ integer :: jj
+ integer ,parameter :: d=kindr2
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ rbern(1:nn) = R0P0
+ rbern( 1) = -1._d/2._d
+ rbern( 2) = 1._d/6._d
+ rbern( 4) = -1._d/30._d
+ rbern( 6) = 1._d/42._d
+ rbern( 8) = -1._d/30._d
+ rbern(10) = 5._d/66._d
+ rbern(12) = -691._d/2730._d
+ rbern(14) = 7._d/6._d
+ rbern(16) = -3617._d/510._d
+ rbern(18) = 43867._d/798._d
+ rbern(20) = -174611._d/330._d
+ rbern(22) = 854513._d/138._d
+ rbern(24) = -236364091._d/2730._d
+ rbern(26) = 8553103._d/6._d
+ rbern(28) = -23749461029._d/870._d
+ rbern(30) = 8615841276005._d/14322._d
+ rbern(32) = -7709321041217._d/510._d
+ rbern(34) = 2577687858367._d/6._d
+ rbern(36) = -26315271553053477373._d/1919190._d
+ rbern(38) = 2929993913841559._d/6._d
+ rbern(40) = -261082718496449122051._d/13530._d
+ do jj=1,nn
+ cbern(jj) = cmplx(rbern(jj),kind=kindc2)
+ enddo
+ end subroutine
+!
+end module
+
+
+module avh_olo_li2a
+!*******************************************************************
+! /1 ln(1-zz*t)
+! avh_olo_li2a = - | dt ----------
+! /0 t
+! with zz = 1 - |xx|*exp(imag*pi*iph)
+! Examples:
+! In order to get the dilog of 1.1 use xx=1.1, iph=0
+! In order to get the dilog of -1.1 use xx=1.1, iph=1
+! Add multiples of 2 to iph in order to get the result on
+! different Riemann-sheets.
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_func
+ use avh_olo_bern
+ implicit none
+ private
+ public :: init_li2a,li2a
+ real(kindr2) ,parameter :: pi=TWOPI/2
+ complex(kindc2) ,parameter :: pi2o6=C1P0*TWOPI*TWOPI/24
+ integer :: nn=16
+ integer :: ndigits=0
+contains
+!
+ subroutine init_li2a(ndig)
+ integer ,intent(in) :: ndig
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ call init_bern(ndigits)
+ if (ndigits.lt.24) then
+ nn = 16
+ else
+ nn = 30
+ endif
+ end subroutine
+
+ function li2a(xx,iph) result(rslt)
+ real(kindr2) ,intent(in) :: xx
+ integer ,intent(in) :: iph
+ complex(kindc2) :: rslt
+ real(kindr2) :: rr,yy,lyy,loy,zz,z2,liox
+ integer :: ii,ntwo,ione
+ logical :: positive , r_gt_1 , y_lt_h
+!
+ rr = abs(xx)
+ ntwo = iph/2*2
+ ione = iph - ntwo
+ positive = (ione.eq.0)
+!
+ if (rr.eq.R0P0) then
+ rslt = pi2o6
+ elseif (rr.eq.R1P0.and.positive) then
+ rslt = C0P0
+ else
+ yy = rr
+ lyy = log(rr)
+ if (.not.positive) yy = -yy
+!
+ r_gt_1 = (rr.gt.R1P0)
+ if (r_gt_1) then
+ yy = R1P0/yy
+ lyy = -lyy
+ ntwo = -ntwo
+ ione = -ione
+ endif
+ loy = log(R1P0-yy) ! log(1-yy) is always real
+!
+ y_lt_h = (yy.lt.R5M1)
+ if (y_lt_h) then
+ zz = -loy ! log(1-yy) is real
+ else
+ zz = -lyy ! yy>0.5 => log(yy) is real
+ endif
+!
+ z2 = zz*zz
+ liox = rbern(nn)
+ do ii=nn,4,-2
+ liox = rbern(ii-2) + liox*z2/(ii*(ii+1))
+ enddo
+ liox = rbern(1) + liox*zz/3
+ liox = zz + liox*z2/2
+!
+ rslt = cmplx(liox,kind=kindc2)
+!
+ if (y_lt_h) then
+ rslt = pi2o6 - rslt - cmplx(loy*lyy,loy*pi*ione,kind=kindc2)
+ endif
+!
+ rslt = rslt + cmplx( R0P0 , -loy*pi*ntwo ,kind=kindc2)
+!
+ if (r_gt_1) rslt = -rslt - cmplx(-lyy,iph*pi,kind=kindc2)**2/2
+ endif
+ end function
+!
+end module
+
+
+module avh_olo_loga2
+!*******************************************************************
+! log(xx)/(1-xx) with xx = log|xx| + imag*pi*iph
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: init_loga2,loga2
+ real(kindr2) :: thrs=epsilon(R1P0)
+ integer :: ndigits=0
+contains
+!
+ subroutine init_loga2(ndig)
+ integer ,intent(in) :: ndig
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ thrs = 10*thrs
+ end subroutine
+!
+ function loga2(xx,iph) result(rslt)
+ use avh_olo_loga ,only : loga
+ real(kindr2) ,intent(in) :: xx
+ integer ,intent(in) :: iph
+ complex(kindc2) :: rslt
+ real(kindr2) :: omx
+!
+ if (mod(iph,2).eq.0) then
+ omx = R1P0-abs(xx)
+ else
+ omx = R1P0+abs(xx)
+ endif
+!
+ if (iph.ne.0) then
+ if (omx.eq.R0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop loga2: ' &
+ ,'1-xx,iph=',omx,iph
+ rslt = C0P0
+ else
+ rslt = loga(xx,iph)/cmplx(omx,kind=kindc2)
+ endif
+ else
+ if (abs(omx).lt.thrs) then
+ rslt = cmplx(-R1P0-omx/2,kind=kindc2)
+ else
+ rslt = loga(xx,iph)/cmplx(omx,kind=kindc2)
+ endif
+ endif
+ end function
+!
+end module
+
+
+module avh_olo_logc
+!*******************************************************************
+! Returns log( |Re(xx)| + imag*Im(xx) ) + imag*pi*iph
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: logc
+ complex(kindc2) ,parameter :: ipi=CiP0*TWOPI/2
+contains
+!
+ function logc(xx) result(rslt)
+ type(qmplx_type) ,intent(in) :: xx
+ complex(kindc2) :: rslt
+ if (xx%c.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop logc: xx%c =',xx%c
+ rslt = C0P0
+ else
+ rslt = log( cmplx(abs(real(xx%c)),aimag(xx%c),kind=kindc2) ) &
+ + ipi*xx%p
+ endif
+ end function
+!
+end module
+
+
+module avh_olo_li2c
+!*******************************************************************
+! /1 ln(1-zz*t)
+! avh_olo_li2c = - | dt ----------
+! /0 t
+! with zz = 1 - ( |Re(xx)| + imag*Im(xx) )*exp(imag*pi*iph)
+! Examples:
+! In order to get the dilog of 1+imag use xx=1+imag, iph= 0
+! In order to get the dilog of 1-imag use xx=1-imag, iph= 0
+! In order to get the dilog of -1+imag use xx=1-imag, iph= 1
+! In order to get the dilog of -1-imag use xx=1+imag, iph=-1
+! Add multiples of 2 to iph in order to get the result on
+! different Riemann-sheets.
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_func
+ use avh_olo_bern
+ use avh_olo_li2a
+ implicit none
+ private
+ public :: init_li2c,li2c
+ complex(kindc2) ,parameter :: ipi=CiP0*TWOPI/2
+ complex(kindc2) ,parameter :: pi2o6=C1P0*TWOPI*TWOPI/24
+ integer :: nn=18
+ integer :: ndigits=0
+contains
+!
+ subroutine init_li2c(ndig)
+ integer ,intent(in) :: ndig
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ call init_li2a(ndigits)
+ call init_bern(ndigits)
+ if (ndigits.lt.24) then
+ nn = 18
+ else
+ nn = 36
+ endif
+ end subroutine
+
+ function li2c(xx) result(rslt)
+ type(qmplx_type) :: xx
+ complex(kindc2) :: rslt ,yy,lyy,loy,zz,z2
+ real(kindr2) :: rex,imx
+ integer :: ii,iyy
+ logical :: x_gt_1 , y_lt_h
+!
+ rex = real(xx%c)
+ imx = aimag(xx%c)
+!
+ if (imx.eq.R0P0) then
+ rslt = li2a(rex,xx%p)
+ else
+ rex = abs(rex)
+!
+ if (mod(xx%p,2).eq.0) then
+ yy = cmplx(rex,imx,kind=kindc2)
+ iyy = xx%p
+ else
+ yy = cmplx(-rex,-imx,kind=kindc2)
+! Notice that iyy=xx%p/2*2 does not deal correctly with the
+! situation when xx%p-xx%p/2*2 = sign(Im(xx%c)) . The following does:
+ iyy = xx%p + nint(sign(R1P0,imx))
+ endif
+!
+ x_gt_1 = (abs(xx%c).gt.R1P0)
+ if (x_gt_1) then
+ yy = C1P0/yy
+ iyy = -iyy
+ endif
+ lyy = log(yy)
+ loy = log(C1P0-yy)
+!
+ y_lt_h = (real(yy).lt.R5M1)
+ if (y_lt_h) then
+ zz = -loy
+ else
+ zz = -lyy
+ endif
+!
+ z2 = zz*zz
+ rslt = cbern(nn)
+ do ii=nn,4,-2
+ rslt = cbern(ii-2) + rslt*z2/(ii*(ii+1))
+ enddo
+ rslt = cbern(1) + rslt*zz/3
+ rslt = zz + rslt*z2/2
+!
+ if (y_lt_h) rslt = pi2o6 - rslt - loy*lyy
+!
+ rslt = rslt - loy*ipi*iyy
+!
+ if (x_gt_1) rslt = -rslt - (lyy + ipi*iyy)**2/2
+ endif
+ end function
+!
+end module
+
+
+module avh_olo_logc2
+!*******************************************************************
+! log(xx)/(1-xx)
+! with log(xx) = log( |Re(xx)| + imag*Im(xx) ) + imag*pi*iph
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: init_logc2,logc2
+ real(kindr2) :: thrs=epsilon(R1P0)
+ integer :: ndigits=0
+contains
+!
+ subroutine init_logc2(ndig)
+ integer ,intent(in) :: ndig
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ thrs = 10*thrs
+ end subroutine
+!
+ function logc2(xx) result(rslt)
+ use avh_olo_logc ,only : logc
+ type(qmplx_type) ,intent(in) :: xx
+ complex(kindc2) :: rslt ,omx
+ if (mod(xx%p,2).eq.0) then
+ omx = cmplx(1d0-abs(real(xx%c)),-aimag(xx%c),kind=kindc2)
+ else
+ omx = cmplx(1d0+abs(real(xx%c)), aimag(xx%c),kind=kindc2)
+ endif
+ if (xx%p.ne.0) then
+ if (omx.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop logc2: ' &
+ ,'1-xx%c,xx%p=',omx,xx%p
+ rslt = C0P0
+ else
+ rslt = logc(xx)/omx
+ endif
+ else
+ if (abs(omx).lt.thrs) then
+ rslt = -C1P0-omx/2
+ else
+ rslt = logc(xx)/omx
+ endif
+ endif
+ end function
+!
+end module
+
+
+module avh_olo_li2c2
+!*******************************************************************
+! avh_olo_li2c2 = ( li2(x1) - li2(x2) )/(x1%c-x2%c)
+!
+! /1 ln(1-zz*t)
+! where li2(x1) = - | dt ----------
+! /0 t
+! with zz = 1 - ( |Re(x1%c)| + imag*Im(x1%c) )*exp(imag*pi*x1%p)
+! and similarly for li2(x2)
+!*******************************************************************
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ use avh_olo_li2c
+ use avh_olo_logc2
+ implicit none
+ private
+ public :: init_li2c2,li2c2
+ complex(kindc2) ,parameter :: ipi=CiP0*TWOPI/2
+ real(kindr2) ,parameter :: thrs1=epsilon(R1P0)
+ real(kindr2) :: thrs=0.11_kindr2
+ integer :: nmax=12
+ integer :: ndigits=0
+contains
+!
+ subroutine init_li2c2(ndig)
+ integer ,intent(in) :: ndig
+ if (ndigits.eq.ndig) return ;ndigits=ndig
+ call init_logc2(ndigits)
+ call init_li2c(ndigits)
+ if (ndigits.lt.16) then
+ thrs = 0.11_kindr2 ! double precision
+ nmax = 12
+ elseif (ndigits.lt.24) then
+ thrs = 0.02_kindr2 ! guess
+ nmax = 12
+ else
+ thrs = 0.008_kindr2 ! quadruple precision
+ nmax = 12
+ endif
+ end subroutine
+!
+ function li2c2(x1,x2) result(rslt)
+ type(qmplx_type) ,intent(in) :: x1,x2
+ complex(kindc2) :: rslt
+ complex(kindc2) :: x1r,x2r,delta,xx,xr,omx,del,hh,ff(0:20),zz
+ integer :: ih,ii
+!
+ if (mod(x1%p,2).eq.0) then
+ x1r = cmplx( abs(real(x1%c)), aimag(x1%c),kind=kindc2)
+ else
+ x1r = cmplx(-abs(real(x1%c)),-aimag(x1%c),kind=kindc2)
+ endif
+ if (mod(x2%p,2).eq.0) then
+ x2r = cmplx( abs(real(x2%c)), aimag(x2%c),kind=kindc2)
+ else
+ x2r = cmplx(-abs(real(x2%c)),-aimag(x2%c),kind=kindc2)
+ endif
+ delta = x1r-x2r
+!
+ if (x1%p.ne.x2%p) then
+ if (delta.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop li2c2: ' &
+ ,'x1%p,x2%p,delta=',x1%p,x2%p,delta
+ rslt = C0P0
+ else
+ rslt = ( li2c(x1)-li2c(x2) )/delta
+ endif
+ else
+ if (abs(delta/x1%c).gt.thrs) then
+ rslt = ( li2c(x1)-li2c(x2) )/delta
+ else
+ xx = x1%c
+ xr = x1r
+ omx = C1P0-xr
+ del = delta
+ hh = C1P0-x2r
+ if (abs(hh).gt.abs(omx)) then
+ xx = x2%c
+ xr = x2r
+ omx = hh
+ del = -delta
+ endif
+ if (abs(omx).lt.thrs1) then
+ zz = -C1P0-omx/2-del/4
+ else
+ ih = x1%p - x1%p/2*2
+ ff(0) = logc2(directly(xx,ih))
+ hh = -C1P0
+ do ii=1,nmax
+ hh = -hh/xr
+ ff(ii) = ( hh/ii + ff(ii-1) )/omx
+ enddo
+ zz = ff(nmax)/(nmax+1)
+ do ii=nmax-1,0,-1
+ zz = ff(ii)/(ii+1) - zz*del
+ enddo
+ endif
+ ih = x1%p-ih
+ if (ih.ne.0) then
+ omx = C1P0-x1r
+ zz = zz - ih*ipi*logc2(qonv((C1P0-x2r)/omx))/omx
+ endif
+ rslt = zz
+ endif
+ endif
+ end function
+!
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_print.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_print.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_print.f90 (revision 119)
@@ -0,0 +1,79 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_print
+ use avh_olo_kinds
+ implicit none
+ private
+ public :: myprint,init_print
+!
+ integer ,parameter :: noverh=10 !maximally 6 decimals for exponent
+ integer :: ndigits=19
+ integer :: nefrmt=19+noverh
+!
+ interface myprint
+ module procedure printr,printc,printi
+ end interface
+!
+contains
+!
+ subroutine init_print( ndig )
+ integer ,intent(in) :: ndig
+ ndigits = ndig+ndig/4+1
+ nefrmt = ndigits+noverh
+ end subroutine
+!
+ function printc( zz ) result(rslt)
+ complex(kindc2) ,intent(in) :: zz
+ character(nefrmt*2+3) :: rslt
+ rslt = '('//trim(printr(real(zz))) &
+ //','//trim(printr(aimag(zz) )) &
+ //')'
+ rslt = adjustl(rslt)
+ end function
+!
+ function printr( xx ) result(rslt)
+ real(kindr2) ,intent(in) :: xx
+ character(nefrmt ) :: rslt
+ character(nefrmt+1) :: cc
+ character(10) :: aa,bb
+ write(aa,'(i10)') nefrmt+1 ;aa=adjustl(aa)
+ write(bb,'(i10)') ndigits ;bb=adjustl(bb)
+ aa = '(e'//trim(aa)//'.'//trim(bb)//')'
+ write(cc,aa) xx ;cc=adjustl(cc)
+ if (cc(1:2).eq.'-0') then ;rslt = '-'//cc(3:ndigits*2)
+ else ;rslt = ' '//cc(2:ndigits*2)
+ endif
+ end function
+!
+ function printi( ii ) result(rslt)
+ integer ,intent(in) :: ii
+ character(ndigits) :: rslt
+ character(ndigits) :: cc
+ character(10) :: aa
+ write(aa,'(i10)') ndigits ;aa=adjustl(aa)
+ aa = '(i'//trim(aa)//')'
+ write(cc,aa) ii ;cc=adjustl(cc)
+ if (cc(1:1).ne.'-') then ;rslt=' '//cc
+ else ;rslt=cc
+ endif
+ end function
+!
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_tri.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_tri.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_tri.f90 (revision 119)
@@ -0,0 +1,796 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_tri
+ use avh_olo_kinds
+ use avh_olo_units
+ use avh_olo_func
+ implicit none
+ private
+ public :: tria0,tria1,tria2,tria3,tria4,trif0,trif1,trif2,trif3 &
+ ,trif3HV &
+ ,permtable,casetable,base
+ complex(kindc2) ,parameter :: oieps=C1P0+CiP0*epsilon(R1P0)**2
+ integer ,parameter :: permtable(3,0:7)=reshape((/ &
+ 1,2,3 &! 0, 0 masses non-zero, no permutation
+ ,1,2,3 &! 1, 1 mass non-zero, no permutation
+ ,3,1,2 &! 2, 1 mass non-zero, 1 cyclic permutation
+ ,1,2,3 &! 3, 2 masses non-zero, no permutation
+ ,2,3,1 &! 4, 1 mass non-zero, 2 cyclic permutations
+ ,2,3,1 &! 5, 2 masses non-zero, 2 cyclic permutations
+ ,3,1,2 &! 6, 2 masses non-zero, 1 cyclic permutation
+ ,1,2,3 &! 7, 3 masses non-zero, no permutation
+ /) ,(/3,8/)) ! 0,1,2,3,4,5,6,7
+ integer ,parameter :: casetable(0:7)=(/0,1,1,2,1,2,2,3/)
+ integer ,parameter :: base(3)=(/4,2,1/)
+
+contains
+
+ subroutine tria4( rslt ,cpp,cm2,cm3 ,rmu2 )
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | ----------------------------------
+! i*pi^2 / q^2 [(q+k1)^2-m2] [(q+k1+k2)^2-m3]
+!
+! with k1^2=m2, k2^2=pp, (k1+k2)^2=m3.
+! m2,m3 should NOT be identically 0d0.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cm2,cm3,cpp
+ real(kindr2) ,intent(in) :: rmu2
+ type(qmplx_type) :: q23,qm3,q32
+ complex(kindc2) :: sm2,sm3,k23,r23,d23,cc
+!
+! write(*,*) 'MESSAGE from OneLOop tria4: you are calling me' !CALLINGME
+!
+ sm2 = mysqrt(cm2)
+ sm3 = mysqrt(cm3)
+ k23 = (cm2+cm3-cpp)/(sm2*sm3)
+ call rfun( r23,d23, k23 )
+ if (r23.eq.-C1P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop tria4: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+ q23 = qonv(r23,-1)
+ qm3 = qonv(cm3/rmu2,-1)
+ q32 = qonv(sm3)/qonv(sm2)
+!
+ rslt(2) = C0P0
+ cc = logc2(q23) * r23/(C1P0+r23)/(sm2*sm3)
+ rslt(1) = -cc
+ rslt(0) = cc*( logc(qm3) - logc(q23) ) &
+ - li2c2(q32*q23,q32/q23) / cm2 &
+ + li2c2(q23*q23,qonv(C1P0)) * r23/(sm2*sm3)
+ end subroutine
+
+
+ subroutine tria3( rslt ,cp2,cp3,cm3 ,rmu2 )
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | -----------------------------
+! i*pi^2 / q^2 (q+k1)^2 [(q+k1+k2)^2-m3]
+!
+! with p2=k2^2, p3=(k1+k2)^2.
+! mm should NOT be identically 0d0,
+! and p2 NOR p3 should be identical to mm.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp2,cp3,cm3
+ real(kindr2) ,intent(in) :: rmu2
+ type(qmplx_type) :: q13,q23,qm3,x1,x2
+ complex(kindc2) :: r13,r23
+!
+! write(*,*) 'MESSAGE from OneLOop tria3: you are calling me' !CALLINGME
+!
+ r13 = cm3-cp3
+ r23 = cm3-cp2
+ q13 = qonv(r13,-1)
+ q23 = qonv(r23,-1)
+ qm3 = qonv(cm3,-1)
+ x1 = q23/qm3
+ x2 = q13/qm3
+ rslt(2) = C0P0
+ rslt(1) = -logc2( q23/q13 )/r13
+ rslt(0) = -li2c2( x1,x2 )/cm3 &
+ - rslt(1)*( logc(x1*x2)+logc(qm3/rmu2) )
+ end subroutine
+
+
+ subroutine tria2( rslt ,cp3,cm3 ,rmu2 )
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | -----------------------------
+! i*pi^2 / q^2 (q+k1)^2 [(q+k1+k2)^2-m3]
+!
+! with k1^2 = 0 , k2^2 = m3 and (k1+k2)^2 = p3.
+! mm should NOT be identically 0d0,
+! and pp should NOT be identical to mm.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp3,cm3
+ real(kindr2) ,intent(in) :: rmu2
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/96
+ complex(kindc2) ,parameter :: half=C1P0/2
+ type(qmplx_type) :: q13,qm3,qxx
+ complex(kindc2) :: r13,logm,z2,z1,z0,cc
+!
+! write(*,*) 'MESSAGE from OneLOop tria2: you are calling me' !CALLINGME
+!
+ r13 = cm3-cp3
+ q13 = qonv(r13,-1)
+ qm3 = qonv(cm3,-1)
+ logm = logc( qm3/rmu2 )
+ qxx = qm3/q13
+ z2 = half
+ z1 = logc(qxx)
+ z0 = const + z1*z1/2 - li2c(qxx)
+ cc = -C1P0/r13
+ rslt(2) = cc*z2
+ rslt(1) = cc*(z1 - z2*logm)
+ rslt(0) = cc*(z0 + (z2*logm/2-z1)*logm)
+ end subroutine
+
+
+ subroutine tria1( rslt ,cm3 ,rmu2 )
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | -----------------------------
+! i*pi^2 / q^2 (q+k1)^2 [(q+k1+k2)^2-m3]
+!
+! with k1^2 = (k1+k2)^2 = m3.
+! mm should NOT be identically 0d0.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cm3
+ real(kindr2) ,intent(in) :: rmu2
+ complex(kindc2) :: zm
+!
+! write(*,*) 'MESSAGE from OneLOop tria1: you are calling me' !CALLINGME
+!
+ zm = C1P0/(2*cm3)
+ rslt(2) = C0P0
+ rslt(1) = -zm
+ rslt(0) = zm*( 2*C1P0 + logc(qonv(cm3/rmu2,-1)) )
+ end subroutine
+
+
+ subroutine tria0( rslt ,cp ,ap ,rmu2 )
+!*******************************************************************
+! calculates
+! C / d^(Dim)q
+! ------ | ------------------------
+! i*pi^2 / q^2 (q+k1)^2 (q+k1+k2)^2
+!
+! with Dim = 4-2*eps
+! C = pi^eps * mu^(2*eps) * exp(gamma_Euler*eps)
+!
+! input: p1 = k1^2, p2 = k2^2, p3 = k3^2
+! output: rslt(0) = eps^0 -coefficient
+! rslt(1) = eps^(-1)-coefficient
+! rslt(2) = eps^(-2)-coefficient
+!
+! If any of these numbers is IDENTICALLY 0d0, the corresponding
+! IR-singular case is returned.
+!*******************************************************************
+ use avh_olo_loga ,only: loga
+ use avh_olo_loga2 ,only: loga2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: cp(3)
+ real(kindr2) ,intent(in) :: ap(3),rmu2
+ real(kindr2) :: pp(3),rp1,rp2,rp3
+ complex(kindc2) ,parameter :: const=C1P0*TWOPI*TWOPI/48
+ complex(kindc2) :: log2,log3
+ integer :: icase,i1,i2,i3
+!
+ pp(1)=real(cp(1))
+ pp(2)=real(cp(2))
+ pp(3)=real(cp(3))
+!
+ icase = 0
+ if (ap(1).gt.R0P0) icase = icase + base(1)
+ if (ap(2).gt.R0P0) icase = icase + base(2)
+ if (ap(3).gt.R0P0) icase = icase + base(3)
+ rp1 = pp(permtable(1,icase))
+ rp2 = pp(permtable(2,icase))
+ rp3 = pp(permtable(3,icase))
+ icase = casetable( icase)
+!
+ i1=0 ;if (-rp1.lt.R0P0) i1=-1
+ i2=0 ;if (-rp2.lt.R0P0) i2=-1
+ i3=0 ;if (-rp3.lt.R0P0) i3=-1
+!
+ if (icase.eq.0) then
+! 0 masses non-zero
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop tria0: ' &
+ ,'all external masses equal zero, returning 0'
+ rslt = C0P0
+ elseif (icase.eq.1) then
+! 1 mass non-zero
+! write(*,*) 'MESSAGE from OneLOop tria0 1: you are calling me' !CALLINGME
+ log3 = loga( -rp3/rmu2 , i3 )
+ rslt(2) = cmplx( R1P0/rp3 ,kind=kindc2 )
+ rslt(1) = -log3/rp3
+ rslt(0) = ( log3**2/2 - const )/rp3
+ elseif (icase.eq.2) then
+! 2 masses non-zero
+! write(*,*) 'MESSAGE from OneLOop tria0 2: you are calling me' !CALLINGME
+ log2 = loga( -rp2/rmu2 ,i2 )
+ log3 = loga( -rp3/rmu2 ,i3 )
+ rslt(2) = C0P0
+ rslt(1) = loga2( rp3/rp2 ,i3-i2 )/rp2
+ rslt(0) = -rslt(1)*(log3+log2)/2
+ elseif (icase.eq.3) then
+! 3 masses non-zero
+ call trif0( rslt ,cp(1),cp(2),cp(3) )
+ endif
+ end subroutine
+
+
+ subroutine trif0( rslt ,p1,p2,p3 )
+!*******************************************************************
+! Finite 1-loop scalar 3-point function with all internal masses
+! equal zero. Obtained from the formulas for 4-point functions in
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+! by sending one internal mass to infinity.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1,p2,p3
+ type(qmplx_type) :: q23,q24,q34,qx1,qx2
+ complex(kindc2) :: r23,r24,r34,aa,bb,cc,dd,x1,x2
+ real(kindr2) :: hh
+!
+! write(*,*) 'MESSAGE from OneLOop trif0: you are calling me' !CALLINGME
+!
+ r23 = -p1
+ r24 = -p3
+ r34 = -p2
+!
+ aa = r34*r24
+ bb = r24 + r34 - r23
+ cc = C1P0
+ hh = real(r23)
+ dd = mysqrt( bb*bb - 4*aa*cc , -real(aa)*hh )
+ call solabc( x1,x2,dd ,aa,bb,cc ,1 )
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1, hh)
+ qx2 = qonv(x2,-hh)
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+!
+ rslt = C0P0
+!
+ rslt(0) = li2c2( qx1*q34 ,qx2*q34 )*r34 &
+ + li2c2( qx1*q24 ,qx2*q24 )*r24 &
+ - logc2( qx1/qx2 )*logc( qx1*qx2 )/(x2*2) &
+ - logc2( qx1/qx2 )*logc( q23 )/x2
+!
+ rslt(0) = rslt(0)/aa
+ end subroutine
+
+
+ subroutine trif1( rslt ,p1i,p2i,p3i ,m3i )
+!*******************************************************************
+! Finite 1-loop scalar 3-point function with one internal masses
+! non-zero. Obtained from the formulas for 4-point functions in
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+! by sending one internal mass to infinity.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1i,p2i,p3i ,m3i
+ type(qmplx_type) :: q23,q24,q34,qm4,qx1,qx2,qss
+ complex(kindc2) :: p2,p3,p4,p12,p23,m4,sm2,sm3,sm4 &
+ ,aa,bb,cc,dd,x1,x2,r23,r24,r34
+ real(kindr2) :: mhh
+ complex(kindc2) ,parameter :: oieps=C1P0+CiP0*epsilon(R1P0)**2
+!
+! write(*,*) 'MESSAGE from OneLOop trif1: you are calling me' !CALLINGME
+!
+! p1 = nul
+ p2 = p1i
+ p3 = p2i
+ p4 = p3i
+ p12 = p1i
+ p23 = p3i
+! m1 = infinite
+! m2 = m1i = C0P0
+! m3 = m2i = C0P0
+ m4 = m3i
+!
+ sm4 = mysqrt(m4)
+ mhh = abs(sm4)
+ sm3 = cmplx(mhh,kind=kindc2)
+ sm2 = sm3
+!
+ r24 = C0P0
+ r34 = C0P0
+ r23 = ( -p2 *oieps )/(sm2*sm3)
+ if (m4.ne.p23) r24 = ( m4-p23*oieps )/(sm2*sm4)
+ if (m4.ne.p3 ) r34 = ( m4-p3 *oieps )/(sm3*sm4)
+!
+ aa = r34*r24 - r23
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop trif1: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = r24/sm3 + r34/sm2 - r23/sm4
+ cc = C1P0/(sm2*sm3)
+! hh = real(r23)
+! dd = mysqrt( bb*bb - 4*aa*cc , -real(aa)*hh )
+ call solabc( x1,x2,dd ,aa,bb,cc ,0 )
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 ,1) ! x1 SHOULD HAVE im. part
+ qx2 = qonv(x2 ,1) ! x2 SHOULD HAVE im. part
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+ qm4 = qonv(sm4,-1)
+!
+ rslt = C0P0
+!
+ rslt(0) = -logc2( qx1/qx2 )*logc( qx1*qx2/(qm4*qm4) )/(x2*2) &
+ -li2c2( qx1*qm4 ,qx2*qm4 )*sm4
+!
+ if (r34.ne.C0P0) then
+ qss = q34*mhh
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r34*sm3
+ endif
+!
+ if (r24.ne.C0P0) then
+ qss = q24*mhh
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r24*sm2
+ endif
+!
+ rslt(0) = rslt(0) - logc2( qx1/qx2 )*logc( q23*(mhh*mhh) )/x2
+!
+ rslt(0) = rslt(0)/(aa*sm2*sm3*sm4)
+ end subroutine
+
+
+ subroutine trif2( rslt ,p1i,p2i,p3i ,m2i,m3i )
+!*******************************************************************
+! Finite 1-loop scalar 3-point function with two internal masses
+! non-zero. Obtained from the formulas for 4-point functions in
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+! by sending one internal mass to infinity.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1i,p2i,p3i ,m2i,m3i
+ type(qmplx_type) :: q23,q34,q24,qm2,qm3,qm4,qx1,qx2,qss,qy1,qy2
+ complex(kindc2) :: p2,p3,p23,m2,m4,sm2,sm3,sm4,aa,bb,cc,dd,x1,x2 &
+ ,r23,k24,r34,r24,d24
+ complex(kindc2) ,parameter :: oieps=C1P0+CiP0*epsilon(R1P0)**2
+!
+! write(*,*) 'MESSAGE from OneLOop trif2: you are calling me' !CALLINGME
+!
+! p1 = nul
+ p2 = p3i
+ p3 = p1i
+! p4 = p2i
+! p12 = p3i
+ p23 = p2i
+! m1 = infinite
+ m2 = m3i
+! m3 = m1i = C0P0
+ m4 = m2i
+!
+! sm1 = infinite
+ sm2 = mysqrt(m2)
+ sm3 = cmplx(abs(sm2),kind=kindc2) !mysqrt(m3)
+ sm4 = mysqrt(m4)
+!
+ r23 = C0P0
+ k24 = C0P0
+ r34 = C0P0
+ if (m2 .ne.p2 ) r23 = ( m2-p2 *oieps )/(sm2*sm3) ! p2
+ if (m2+m4.ne.p23) k24 = ( m2+m4-p23*oieps )/(sm2*sm4) ! p2+p3
+ if (m4 .ne.p3 ) r34 = ( m4-p3 *oieps )/(sm3*sm4) ! p3
+!
+ call rfun( r24,d24 ,k24 )
+!
+ aa = r34/r24 - r23
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop trif2: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = -d24/sm3 + r34/sm2 - r23/sm4
+ cc = (sm4/sm2 - r24)/(sm3*sm4)
+! hh = dreal(r23 - r24*r34)
+! dd = mysqrt( bb*bb - 4*aa*cc , -dreal(aa)*hh )
+ call solabc(x1,x2,dd ,aa,bb,cc ,0)
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 ,1 ) ! x1 SHOULD HAVE im. part
+ qx2 = qonv(x2 ,1 ) ! x2 SHOULD HAVE im. part
+ q23 = qonv(r23,-1)
+ q24 = qonv(r24,-1)
+ q34 = qonv(r34,-1)
+ qm2 = qonv(sm2,-1)
+ qm3 = qonv(sm3,-1)
+ qm4 = qonv(sm4,-1)
+!
+ rslt = C0P0
+!
+ qy1 = qx1/q24
+ qy2 = qx2/q24
+!
+ rslt(0) = li2c2( qy1*qm2 ,qy2*qm2 )/r24*sm2
+!
+ if (x2.ne.C0P0) then ! better to put a threshold on cc
+ rslt(0) = rslt(0) + ( logc2( qy1/qy2 )*logc( qy1*qy2/(qm2*qm2) ) &
+ -logc2( qx1/qx2 )*logc( qx1*qx2/(qm4*qm4) ) )/(x2*2)
+ endif
+!
+ rslt(0) = rslt(0) - li2c2( qx1*qm4 ,qx2*qm4 )*sm4
+!
+ if (r23.ne.C0P0) then
+ qss = q23*qm3/q24
+ rslt(0) = rslt(0) - li2c2( qx1*qss ,qx2*qss )*r23*sm3/r24
+ endif
+!
+ if (r34.ne.C0P0) then
+ qss = q34*qm3
+ rslt(0) = rslt(0) + li2c2( qx1*qss ,qx2*qss )*r34*sm3
+ endif
+!
+ rslt(0) = rslt(0)/(aa*sm2*sm3*sm4)
+ end subroutine
+
+
+ subroutine trif3( rslt ,p1i,p2i,p3i ,m1i,m2i,m3i )
+!*******************************************************************
+! Finite 1-loop scalar 3-point function with all internal masses
+! non-zero. Obtained from the formulas for 4-point functions in
+! A. Denner, U. Nierste, R. Scharf, Nucl.Phys.B367(1991)637-656
+! by sending one internal mass to infinity.
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_logc2 ,only: logc2
+ use avh_olo_li2c2 ,only: li2c2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: p1i,p2i,p3i,m1i,m2i,m3i
+ type(qmplx_type) :: q12,q13,q23,qm1,qm2,qm3,qx1,qx2,qz1,qz2,qtt
+ complex(kindc2) :: p1,p2,p3,m1,m2,m3,sm1,sm2,sm3,aa,bb,cc,dd,x1,x2 &
+ ,k12,k13,k23,r12,r13,r23,d12,d13,d23
+ real(kindr2) :: h1,h2,h3
+ complex(kindc2) ,parameter :: oieps=C1P0+CiP0*epsilon(R1P0)**2
+!
+! write(*,*) 'MESSAGE from OneLOop trif3: you are calling me' !CALLINGME
+!
+ h1 = -aimag(m1i)
+ h2 = -aimag(m2i)
+ h3 = -aimag(m3i)
+ if (h2.ge.h1.and.h2.ge.h3) then
+ p1=p3i ;p2=p1i ;p3=p2i ;m1=m3i ;m2=m1i ;m3=m2i
+ else
+ p1=p1i ;p2=p2i ;p3=p3i ;m1=m1i ;m2=m2i ;m3=m3i
+ endif
+!
+ sm1 = mysqrt(m1)
+ sm2 = mysqrt(m2)
+ sm3 = mysqrt(m3)
+!
+ k12 = C0P0
+ k13 = C0P0
+ k23 = C0P0
+ if (m1+m2.ne.p1) k12 = ( m1+m2-p1*oieps )/(sm1*sm2) ! p1
+ if (m1+m3.ne.p3) k13 = ( m1+m3-p3*oieps )/(sm1*sm3) ! p1+p2 => p12
+ if (m2+m3.ne.p2) k23 = ( m2+m3-p2*oieps )/(sm2*sm3) ! p2
+!
+ call rfun( r12,d12 ,k12 )
+ call rfun( r13,d13 ,k13 )
+ call rfun( r23,d23 ,k23 )
+!
+ aa = sm2/sm3 - k23 + r13*(k12 - sm2/sm1)
+!
+ if (aa.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop trif3: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+!
+ bb = d13/sm2 + k12/sm3 - k23/sm1
+ cc = ( sm1/sm3 - C1P0/r13 )/(sm1*sm2)
+! hh = dreal( (r13-sm1/sm3)/(sm1*sm2) )
+! dd = mysqrt( bb*bb - 4*aa*cc , -dreal(aa)*hh )
+ call solabc( x1,x2,dd ,aa,bb,cc ,0 )
+ x1 = -x1
+ x2 = -x2
+!
+ qx1 = qonv(x1 ,1) ! x1 SHOULD HAVE im. part
+ qx2 = qonv(x2 ,1) ! x2 SHOULD HAVE im. part
+ q12 = qonv(r12,-1)
+ q13 = qonv(r13,-1)
+ q23 = qonv(r23,-1)
+ qm1 = qonv(sm1,-1)
+ qm2 = qonv(sm2,-1)
+ qm3 = qonv(sm3,-1)
+!
+ rslt = C0P0
+!
+ qz1 = qx1*qm2
+ qz2 = qx2*qm2
+ rslt(0) = rslt(0) + ( li2c2( qz1*q12 ,qz2*q12 )*r12 &
+ +li2c2( qz1/q12 ,qz2/q12 )/r12 )*sm2
+ qtt = q13*qm2
+ qz1 = qx1*qtt
+ qz2 = qx2*qtt
+ rslt(0) = rslt(0) - ( li2c2( qz1*q23 ,qz2*q23 )*r23 &
+ +li2c2( qz1/q23 ,qz2/q23 )/r23 )*r13*sm2
+ qz1 = qx1*q13
+ qz2 = qx2*q13
+ rslt(0) = rslt(0) + li2c2( qz1*qm3 ,qz2*qm3 )*r13*sm3 &
+ - li2c2( qx1*qm1 ,qx2*qm1 )*sm1
+ if (x2.ne.C0P0) then
+ rslt(0) = rslt(0) + ( logc2( qz1/qz2 )*logc( qz1*qz2/(qm3*qm3) ) &
+ -logc2( qx1/qx2 )*logc( qx1*qx2/(qm1*qm1) ) )/(x2*2)
+ endif
+!
+ rslt(0) = rslt(0)/(aa*sm1*sm2*sm3)
+ end subroutine
+
+
+ subroutine trif3HV( rslt ,pp,mm ,ap ,smax )
+!*******************************************************************
+! Finite 1-loop scalar 3-point function with all internal masses
+! non-zero. Based on the fomula of 't Hooft & Veltman
+!*******************************************************************
+ use avh_olo_logc ,only: logc
+ use avh_olo_li2c ,only: li2c
+ use avh_olo_logc2 ,only: logc2
+ complex(kindc2) ,intent(out) :: rslt(0:2)
+ complex(kindc2) ,intent(in) :: pp(3),mm(3)
+ real(kindr2) ,intent(in) :: ap(3),smax
+ complex(kindc2) :: p1,p2,p3,m1,m2,m3,slam,yy
+ complex(kindc2) :: sm1,sm2,sm3,sp1,sp2
+ type(qmplx_type) :: qm1,qm2,qm3
+ real(kindr2) :: a12,a23,a31,thrs,a1,a2,a3
+ real(kindc2) ,parameter :: eps1=epsilon(R1P0),eps2=eps1*eps1
+ real(kindc2) ,parameter :: small=eps1*100
+ complex(kindc2) ,parameter :: ieps2=CiP0*eps2
+!
+! write(*,*) 'MESSAGE from OneLOop trif3HV: you are calling me' !CALLINGME
+!
+! Order squared momenta, first one smallest
+ if (ap(1).le.ap(2).and.ap(1).le.ap(3)) then
+ if (ap(2).le.ap(3)) then
+ a1=ap(1) ;a2=ap(2) ;a3=ap(3)
+ p1=pp(1) ;p2=pp(2) ;p3=pp(3)
+ m1=mm(1) ;m2=mm(2) ;m3=mm(3)
+ else
+ a1=ap(1) ;a2=ap(3) ;a3=ap(2)
+ p1=pp(1) ;p2=pp(3) ;p3=pp(2)
+ m1=mm(2) ;m2=mm(1) ;m3=mm(3)
+ endif
+ elseif (ap(2).le.ap(3).and.ap(2).le.ap(1)) then
+ if (ap(3).le.ap(1)) then
+ a1=ap(2) ;a2=ap(3) ;a3=ap(1)
+ p1=pp(2) ;p2=pp(3) ;p3=pp(1)
+ m1=mm(2) ;m2=mm(3) ;m3=mm(1)
+ else
+ a1=ap(2) ;a2=ap(1) ;a3=ap(3)
+ p1=pp(2) ;p2=pp(1) ;p3=pp(3)
+ m1=mm(3) ;m2=mm(2) ;m3=mm(1)
+ endif
+ else
+ if (ap(1).le.ap(2)) then
+ a1=ap(3) ;a2=ap(1) ;a3=ap(2)
+ p1=pp(3) ;p2=pp(1) ;p3=pp(2)
+ m1=mm(3) ;m2=mm(1) ;m3=mm(2)
+ else
+ a1=ap(3) ;a2=ap(2) ;a3=ap(1)
+ p1=pp(3) ;p2=pp(2) ;p3=pp(1)
+ m1=mm(1) ;m2=mm(3) ;m3=mm(2)
+ endif
+ endif
+!
+! Need to cut out negligible squared momenta
+ thrs = smax*small
+!
+! Add infinitesimal imaginary parts to masses
+ m1=m1-abs(real(m1))*ieps2 ;m2=m2-abs(real(m2))*ieps2 ;m3=m3-abs(real(m3))*ieps2
+!
+ if (a1.gt.thrs) then ! 3 non-zero squared momenta
+ a1=sign(R1P0,real(p1)) ;a2=sign(R1P0,real(p2)) ;a3=sign(R1P0,real(p3))
+ if (a1.ne.a2) then ;slam=(p3-p1-p2)**2-4*p1*p2
+ elseif (a2.ne.a3) then ;slam=(p1-p2-p3)**2-4*p2*p3
+ elseif (a3.ne.a1) then ;slam=(p2-p3-p1)**2-4*p3*p1
+ else
+ sp1=mysqrt(p1,1) ;sp2=mysqrt(p2,1)
+ slam=(p3-(sp1+sp2)**2)*(p3-(sp1-sp2)**2)
+ endif
+ if (slam.eq.C0P0) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop trif3HV: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+ slam = mysqrt( slam ,1 )
+ sm1=mysqrt(m1,-1) ;sm2=mysqrt(m2,-1) ;sm3=mysqrt(m3,-1)
+ rslt = C0P0
+ rslt(0) = s3fun( p1,sm1,sm2 , (m2-m3)+p2 ,p3-p1-p2 ,p2 ,slam ) &
+ - s3fun( p3,sm1,sm3 ,-(m1-m2)+p3-p2 ,p2-p1-p3 ,p1 ,slam ) &
+ + s3fun( p2,sm2,sm3 ,-(m1-m2)+p3-p2 ,p1+p2-p3 ,p1 ,slam )
+ rslt(0) = -rslt(0)/slam
+!
+ elseif (a2.gt.thrs) then ! 2 non-zero squared momenta
+ if (p2.eq.p3) then
+ if (eunit.gt.0) write(eunit,*) 'ERROR in OneLOop trif3HV: ' &
+ ,'threshold singularity, returning 0'
+ rslt = C0P0
+ return
+ endif
+ sm1=mysqrt(m1,-1) ;sm2=mysqrt(m2,-1) ;sm3=mysqrt(m3,-1)
+ yy = ( (m1-m2)-p3+p2 )/( p2-p3 )
+ rslt = C0P0
+ rslt(0) = s3fun( p3,sm1,sm3 ,yy ) &
+ - s3fun( p2,sm2,sm3 ,yy )
+ rslt(0) = rslt(0)/(p2-p3)
+!
+ elseif (a3.gt.thrs) then ! 1 non-zero squared momentum
+ sm1=mysqrt(m1,-1) ;sm3=mysqrt(m3,-1)
+ rslt = C0P0
+ yy = -( (m1-m2)-p3 )/p3
+ rslt(0) = s3fun( p3,sm1,sm3 ,yy ) &
+ - s2fun( m2-m3 ,m3 ,yy )
+ rslt(0) = -rslt(0)/p3
+!
+ else ! all squared momenta zero
+ rslt = C0P0
+ a12=abs(m1-m2) ;a23=abs(m2-m3) ;a31=abs(m3-m1)
+ if (a12.ge.a23.and.a12.ge.a31) then
+ if (a12.eq.R0P0) then ;rslt(0)=-C1P0/(2*m3) ;else
+ qm1=qonv(m1) ;qm2=qonv(m2) ;qm3=qonv(m3)
+ rslt(0) = ( logc2(qm3/qm1) - logc2(qm3/qm2) )/(m1-m2)
+ endif
+ elseif (a23.ge.a12.and.a23.ge.a31) then
+ if (a23.eq.R0P0) then ;rslt(0)=-C1P0/(2*m1) ;else
+ qm1=qonv(m1) ;qm2=qonv(m2) ;qm3=qonv(m3)
+ rslt(0) = ( logc2(qm1/qm2) - logc2(qm1/qm3) )/(m2-m3)
+ endif
+ else
+ if (a31.eq.R0P0) then ;rslt(0)=-C1P0/(2*m2) ;else
+ qm1=qonv(m1) ;qm2=qonv(m2) ;qm3=qonv(m3)
+ rslt(0) = ( logc2(qm2/qm3) - logc2(qm2/qm1) )/(m3-m1)
+ endif
+ endif
+ endif
+!
+ contains
+!
+ function s3fun( aa,s1,s2 ,t1,t2,t3,t4 ) result(rslt)
+!***************************************************************
+! int( ( ln(a*y^2+b*y+c) - ln(a*y0^2+b*y0+c) )/(y-y0) ,y=0..1 )
+! with b=s1^2-s2^2-aa and c=s2^2
+! and with y0 in terms of t1,t2,t3,t4 defined at the "present"
+! function below.
+! t4 should be sqrt(lambda(aa,t2,t3))
+!***************************************************************
+ complex(kindc2) ,intent(in) :: aa,s1,s2,t1
+ complex(kindc2),optional,intent(in) :: t2,t3
+ complex(kindc2),optional,intent(inout) :: t4
+ complex(kindc2) :: rslt ,cc,bb,dd,y0,y1,y2,zz,hh,alpha
+ real(kindr2) :: rez,arez,aimz
+ type(qmplx_type) :: q1,q2
+ real(kindr2) ,parameter :: lower=eps1/100,upper=eps1*100
+!
+ bb = (s1+s2)*(s1-s2)-aa
+ cc = s2*s2
+ dd = (aa-(s1+s2)**2)*(aa-(s1-s2)**2)
+ dd = sqrt( dd )!+ sign(abs(dd),real(aa))*ieps2 )
+ call solabc( y1,y2 ,dd ,aa,bb,cc ,1 )
+!
+ if (present(t4)) then
+ call solabc( alpha,hh ,t4 ,aa,t2,t3 ,1 )
+ y0 = -(t1+bb*alpha)/t4
+ else
+ y0 = t1
+ endif
+!
+ q1 = qonv(y0-y1)
+ q2 = qonv(y0-y2)
+ rslt = li2c(qonv(-y1)/q1) - li2c(qonv(C1P0-y1)/q1) &
+ + li2c(qonv(-y2)/q2) - li2c(qonv(C1P0-y2)/q2)
+! Take some care about the imaginary part of a*y0^2+b*y0+c=a*(y0-y1)*(y0-y2)
+ zz = y0*(aa*y0+bb)
+ rez=real(zz) ;arez=abs(rez) ;aimz=abs(aimag(zz))
+ if (arez*lower.le.aimz.and.aimz.le.arez*upper) then
+! Here, the value of Imz is just numerical noise due to cancellations.
+! Realize that |Imz|~eps2 indicates there were no such cancellations,
+! so the lower limit is needed in in the if-statement!
+ zz = (rez + cc)/aa
+ else
+ zz = (zz + cc)/aa
+ endif
+ hh = eta3(-y1,-y2,cc/aa) - eta3(y0-y1,y0-y2,zz)
+ if (real(aa).lt.R0P0.and.aimag(zz).lt.R0P0) hh = hh - TWOPI*CiP0
+ if (hh.ne.C0P0) rslt = rslt + hh*logc(qonv((y0-C1P0)/y0,1))
+! write(*,*) 'y0',y0 !DEBUG
+! write(*,*) 'y1',y1 !DEBUG
+! write(*,*) 'y2',y2 !DEBUG
+! write(*,*) 'zz',(y0-y1)*(y0-y2),aimag(cc/aa) !DEBUG
+! write(*,*) 'OLO E',aimag(-y1),aimag(-y1),aimag(cc/aa),(eta3(-y1,-y2,cc/aa).ne.C0P0) !DEBUG
+! write(*,*) 'OLO F',aimag(y0-y1),aimag(y0-y1),aimag(zz),(eta3(y0-y1,y0-y2,zz).ne.C0P0) !DEBUG
+! write(*,*) 'OLO G',real(aa),aimag(zz),(real(aa).lt.R0P0.and.aimag(zz).lt.R0P0) !DEBUG
+!
+ end function
+!
+ function s2fun( aa,bb ,y0 ) result(rslt)
+!**************************************************
+! int( ( ln(a*y+b) - ln(a*y0+b) )/(y-y0) ,y=0..1 )
+!**************************************************
+ complex(kindc2) ,intent(in) :: aa,bb,y0
+ complex(kindc2) :: rslt ,y1,hh
+ type(qmplx_type) :: q1
+ y1 = -bb/aa
+ q1 = qonv(y0-y1)
+ rslt = li2c(qonv(-y1,-1)/q1) - li2c(qonv(C1P0-y1,-1)/q1)
+! aa may have imaginary part, so theta(-aa)*theta(-Im(y0-y1)) is not
+! sufficient and need the following:
+ hh = eta5( aa ,-y1,bb ,y0-y1,aa*(y0-y1) )
+ if (hh.ne.C0P0) rslt = rslt + hh*logc(qonv((y0-C1P0)/y0,1))
+! write(*,*) 'OLO s2fun aa',aa !DEBUG
+! write(*,*) 'OLO s2fun bb',bb !DEBUG
+! write(*,*) 'OLO s2fun y0',y0 !DEBUG
+! write(*,*) 'OLO s2fun y1',y1 !DEBUG
+ end function
+!
+ end subroutine
+
+
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_units.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_units.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_units.f90 (revision 119)
@@ -0,0 +1,49 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+
+
+module avh_olo_units
+ implicit none
+ integer :: eunit=6 !PROTECTED
+ integer :: wunit=6 !PROTECTED
+ integer :: munit=6 !PROTECTED
+ integer :: punit=0 !PROTECTED ! print all
+
+ ! protected :: eunit, wunit, munit, punit
+contains
+ subroutine set_unit( message ,val )
+!***********************************************************************
+! message is intended to be one of the following:
+! 'printall', 'message' ,'warning' ,'error'
+!***********************************************************************
+ character(*) ,intent(in) :: message
+ integer ,intent(in) :: val
+ if (.false.) then
+ elseif (message(1:8).eq.'printall') then ;punit=val
+ elseif (message(1:7).eq.'message' ) then ;munit=val
+ elseif (message(1:7).eq.'warning' ) then ;wunit=val
+ elseif (message(1:5).eq.'error' ) then ;eunit=val
+ else
+ eunit=val
+ wunit=val
+ munit=val
+ punit=0
+ endif
+ end subroutine
+end module
Index: 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_a0_a.h90
===================================================================
--- 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_a0_a.h90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/avh_olo-2.2.1/avh_olo_a0_a.h90 (revision 119)
@@ -0,0 +1,23 @@
+!!
+!! Copyright (C) 2011 Andreas van Hameren.
+!!
+!! This file is part of OneLOop-2.2.1.
+!!
+!! OneLOop-2.2.1 is free software: you can redistribute it and/or modify
+!! it under the terms of the GNU General Public License as published by
+!! the Free Software Foundation, either version 3 of the License, or
+!! (at your option) any later version.
+!!
+!! OneLOop-2.2.1 is distributed in the hope that it will be useful,
+!! but WITHOUT ANY WARRANTY; without even the implied warranty of
+!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+!! GNU General Public License for more details.
+!!
+!! You should have received a copy of the GNU General Public License
+!! along with OneLOop-2.2.1. If not, see <http://www.gnu.org/licenses/>.
+!!
+ complex(kindc2) :: ss
+ real(kindr2) :: am,thrs,mulocal,mulocal2
+ character(25+99) ,parameter :: warning=&
+ 'WARNING from OneLOop a0: '//warnonshell
+ if (intro) call hello
Index: 95/branches/golem95_without_olo_cmake/AUTHORS
===================================================================
Property changes on: 95/branches/golem95_without_olo_cmake/AUTHORS
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/ChangeLog
===================================================================
--- 95/branches/golem95_without_olo_cmake/ChangeLog (revision 0)
+++ 95/branches/golem95_without_olo_cmake/ChangeLog (revision 119)
@@ -0,0 +1,115 @@
+5.8.11: bug corrected in generic_function_4p.f90 (pointed out by Ioan Wigmore):
+ QCDLoop box 7 also needs to be called if the massive on-shell leg is p4 instead of p3
+
+
+28.1.11: underscores eliminated in the interface routines
+ init_golem95, prepare_s_matrix, exit_golem95
+ to facilitate combination with programs which are not in fortran90
+
+20.01.11: Option to link LoopTools added
+
+ without LoopTools linked golem95 still contains all
+ massive integrals (also for complex masses),
+ partly called from avh_olo
+
+ with LoopTools linked and "withlt=.true." defined in
+ the file where the integrals are called (or in parametre.f90)
+ golem95 calls C0 and D0 from
+ LoopTools instead of avh_olo
+
+*************************************************************************
+22.11.10: New Changes to the Complex Version
+
+
+Major Changes:
+
+There are now 3 macro functions. These should make the user interface simpler.
+
+init_golem95
+prepare_s_matrix
+exit_golem95
+
+init_golem95(dim,opt_set):
+
+This subroutine calls allocation_s(dim) and initializes the caching system.
+A pointer s_mat is associated with s_mat_c.
+The user can fill s_mat or s_mat_c
+A switch to the real branch of the library is made in prepare_s_matrix, if
+the user-defined s matrix consists of real values only.
+The parameter rmass_or_cmass_par is now for internal use only.
+A optional set can be given to number the propagators.
+The default is (/1,...,dim/). set_ref and b_ref are set accordingly.
+
+prepare_s_matrix():
+
+This routine creates the global object s_mat_p,
+determines whether s_mat consists only of real values
+and sets rmass_or_cmass_par accordingly.
+init_inv is called as well as reset_cache.
+
+exit_golem95():
+
+deallocates all arrays, nullifies all pointers and clears the cache.
+
+
+A typical use of the library is then:
+
+
+call init_golem(dim)
+
+...fill s_mat...
+
+call prepare_s_matrix()
+
+... ask for form factors ...
+
+call exit_golem95()
+
+
+This should make it more user-friendly now.
+Note that the parameter rmass_or_cmass_par should not be used anymore and
+that s_mat_r is a provate object now.
+
+Other Changes:
+
+--------------
+cut_s(s,m1,m2)
+cut_s(s,m)
+cut_s(s)
+
+I added a function cut_s (in equal.f90).
+This function can be called for momenta s and associated masses.
+The function sets s equal to zero, if abs(s) is smaller than cut_s_abs
+or the ratio abs(s/Sum(M)) is smaller than cut_s_over_m. These parameters
+are set in parametre.f90.
+The use of this function gives a better stability to the evaulations of
+3pt and 4pt functions.
+
+--------------
+inverse_s:
+
+I changed the notion of the error from the greville method. It now only finds the max_value for (A*A+ - 1) as is the case in the gauss method.
+(A*A+*A - A) gives a different normalization, which makes it hard to compare it to the gauss-error.
+Furthermore, in case of a failure of the gauss-method, the inverse matrix with the smaller error is now chosen.
+
+--------------
+- fixed big in generic_function_4p
+- added warning for masses with positive imaginary part
+- init_inv can now be called with 1 to 6 dimension. info is printed if dim <=3
+- coupure_1m_2mi is now set in parametre.f90
+- reset the tab_erreurs after a call to catch_exception in sortie_erreur.
+- small cosmetics in generic_function_2p
+- the call to cut_s is implemented in generic_function_234pt
+
+
+*********************************************************************************************************************
+
+16.07.2010: new version including all types of massive integrals
+ internal call to avh_olo (A. van Hameren et al, arXiv:0903.4665 [hep-ph])
+ for C0 and D0, included in the package.
+ no link to LoopTools needed
+19.07.2010: thanks to Tobias: bug in permutation of triangle labels
+ in generic_function_3p.f90 corrected, lines 394,407,443
+
+20.7.2010: thanks to Mark: found trouble in Box QL10 in the limit s4->0, s2=s3=m^2
+ limit now implemented explicitly in function_4p_ql10.f90
Property changes on: 95/branches/golem95_without_olo_cmake/ChangeLog
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/golem95.pc.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/golem95.pc.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/golem95.pc.in (revision 119)
@@ -0,0 +1,15 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/@PACKAGE@
+
+Name: golem95
+Version: @VERSION@
+Description: GOLEM95: General One-Loop Evaluator for Matrix elements.
+ Golem95 is a form factor library for one-loop tensor
+ integrals.
+URL: http://lappweb.in2p3.fr/lapth/Golem/golem95.html
+
+Libs: -L${libdir} -l@GENERIC_LIBRARY_NAME@
+Libs.private: @LIBLOOPTOOLS@
+Cflags: -I${includedir}
Property changes on: 95/branches/golem95_without_olo_cmake/golem95.pc.in
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.in (revision 119)
@@ -0,0 +1,535 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/numerical
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_numerical_la_LIBADD =
+am_libgolem95_numerical_la_OBJECTS = \
+ libgolem95_numerical_la-mod_adapt_gauss.lo \
+ libgolem95_numerical_la-mod_numeric.lo
+libgolem95_numerical_la_OBJECTS = \
+ $(am_libgolem95_numerical_la_OBJECTS)
+libgolem95_numerical_la_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_numerical_la_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_numerical_la_SOURCES)
+DIST_SOURCES = $(libgolem95_numerical_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_numerical.la
+AM_FCFLAGS = -I$(top_builddir)/src/module
+libgolem95_numerical_la_SOURCES = mod_adapt_gauss.f90 mod_numeric.f90
+libgolem95_numerical_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = adapt_gauss.mod numerical_evaluation.mod
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/numerical/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/numerical/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_numerical.la: $(libgolem95_numerical_la_OBJECTS) $(libgolem95_numerical_la_DEPENDENCIES)
+ $(libgolem95_numerical_la_LINK) $(libgolem95_numerical_la_OBJECTS) $(libgolem95_numerical_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_numerical_la-mod_adapt_gauss.lo: mod_adapt_gauss.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_numerical_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_numerical_la-mod_adapt_gauss.lo $(FCFLAGS_f90) `test -f 'mod_adapt_gauss.f90' || echo '$(srcdir)/'`mod_adapt_gauss.f90
+
+libgolem95_numerical_la-mod_numeric.lo: mod_numeric.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_numerical_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_numerical_la-mod_numeric.lo $(FCFLAGS_f90) `test -f 'mod_numeric.f90' || echo '$(srcdir)/'`mod_numeric.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+mod_numeric.o: mod_adapt_gauss.o
+mod_numeric.lo: mod_adapt_gauss.lo
+mod_numeric.obj: mod_adapt_gauss.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.dep (revision 119)
@@ -0,0 +1,4 @@
+# Module dependencies
+mod_numeric.o: mod_adapt_gauss.o
+mod_numeric.lo: mod_adapt_gauss.lo
+mod_numeric.obj: mod_adapt_gauss.obj
Index: 95/branches/golem95_without_olo_cmake/src/numerical/mod_adapt_gauss.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/numerical/mod_adapt_gauss.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/numerical/mod_adapt_gauss.f90 (revision 119)
@@ -0,0 +1,1003 @@
+!****h* src/numerical/adapt_gauss
+! NAME
+!
+! Module adapt_gauss (file src/numerical/adapt_gauss.f90)
+!
+! USAGE
+!
+! use adapt_gauss
+!
+! DESCRIPTION
+!
+! This module contains several routines for a one dimensional
+! integration using Gauss Kronrod method
+!
+! OUTPUT
+!
+! The only subroutine which can be used by use association in adapt_gaus1,
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!*****
+!
+module adapt_gauss
+ !
+ use precision_golem
+ use array, only : packb
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ implicit none
+ !
+ private :: ki
+ real(ki) :: tol_glob
+ complex(ki) :: err_glob,res_glob
+ logical :: encore_glob
+ integer :: compt_call_glob,compt_cell_glob
+ character (len=3), parameter :: name_par = 'kro'
+ !~ integer, parameter :: n0_par = 10, n1_par = 21
+ integer, parameter :: n0_par = 7, n1_par = 15
+ integer, parameter :: compt_max_par = 40 ! maximal number of iteration
+ real(ki), parameter :: tol_max_par = 1.e-12_ki
+ integer, parameter :: nb_cell_max_par = 100000 ! maximal number of cells
+ !(limited by the memory requirement)
+ public :: adapt_gauss1
+ !
+ type intervalle
+ real(ki),dimension(1) :: point
+ real(ki) :: taille
+ complex(ki) :: resultat
+ complex(ki) :: erreur
+ logical :: divise
+ type(intervalle), pointer :: suivant
+ end type intervalle
+ !
+ contains
+ !
+ !****f* src/numerical/adapt_gauss/adapt_gauss1
+ ! NAME
+ !
+ ! Subroutine adapt_gauss1 (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call adapt_gauss1(func,b_inf,b_sup,tol,rest,abserr)
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine performs a one dimensional adaptative integration of the
+ ! function func between b_inf and b_sup using a Gaussian quadrature
+ ! with Kronrod polynomial. The integrand is assumed to be complex. For a
+ ! certain criterium (function test_error), the range of integration is split
+ ! into two. All the cells are put into a chained list whose element are of
+ ! type intervalle
+ !
+ ! INPUTS
+ !
+ ! this subroutine takes as inputs:
+ ! * func -- an external function as declared by the interface block
+ ! * b_inf -- a real (type ki), the lower bound of the integration range
+ ! * b_sup -- a real (type ki), the upper bound of the integration range
+ ! * tol -- a real (type ki), the tolerance asked by the user
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! it returns:
+ ! * rest -- a complex (type ki), the result of the integration
+ ! * abserr -- a complex (type ki), the absolute value of the estimated error
+ !
+ ! EXAMPLE
+ !
+ ! to integrate a function f
+ ! between 0 and 1 with a tolerance of 0.0001
+ ! the result is put in result
+ ! and the relative error returned in error
+ !
+ ! call adapt_gauss1(f,0._ki,1._ki,1.e-4_ki,result,error)
+ !
+ !*****
+ !
+ subroutine adapt_gauss1(func,b_inf,b_sup,tol,rest,abserr)
+ !
+ real(ki), intent (in) :: b_inf,b_sup,tol
+ complex(ki), intent (out) :: rest
+ complex(ki), intent (out) :: abserr
+ interface
+ function func(x)
+ use precision_golem
+ real(ki), intent (in) :: x
+ complex(ki) :: func
+ end function func
+ end interface
+ !
+ type(intervalle), pointer :: new
+ complex(ki) :: rest1,abserr1
+ integer :: compt
+ !
+ ! initialisation
+ !
+ rest = 0._ki
+ compt = 0
+ compt_call_glob = 0
+ compt_cell_glob = 0
+ tol_glob = 1._ki*tol
+ res_glob = 0._ki
+ err_glob = 0._ki
+ encore_glob = .true.
+ !
+ ! first evaluation into the entire range
+ !
+ call gauss1(func,b_inf,b_sup,rest1,abserr1)
+ !
+ compt_call_glob = compt_call_glob + n1_par
+ err_glob = abserr1
+ compt = compt + 1
+ compt_cell_glob = compt_cell_glob + 1
+ res_glob = rest1
+ !
+ if ( test_error(err_glob,tol_glob) ) then
+ !
+ rest = res_glob
+ abserr = err_glob
+ !
+ else ! one divides
+ !
+ call creation(new,b_inf,b_sup) ! creation of the nested list
+ res_glob = 0._ki
+ err_glob = 0._ki
+ ! call imprime(new)
+ !
+ do while ( encore_glob .and. (compt < compt_max_par) )
+ !
+ encore_glob = .false.
+ !
+ if (tol_glob >= tol_max_par) then
+ !
+ tol_glob = tol_glob/2._ki
+ !
+ else
+ !
+ tol_glob = tol_glob
+ !
+ end if
+ !
+ call decoupe(new,func) ! each cells marked TRUE are split in two
+ ! call imprime(new)
+ !
+ if (compt == (compt_max_par-1) ) then
+ !
+ call recupere_total(new) ! result of all remaining cells is collected
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'finished because the number of iterations reachs its maximum'
+ call catch_exception(1)
+ !
+ else if (compt_cell_glob > nb_cell_max_par) then
+ !
+ call recupere_total(new) ! result of all remaining cells is collected
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'finished because the number of cells reachs its maximum'
+ call catch_exception(1)
+ !
+ else
+ !
+ ! the results of FALSE cells are collected and the cells destroyed
+ call recupere_partiel(new)
+ !
+ end if
+ ! call imprime(new)
+ !
+ compt = compt + 1
+ !
+ end do
+ !
+ rest = res_glob
+ abserr = err_glob
+ !
+ call libere(new)
+ !
+ end if
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'Statistic in subroutine adapt_gauss1'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'number of function calls: %d0'
+ tab_erreur_par(2)%arg_int = compt_call_glob
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'number of cells: %d0'
+ tab_erreur_par(3)%arg_int = compt_cell_glob
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'number of iteration: %d0'
+ tab_erreur_par(4)%arg_int = compt
+ tab_erreur_par(5)%a_imprimer = .true.
+ tab_erreur_par(5)%chaine = 'number of Gauss points: %d1'
+ tab_erreur_par(5)%arg_int_tab = packb( (/n0_par,n1_par/) )
+ tab_erreur_par(6)%a_imprimer = .true.
+ tab_erreur_par(6)%chaine = 'Type of polynom: %c0'
+ tab_erreur_par(6)%arg_char = name_par
+ tab_erreur_par(7)%a_imprimer = .true.
+ tab_erreur_par(7)%chaine = 'Tolerance: %f0'
+ tab_erreur_par(7)%arg_real = tol
+ call catch_exception(2)
+ !
+ end subroutine adapt_gauss1
+ !
+ !****if* src/numerical/adapt_gauss/relative_error
+ ! NAME
+ !
+ ! function test_error (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! logical = test_error(error,tol)
+ !
+ ! DESCRIPTION
+ !
+ ! This function tests the error compared to the tolerance required, it
+ ! returns a value of type logical
+ !
+ ! INPUTS
+ !
+ ! this function take two arguments:
+ ! * error -- a complex (type ki), the absolute error
+ ! * tol -- the required tolerance
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! test_error is a logical
+ !
+ ! EXAMPLE
+ !
+ !*****
+ !
+ function test_error(error,tol)
+ !
+ complex(ki), intent(in) :: error
+ real(ki), intent(in) :: tol
+ !
+ logical :: test_error
+ real(ki) :: tempa,tempb
+ !
+ tempa = real(error,ki)
+ tempb = aimag(error)
+ test_error = ( (abs(tempa) <= tol) .and. (abs(tempb) <= tol) ) .or. &
+ & ( (abs(tempa) <= tol_max_par) .and. (abs(tempb) <= tol_max_par) )
+ !
+ end function test_error
+ !
+ !****if* src/numerical/adapt_gauss/creation
+ ! NAME
+ !
+ ! subroutine creation (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call creation(new,b_inf,b_sup)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine creates a chained list new whose elments are of type
+ ! intervalle. The pointer of the last element of the list must be null
+ ! (i.e. points on nothing). Norma f95 is used. Variables ending by _glob are
+ ! global for this module
+ !
+ !
+ ! INPUTS
+ !
+ ! * new -- an intervalle type, a pointer on the chained list
+ ! * b_inf -- a real (type ki), lower value of the list
+ ! * b_sup -- a real (type ki), upper value of the list
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! after the call, new is pointer on a chained list
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine creation(new,b_inf,b_sup)
+ !
+ type(intervalle), pointer :: new
+ real(ki), intent (in) :: b_inf,b_sup
+ !
+ type(intervalle), pointer :: init,fin
+ integer :: res
+ !
+ allocate(fin,stat=res)
+ !
+ if (res /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine creation (module numerical_evaluation)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'enable to allocate fin %d0'
+ tab_erreur_par(2)%arg_int = res
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(init,stat=res)
+ !
+ if (res /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine creation (module numerical_evaluation)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'enable to allocate init %d0'
+ tab_erreur_par(2)%arg_int = res
+ call catch_exception(0)
+ !
+ end if
+ !
+ fin%point = (/b_sup/)
+ fin%taille = 0._ki
+ fin%resultat = (0._ki,0._ki)
+ fin%erreur = 0._ki
+ fin%divise = .false.
+ fin%suivant => null()
+ new => fin
+ !
+ init%point = (/b_inf/)
+ init%taille = b_sup - b_inf
+ init%resultat = res_glob
+ init%erreur = err_glob
+ init%divise = .true.
+ init%suivant => fin
+ new => init
+ !
+ end subroutine creation
+ !
+ !****if* src/numerical/adapt_gauss/decoupe
+ ! NAME
+ !
+ ! recursive subroutine decoupe (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call decoupe(new,func)
+ !
+ ! DESCRIPTION
+ !
+ ! For each cell of the chained list, this routine splits a 1-dimension cell
+ ! into 2 subcells if the cell is marked true For the two sub-cells, it computes
+ ! the integral in the sub-cell and marks it true of false depending the error
+ ! returned. Note that since this subroutine is recursive, it acts
+ ! globaly on the whole chained list containing the cells
+ !
+ !
+ ! INPUTS
+ !
+ ! * new -- a pointer (type intervalle) on the chained list
+ ! * func -- an external function R --> C, the integrand
+ !
+ ! SIDE EFFECTS
+ !
+ ! this routine modify the chained list whose the first pointer is new
+ !
+ ! RETURN VALUE
+ !
+ ! no return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ recursive subroutine decoupe(new,func)
+ !
+ type(intervalle), pointer :: new
+ interface
+ function func(x)
+ use precision_golem
+ real(ki), intent (in) :: x
+ complex(ki) :: func
+ end function func
+ end interface
+ !
+ type(intervalle), pointer :: nouveau => null()
+ real(ki), dimension(1) :: vx
+ real(ki) :: n_taille
+ complex(ki) :: rest1_loc,abserr1_loc
+ logical :: div
+ integer :: res
+ !
+ if (associated(new%suivant)) then ! if this is not the last cell
+ !
+ if (new%divise) then ! if one has to split
+ !
+ n_taille = new%taille/2._ki
+ vx = (/n_taille/)
+ new%taille = n_taille
+ !
+ call gauss1(func,new%point(1),new%point(1)+new%taille,&
+ &rest1_loc,abserr1_loc)
+ !
+ compt_call_glob = compt_call_glob + n1_par
+ new%erreur = abserr1_loc
+ compt_cell_glob = compt_cell_glob + 1
+ new%resultat = rest1_loc
+ !
+ if ( test_error(new%erreur,tol_glob) ) then
+ !
+ div = .false.
+ !
+ else
+ !
+ div = .true.
+ !
+ end if
+ !
+ new%divise = div
+ allocate(nouveau,stat=res)
+ !
+ if (res /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine decoupe (module numerical_evaluation)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the allocation runs into trouble %d0'
+ tab_erreur_par(2)%arg_int = res
+ call catch_exception(0)
+ !
+ end if
+ !
+ nouveau%point = new%point + vx
+ nouveau%taille = n_taille
+ call gauss1(func,nouveau%point(1),nouveau%point(1)+nouveau%taille,&
+ &rest1_loc,abserr1_loc)
+ compt_call_glob = compt_call_glob + n1_par
+ nouveau%erreur = abserr1_loc
+ nouveau%resultat = rest1_loc
+ !
+ if ( test_error(nouveau%erreur,tol_glob) ) then
+ !
+ div = .false.
+ !
+ else
+ !
+ div = .true.
+ !
+ end if
+ !
+ nouveau%divise = div
+ nouveau%suivant => new%suivant
+ new%suivant => nouveau
+ compt_cell_glob = compt_cell_glob + 1
+ call decoupe(nouveau%suivant,func)
+ !
+ else
+ !
+ call decoupe(new%suivant,func)
+ !
+ end if
+ !
+ end if
+ !
+ end subroutine decoupe
+ !
+ !****if* src/numerical/adapt_gauss/recupere_total
+ ! NAME
+ !
+ ! recursive subroutine recupere_total (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call recupere_total(new)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine collects the value of the integrant in each cell
+ ! (as well as the error). It acts globaly on the chained list
+ !
+ !
+ ! INPUTS
+ !
+ ! * new -- a pointer on the first entry of the chained list
+ !
+ ! SIDE EFFECTS
+ !
+ ! this routine modifies the global (for this module) variables:
+ ! * res_glob -- sum of the result of the integral for each cell
+ ! * err_glob -- sum of the error for each cell
+ !
+ ! RETURN VALUE
+ !
+ ! no returned value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ recursive subroutine recupere_total(new)
+ !
+ type(intervalle), pointer :: new
+ !
+ if (associated(new%suivant)) then
+ !
+ res_glob = res_glob + new%resultat
+ err_glob = err_glob + new%erreur
+ !
+ call recupere_total(new%suivant)
+ !
+ end if
+ !
+ end subroutine recupere_total
+ !
+ !****if* src/numerical/adapt_gauss/recupere_partiel
+ ! NAME
+ !
+ ! recursive subroutine recupere_partiel (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call recupere_partiel(new)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine collects the value of the integrant only in cell marked FALSE
+ ! (as well as the error) and removes these cells to save space
+ !
+ !
+ ! INPUTS
+ !
+ ! * new -- a pointer (type inetrvalle) pointing on the first entry of the chained list
+ !
+ ! SIDE EFFECTS
+ !
+ ! this routine modifies the global (for this module) variables:
+ ! * res_glob -- sum of the result of the integral for each cell
+ ! * err_glob -- sum of the error for each cell
+ ! * encore_glob -- a logical, to know if there are cells marked true
+ !
+ ! RETURN VALUE
+ !
+ ! no returned value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ recursive subroutine recupere_partiel(new)
+ !
+ type(intervalle), pointer :: new
+ !
+ type(intervalle), pointer :: temp
+ type(intervalle), pointer :: temp1
+ integer :: res
+ !
+ if (associated(new%suivant)) then
+ !
+ call recupere_partiel(new%suivant)
+ encore_glob = encore_glob .or. new%divise
+ !
+ if (.not.new%divise) then
+ !
+ res_glob = res_glob + new%resultat
+ err_glob = err_glob + new%erreur
+ temp => new
+ temp1 => new%suivant
+ new => temp1
+ !
+ deallocate(temp,stat=res)
+ !
+ if (res /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine recupere_partiel (module numerical_evaluation)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the deallocation runs into trouble %d0'
+ tab_erreur_par(2)%arg_int = res
+ call catch_exception(0)
+ !
+ end if
+ !
+ end if
+ !
+ end if
+ !
+ end subroutine recupere_partiel
+ !
+ !****if* src/numerical/adapt_gauss/imprime
+ ! NAME
+ !
+ ! recursive subroutine imprime (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call imprime(new)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine prints the value of the element of the chained list
+ ! i.e. the structure of each cell
+ !
+ !
+ ! INPUTS
+ !
+ ! * new -- a pointer (type inetrvalle) pointing on the first entry of the chained list
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! no returned value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ recursive subroutine imprime(new)
+ !
+ type(intervalle), pointer :: new
+ !
+ if (associated(new%suivant)) then
+ !
+ write (*,'("borne inf",1f16.8,2x,"taille ",f16.8,2x,&
+ &" on divise? ",l2)')&
+ & new%point,new%taille,new%divise
+ write (*,'("resultat",2f16.8,2x,"erreur ",2e16.8)')&
+ & new%resultat,new%erreur
+ !
+ call imprime(new%suivant)
+ !
+ end if
+ !
+ end subroutine imprime
+ !
+ !****if* src/numerical/adapt_gauss/libere
+ ! NAME
+ !
+ ! recursive subroutine libere (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call libere(new)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine deallocates all the elements of the chained list
+ !
+ ! INPUTS
+ !
+ ! * new -- a pointer (type inetrvalle) pointing on the first entry of the chained list
+ !
+ ! SIDE EFFECTS
+ !
+ ! destroy the chained list
+ !
+ ! RETURN VALUE
+ !
+ ! no returned value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ recursive subroutine libere(new)
+ !
+ type(intervalle), pointer :: new
+ !
+ integer :: res
+ !
+ if (associated(new%suivant)) call libere(new%suivant)
+ !
+ deallocate(new,stat=res)
+ !
+ if (res /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine libere (module numerical_evaluation)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the deallocation runs into trouble %d0'
+ tab_erreur_par(2)%arg_int = res
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine libere
+ !
+ !****if* src/numerical/adapt_gauss/give_me_the_weight
+ ! NAME
+ !
+ ! subroutine give_me_the_weight (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call give_me_the_weight(nomb,name,weight,zero)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine gives the weight and zero for Legendre polynomials of
+ ! degrees : n=7,10 (created with maple file poid_gauss.m)
+ ! and also the weight and zero for Kronrod polynomials of degrees 15,21
+ ! in such a way the zeros of the Legendre polynomial of degree 7 (resp. 10)
+ ! is between the zeros of the Kronrod polynomial of degree 15 (resp. 21).
+ !
+ ! INPUTS
+ !
+ ! * nomb -- an integer, the degree of the Legendre/Kronrod polynomials
+ ! * name -- a character (dimension 3), the name of the polynom
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! * weight -- an array of real (type ki) containing the weights
+ ! * zero -- an array of real (type ki) containing the zero of the polynomials
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine give_me_the_weight(nomb,name,weight,zero)
+ !
+ integer, intent (in) :: nomb
+ character (len=3), intent (in) :: name
+ real(ki), intent (out), dimension(:) :: weight,zero
+ !
+ ! poids et abscisses pour les polynomes de Legendre
+ ! (calcule avec poid_gauss.m)
+ !
+ real(ki), dimension(7) :: zero_leg_7=(/&
+ &-0.9491079123427585_ki,-0.7415311855993944_ki,&
+ &-0.4058451513773972_ki,0.0000000000000000_ki,&
+ &0.4058451513773972_ki,0.7415311855993944_ki,&
+ &0.9491079123427585_ki&
+ &/)
+ real(ki), dimension(7) :: weight_leg_7=(/&
+ &0.1294849661688697_ki,0.2797053914892767_ki,&
+ &0.3818300505051189_ki,0.4179591836734694_ki,&
+ &0.3818300505051189_ki,0.2797053914892767_ki,&
+ &0.1294849661688697_ki&
+ &/)
+ real(ki), dimension(10) :: zero_leg_10=(/&
+ &-0.9739065285171717_ki,-0.8650633666889845_ki,&
+ &-0.6794095682990244_ki,-0.4333953941292472_ki,&
+ &-0.1488743389816312_ki,0.1488743389816312_ki,&
+ &0.4333953941292472_ki,0.6794095682990244_ki,&
+ &0.8650633666889845_ki,0.9739065285171717_ki&
+ &/)
+ real(ki), dimension(10) :: weight_leg_10=(/&
+ &0.0666713443086881_ki,0.1494513491505806_ki,&
+ &0.2190863625159820_ki,0.2692667193099964_ki,&
+ &0.2955242247147529_ki,0.2955242247147529_ki,&
+ &0.2692667193099964_ki,0.2190863625159820_ki,&
+ &0.1494513491505806_ki,0.0666713443086881_ki&
+ &/)
+ !
+ ! poids et abscisses pour les polynomes de Kronrod (pris sur le WEB)
+ !
+ real(ki), dimension(15) :: zero_kro_15=(/&
+ &-0.9914553711208126_ki,-0.9491079123427585_ki,&
+ &-0.8648644233597691_ki,-0.7415311855993944_ki,&
+ &-0.5860872354676911_ki,-0.4058451513773972_ki,&
+ &-0.2077849550789850_ki,0.0e+00_ki,&
+ &0.2077849550789850_ki,0.4058451513773972_ki,&
+ &0.5860872354676911_ki,0.7415311855993944_ki,&
+ &0.8648644233597691_ki,0.9491079123427585_ki,&
+ &0.9914553711208126_ki&
+ &/)
+ real(ki), dimension(15) :: weight_kro_15=(/&
+ &0.2293532201052922e-01_ki,0.6309209262997855e-01_ki,&
+ &0.1047900103222502_ki,0.1406532597155259_ki,&
+ &0.1690047266392679_ki,0.1903505780647854_ki,&
+ &0.2044329400752989_ki,0.2094821410847278_ki,&
+ &0.2044329400752989_ki,0.1903505780647854_ki,&
+ &0.1690047266392679_ki,0.1406532597155259_ki,&
+ &0.1047900103222502_ki,0.6309209262997855e-01_ki,&
+ &0.2293532201052922e-01_ki&
+ &/)
+ !
+ real(ki), dimension(21) :: zero_kro_21=(/&
+ &-0.9956571630258081e+00_ki,-0.9739065285171717e+00_ki,&
+ &-0.9301574913557082e+00_ki,-0.8650633666889845e+00_ki,&
+ &-0.7808177265864169e+00_ki,-0.6794095682990244e+00_ki,&
+ &-0.5627571346686047e+00_ki,-0.4333953941292472e+00_ki,&
+ &-0.2943928627014602e+00_ki,-0.1488743389816312e+00_ki,&
+ &0.0e+00_ki,0.1488743389816312e+00_ki,&
+ &0.2943928627014602e+00_ki,0.4333953941292472e+00_ki,&
+ &0.5627571346686047e+00_ki,0.6794095682990244e+00_ki,&
+ &0.7808177265864169e+00_ki,0.8650633666889845e+00_ki,&
+ &0.9301574913557082e+00_ki,0.9739065285171717e+00_ki,&
+ &0.9956571630258081e+00_ki&
+ &/)
+ !
+ real(ki), dimension(21) :: weight_kro_21=(/&
+ &0.1169463886737187e-01_ki,0.3255816230796473e-01_ki,&
+ &0.5475589657435200e-01_ki,0.7503967481091995e-01_ki,&
+ &0.9312545458369761e-01_ki,0.1093871588022976e+00_ki,&
+ &0.1234919762620659e+00_ki,0.1347092173114733e+00_ki,&
+ &0.1427759385770601e+00_ki,0.1477391049013385e+00_ki,&
+ &0.1494455540029169e+00_ki,0.1477391049013385e+00_ki,&
+ &0.1427759385770601e+00_ki,0.1347092173114733e+00_ki,&
+ &0.1234919762620659e+00_ki,0.1093871588022976e+00_ki,&
+ &0.9312545458369761e-01_ki,0.7503967481091995e-01_ki,&
+ &0.5475589657435200e-01_ki,0.3255816230796473e-01_ki,&
+ &0.1169463886737187e-01_ki&
+ &/)
+ !
+ if (name == 'leg') then
+ !
+ if (nomb == 7) then
+ !
+ weight = weight_leg_7
+ zero = zero_leg_7
+ !
+ else if (nomb == 10) then
+ !
+ weight = weight_leg_10
+ zero = zero_leg_10
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine give_me_the_weight'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the number of point is incorrect for &
+ &Legendre weights: %d0'
+ tab_erreur_par(2)%arg_int = nomb
+ call catch_exception(0)
+ !
+ end if
+ !
+ else if (name == 'kro') then
+ !
+ if (nomb == 15) then
+ !
+ weight = weight_kro_15
+ zero = zero_kro_15
+ !
+ else if (nomb == 21) then
+ !
+ weight = weight_kro_21
+ zero = zero_kro_21
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine give_me_the_weight'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the number of point is incorrect for &
+ &Kronrod weights: %d0'
+ tab_erreur_par(2)%arg_int = nomb
+ call catch_exception(0)
+ !
+ end if
+ !
+ end if
+ !
+ end subroutine give_me_the_weight
+ !
+ !
+ !****if* src/numerical/adapt_gauss/gauss1
+ ! NAME
+ !
+ ! subroutine gauss1 (file src/numerical/adapt_gauss.f90)
+ !
+ ! USAGE
+ !
+ ! call gauss1(func,b_inf,b_sup,rest,err)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine computes the one dimensional integration using
+ ! the Gauss-Kronrod method of the function func in the range
+ ! b_inf to b_sup
+ !
+ !
+ ! INPUTS
+ !
+ ! * func -- an external function from R to C
+ ! * b_inf -- a real (type ki), lower bound of the integration
+ ! * b_sup -- a real (type ki), upper bound of the integration
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! * rest -- a complex (type ki), the result of the integration
+ ! * err -- a complex (type ki), the estimate of the absolute error returned
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine gauss1(func,b_inf,b_sup,rest,err)
+ !
+ real(ki), intent (in) :: b_inf,b_sup
+ complex(ki), intent (out) :: rest
+ complex(ki), intent (out) :: err
+ !
+ interface
+ !
+ function func(x)
+ use precision_golem
+ real(ki), intent (in) :: x
+ complex(ki) :: func
+ end function func
+ !
+ end interface
+ !
+ real(ki), dimension(n1_par) :: weight,zero
+ real(ki), dimension(:), allocatable :: weight_leg,zero_leg
+ integer :: i,j
+ real(ki) :: hm,hp
+ real(ki) :: argg,argk
+ complex(ki) :: tg,tk
+ complex(ki) :: restg,restk,restg_leg
+ !
+ ! call for the Kronrod zeros and weights
+ !
+ call give_me_the_weight(n1_par,'kro',weight,zero)
+ rest = 0._ki
+ err = 1._ki
+ allocate(weight_leg(n0_par),zero_leg(n0_par))
+ !
+ ! call for the Legendre zeros and weights
+ !
+ call give_me_the_weight(n0_par,'leg',weight_leg,zero_leg)
+ restg_leg = rest
+ restg = rest
+ restk = rest
+ hm = (b_sup - b_inf)/2._ki
+ hp = (b_sup + b_inf)/2._ki
+ !
+ do i=1,n1_par-1,2
+ !
+ argk = hm*zero(i)+hp
+ argg = hm*zero(i+1)+hp
+ tk = func(argk)
+ tg = func(argg)
+ restk = restk + weight(i)*tk
+ restg = restg + weight(i+1)*tg
+ j = (i+1)/2
+ restg_leg = restg_leg + weight_leg(j)*tg
+ !
+ end do
+ !
+ argk = hm*zero(n1_par)+hp
+ restk = restk + weight(n1_par)*func(argk)
+ rest = (restg+restk)*hm
+ err = rest-restg_leg*hm
+ !
+ deallocate(weight_leg,zero_leg)
+ !
+ end subroutine gauss1
+ !
+end module adapt_gauss
Index: 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/numerical/Makefile.am (revision 119)
@@ -0,0 +1,11 @@
+noinst_LTLIBRARIES=libgolem95_numerical.la
+
+AM_FCFLAGS=-I$(top_builddir)/src/module
+
+libgolem95_numerical_la_SOURCES= mod_adapt_gauss.f90 mod_numeric.f90
+libgolem95_numerical_la_FCFLAGS=$(AM_FCFLAGS)
+
+nodist_pkginclude_HEADERS= adapt_gauss.mod numerical_evaluation.mod
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/numerical/mod_numeric.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/numerical/mod_numeric.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/numerical/mod_numeric.f90 (revision 119)
@@ -0,0 +1,112 @@
+!****h* src/numerical/numerical_evaluation
+! NAME
+!
+! Module numerical_evaluation
+!
+! USAGE
+!
+! use numerical_evaluation
+!
+! DESCRIPTION
+!
+! This module contains a generic routine for a one dimensional integration.
+! Up to now, the routine used is adapt_gauss1 (in file mod_adapt_gauss.f90).
+! To add a new integration routine, wrap it in a module, load this module
+! in this file using use association and add a new if case in the routine generic_eval_numer
+! also modify the value of choix accordingly. Of course, do not forget to modify the
+! Makefile (or better the script configure,pl) in such a way that this new module is compiled
+!
+! OUTPUT
+!
+! With this module, one can access to the routine generic_eval_numer
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * parametre (src/module/parametre.f90)
+! * adapt_gauss (src/numerical/mod_adapt_gauss.f90)
+!
+!*****
+!
+module numerical_evaluation
+ !
+ use precision_golem
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use adapt_gauss
+ implicit none
+ !
+ integer, parameter :: choix = 1
+ private :: ki,choix
+ public :: generic_eval_numer
+ !
+ contains
+ !
+ !****f* src/numerical/numerical_evaluation/generic_eval_numer
+ ! NAME
+ !
+ ! Subroutine generic_eval_numer
+ !
+ ! USAGE
+ !
+ ! call generic_eval_numer(func,b_inf,b_sup,tol,rest,abserr)
+ !
+ ! DESCRIPTION
+ !
+ ! Generic routine for the one dimensional integration.
+ !
+ ! INPUTS
+ !
+ ! * func -- an external function as declared by the interface block
+ ! * b_inf -- a real (type ki), the lower bound of the integration range
+ ! * b_sup -- a real (type ki), the upper bound of the integration range
+ ! * tol -- a real (type ki), the tolerance asked by the user
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effects
+ !
+ ! RETURN VALUE
+ !
+ ! * rest -- a complex (type ki), the result of the integration
+ ! * abserr -- a complex (type ki), the absolute value of the estimated error
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine generic_eval_numer(func,b_inf,b_sup,tol,rest,abserr)
+ !
+ real(ki), intent (in) :: b_inf,b_sup,tol
+ complex(ki), intent (out) :: rest
+ complex(ki), intent (out) :: abserr
+ !
+ interface
+ !
+ function func(x)
+ use precision_golem
+ real(ki), intent (in) :: x
+ complex(ki) :: func
+ end function func
+ !
+ end interface
+ !
+ if (choix == 1) then
+ !
+ call adapt_gauss1(func,b_inf,b_sup,tol,rest,abserr)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine generic_eval_numer'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the value of the variable choix is not correct : choix=%d0'
+ tab_erreur_par(2)%arg_int = choix
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine generic_eval_numer
+ !
+end module numerical_evaluation
Index: 95/branches/golem95_without_olo_cmake/src/interface/gb0.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/gb0.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/gb0.f90 (revision 119)
@@ -0,0 +1,457 @@
+!
+!****f* src/interface/gb0i
+! NAME
+!
+! Function gb0i
+!
+! USAGE
+!
+! complex = gb0i(idt,s1,m1,m2,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function corresponds to the LoopTools b0i function.
+! The first argument is a character of length <= 4
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * idt -- a character of length <= 4, the type of form factors
+! * s1 -- a real (type ki), p1^2
+! * m1 -- a real (type ki), mass of propagator 2
+! * m2 -- a real (type ki), mass of propagator 1
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_2p (src/form_factor/form_factor_2p.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * tool_lt_to_golem, only : extract (src/interface/tool_lt_to_golem.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gb0i(idt,s1,m1,m2,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_2p
+ use constante
+ use tool_lt_to_golem, only : extract
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ character (len=*), intent (in) :: idt
+ real(ki), intent (in) :: s1,m1,m2,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gb0i
+ !
+ integer, dimension(4) :: tab
+ integer :: n1,n2
+ integer, dimension(2) :: temp
+ integer :: j1,j2
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ character (len=4) :: idt_temp
+ !
+ ! to avoid confusion if mu2_scale_par is not=1 in main program:
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(2)
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ idt_temp = idt ! on complete la chaine entrante par des blancs
+ call extract(idt_temp,tab)
+ n1= count(tab/=-1)
+ n2= count(tab/=-1 .and. tab/=0)
+ !
+ temp = -2
+ temp(1:n1) = pack(tab,tab/=-1)
+ !
+ select case(n1)
+ !
+ case(1)
+ !
+ j1 = temp(1)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = a20(b_null)
+ !
+ case(1)
+ !
+ ff = a21(j1,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gb0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = b22(b_null)
+ !
+ case(2)
+ !
+ ff = a22(j1,j2,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gb0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gb0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n1 is not correct %d0'
+ tab_erreur_par(2)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ !gb0i = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ! mu2_scale_par scale contained already in basic function,
+ ! but local mu2 is used here
+ gb0i = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gb0i = ff%b + lmu2*ff%a
+ gb0i = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gb0i = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gb0i (gb0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+end function gb0i
+!
+!****f* src/interface/gb0
+! NAME
+!
+! Function gb0
+!
+! USAGE
+!
+! complex = gb0(s1,m1,m2,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function corresponds to the scalar b0 function.
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a real (type ki), p1^2
+! * m1 -- a real (type ki), mass^2 of propagator 2
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_2p (src/form_factor/form_factor_2p.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gb0(s1,m1,m2,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_2p
+ use constante
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ real(ki), intent (in) :: s1,m1,m2,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gb0
+ !
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(2)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ ff = a20(b_null)
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! gb0 = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ! mu2_scale_par contained already in basic function
+ ! use local mu2 !
+ gb0 = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ !gb0 = ff%b + lmu2*ff%a
+ gb0 = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gb0 = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gb0 (gb0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+end function gb0
+!
+!****f* src/interface/gb0c
+! NAME
+!
+! Function gb0c
+!
+! USAGE
+!
+! complex = gb0c(s1,m1,m2,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function corresponds to the scalar b0 function.
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a complex (type ki), p1^2
+! * m1 -- a complex (type ki), mass^2 of propagator 2
+! * m2 -- a complex (type ki), mass^2 of propagator 1
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_2p (src/form_factor/form_factor_2p.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gb0c(s1,m1,m2,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_2p
+ use constante
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ complex(ki), intent (in) :: s1,m1,m2
+ real(ki), intent(in) :: mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gb0c
+ !
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(2)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ ff = a20(b_null)
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! gb0c = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ! mu2_scale_par contained already in basic function
+ ! use local mu2 !
+ gb0c = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ !gb0c = ff%b + lmu2*ff%a
+ gb0c = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gb0c = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gb0c (gb0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+end function gb0c
Index: 95/branches/golem95_without_olo_cmake/src/interface/gc0.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/gc0.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/gc0.f90 (revision 119)
@@ -0,0 +1,523 @@
+!
+!****f* src/interface/gc0i
+! NAME
+!
+! Function gc0i
+!
+! USAGE
+!
+! complex = gc0i(idt,s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function corresponds to the LoopTools C0i function.
+! The first argument is a character of length <= 5
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * idt -- a character of length <= 5, the type of form factors
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * m1 -- a real (type ki), mass of propagator 3
+! * m2 -- a real (type ki), mass of propagator 1
+! * m3 -- a real (type ki), mass of propagator 2
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_3p (src/form_factor/form_factor_3p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * tool_lt_to_golem, only : extract (src/interface/tool_lt_to_golem.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gc0i(idt,s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_3p
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use tool_lt_to_golem, only : extract
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use array, only: packb
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ character (len=*), intent (in) :: idt
+ real(ki), intent (in) :: s1,s2,s3,m1,m2,m3,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gc0i
+ !
+ integer, dimension(5) :: tab
+ integer :: n1,n2
+ integer, dimension(3) :: temp
+ integer :: j1,j2,j3
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ character (len=5) :: idt_temp
+ !
+ ! to avoid confusion if mu2_scale_par is not=1 in main program:
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(3)
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ idt_temp = idt ! on complete la chaine entrante par des blancs
+ call extract(idt_temp,tab)
+ n1= count(tab/=-1)
+ n2= count(tab/=-1 .and. tab/=0)
+ !
+ temp = -2
+ temp(1:n1) = pack(tab,tab/=-1)
+ !
+ select case(n1)
+ !
+ case(1)
+ !
+ j1 = temp(1)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = a30(b_null)
+ !
+ case(1)
+ !
+ ff = a31(j1,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = b32(b_null)
+ !
+ case(2)
+ !
+ ff = a32(j1,j2,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ !
+ select case(n2)
+ !
+ case(1)
+ !
+ ff = b33(j3,b_null)
+ !
+ case(3)
+ !
+ ff = a33(j1,j2,j3,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n1 is not correct %d0'
+ tab_erreur_par(2)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! mu2_scale_par already contained in basic triangle functions
+ ! note that local mu2 is used here
+ ! gc0i = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ gc0i = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gc0i = ff%b + lmu2*ff%a
+ gc0i = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gc0i = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0i (gc0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ end function gc0i
+!
+!****f* src/interface/gc0
+! NAME
+!
+! Function gc0
+!
+! USAGE
+!
+! complex = gc0(s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function corresponds to the scalar C0 function.
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * m1 -- a real (type ki), mass^2 of propagator 3
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * m3 -- a real (type ki), mass^2 of propagator 2
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the pole coefficient
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_3p (src/form_factor/form_factor_3p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gc0(s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+ !
+ 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 (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use array, only: packb
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ real(ki), intent (in) :: s1,s2,s3,m1,m2,m3,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gc0
+ !
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(3)
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ ff = a30(s_null)
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ !gc0 = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ! mu scale already contained in basic triangle functions
+ ! but here use local mu2
+ gc0 = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gc0 = ff%b + lmu2*ff%a
+ gc0 = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gc0 = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0 (gc0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ end function gc0
+!
+!****f* src/interface/gc0c
+! NAME
+!
+! Function gc0c
+!
+! USAGE
+!
+! complex = gc0c(s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function corresponds to the scalar C0 function.
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a complex (type ki), p1^2
+! * s2 -- a complex (type ki), p2^2
+! * s3 -- a complex (type ki), p3^2
+! * m1 -- a complex (type ki), mass^2 of propagator 3
+! * m2 -- a complex (type ki), mass^2 of propagator 1
+! * m3 -- a complex (type ki), mass^2 of propagator 2
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the pole coefficient
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_3p (src/form_factor/form_factor_3p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gc0c(s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+ !
+ 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 (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use array, only: packb
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ complex(ki), intent (in) :: s1,s2,s3,m1,m2,m3
+ real(ki), intent (in) :: mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gc0c
+ !
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(3)
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ ff = a30(s_null)
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ !gc0c = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ! mu scale already contained in basic triangle functions
+ ! but here use local mu2
+ gc0c = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gc0c = ff%b + lmu2*ff%a
+ gc0c = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gc0c = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gc0c (gc0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ end function gc0c
Index: 95/branches/golem95_without_olo_cmake/src/interface/tens_comb.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/tens_comb.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/tens_comb.f90 (revision 119)
@@ -0,0 +1,11709 @@
+!****h* src/interface/tens_comb
+! NAME
+!
+! Module tens_comb
+!
+! USAGE
+!
+! use tens_comb
+!
+! DESCRIPTION
+!
+! This module contains the routines necessary for the contraction
+! of the tensor coefficients as reconstructed by the module tens_rec
+! with the according tensor integrals.
+!
+! Please, note that this module is generated by a script and should not
+! be modified manually. In order to make changes to this module rerun
+! the Python script
+!
+! tool/tens_rec/tens.py
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * matrice_s (src/kinematics/matrice_s.f90)
+! * array (src/module/array.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * form_factor_2p (src/form_factor/form_factor_2p.f90)
+! * form_factor_3p (src/form_factor/form_factor_3p.f90)
+! * form_factor_4p (src/form_factor/form_factor_4p.f90)
+! * form_factor_5p (src/form_factor/form_factor_5p.f90)
+! * form_factor_6p (src/form_factor/form_factor_6p.f90)
+! * tens_rec (src/interface/tens_rec.f90)
+!
+!*****
+module tens_comb
+! This module has been generated using a script.
+! Please, refrain from modifying it directly!
+use precision_golem, only: ki
+use matrice_s, only: b_ref, inv_s
+use array, only: packb, unpackb, countb, pminus, punion
+use form_factor_type, only: form_factor, operator(+), operator(-), &
+ & operator(*), assignment(=)
+use form_factor_1p, only: a10
+use form_factor_2p, only: a20, a21, a22, b22
+use form_factor_3p, only: a30, a31, a32, b32, a33, b33
+use form_factor_4p, only: a40, a41, a42, b42, a43, b43, a44, b44, c44
+use form_factor_5p, only: a50, a51, a52, b52, a53, b53, a54, b54, c54, a55, &
+ & b55, c55
+use form_factor_6p, only: a60, a61, a62, a63, a64, a65, a66
+use tens_rec, only: coeff_type_1, reconstruct1, coeff_type_2, reconstruct2, &
+ & coeff_type_3, reconstruct3, coeff_type_4, reconstruct4, coeff_type_5, &
+ & reconstruct5, coeff_type_6, reconstruct6
+implicit none
+private :: ki, b_ref, unpackb, packb, pminus, form_factor
+private :: coeff_type_1, reconstruct1, coeff_type_2, reconstruct2, &
+ & coeff_type_3, reconstruct3, coeff_type_4, reconstruct4, coeff_type_5, &
+ & reconstruct5, coeff_type_6, reconstruct6
+private :: a10
+private :: a20, a21, a22, b22
+private :: a30, a31, a32, b32, a33, b33
+private :: a40, a41, a42, b42, a43, b43, a44, b44, c44
+private :: a50, a51, a52, b52, a53, b53, a54, b54, c54, a55, b55, c55
+private :: a60, a61, a62, a63, a64, a65, a66
+real(ki), dimension(0:3), parameter, private :: null_vec = &
+ & (/0.0_ki,0.0_ki,0.0_ki,0.0_ki/)
+interface evaluate
+ module procedure evaluate_b
+ module procedure evaluate_s
+end interface
+contains
+!****f* src/interface/tens_comb/evaluate_s
+! NAME
+!
+! Function evaluate_s
+!
+! Accessible through interface evaluate
+!
+! USAGE
+!
+! amp = evaluate(numeval, momenta, set, rank)
+!
+! DESCRIPTION
+!
+! Evaluates a diagram by first reconstructing its tensor coefficients
+! and then contracting with the tensor integrals.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * momenta -- real array of dimension(:,0:3) containing the
+! momenta r_i of the loop propagators
+! * set -- the set of pinched propagators as integer array
+! * rank -- optional integer, specifying the maximum rank of the diagram
+! If omitted, rank is assumed to be the equal to the number of
+! loop propagators.
+! RETURN VALUE
+!
+! Value of the diagram as a type(form_factor)
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function evaluate_s(numeval, momenta, set, rank) result(amp)
+ ! generated by: write_function_evaluate
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), dimension(:,:), intent(in) :: momenta
+ integer, dimension(:), intent(in) :: set
+ integer, intent(in), optional :: rank
+ type(form_factor) :: amp
+ if (present(rank)) then
+ amp = evaluate_b(numeval, momenta, packb(set), rank)
+ else
+ amp = evaluate_b(numeval, momenta, packb(set))
+ end if
+end function evaluate_s
+!****f* src/interface/tens_comb/evaluate_b
+! NAME
+!
+! Function evaluate_b
+!
+! Accessible through interface evaluate
+!
+! USAGE
+!
+! amp = evaluate(numeval, momenta, b_set, rank)
+!
+! DESCRIPTION
+!
+! Evaluates a diagram by first reconstructing its tensor coefficients
+! and then contracting with the tensor integrals.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * momenta -- real array of dimension(:,0:3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer (bit-set)
+! * rank -- optional integer, specifying the maximum rank of the diagram
+! If omitted, rank is assumed to be the equal to the number of
+! loop propagators.
+! RETURN VALUE
+!
+! Value of the diagram as a type(form_factor)
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function evaluate_b(numeval, momenta, b_set, rank) result(amp)
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), dimension(:,:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ integer, intent(in), optional :: rank
+ type(form_factor) :: amp
+ integer :: N, r
+ complex(ki) :: coeffs0
+ type(coeff_type_1) :: coeffs1
+ type(coeff_type_2) :: coeffs2, coeffs2x
+ type(coeff_type_3) :: coeffs3
+ type(coeff_type_4) :: coeffs4
+ type(coeff_type_5) :: coeffs5
+ type(coeff_type_6) :: coeffs6
+ N = size(momenta,1) - countb(b_set)
+ if (present(rank)) then
+ r = rank
+ else
+ r = N
+ end if
+ select case(N)
+ case(1)
+ select case(r)
+ case(0)
+ coeffs0 = numeval(null_vec, 0.0_ki)
+ print*, "Tadpoles not implemented yet"
+ stop
+ case(1)
+ call reconstruct1(numeval, coeffs1)
+ print*, "Tadpoles not implemented yet"
+ stop
+ case default
+ print*, "Not yet implemented: N, r = ", 1, r
+ stop
+ end select
+ case(2)
+ select case(r)
+ case(0)
+ coeffs0 = numeval(null_vec, 0.0_ki)
+ amp = coeffs0 * a20(b_set)
+ case(1)
+ call reconstruct1(numeval, coeffs1)
+ amp = contract2_1(coeffs1,momenta,b_set)
+ case(2)
+ call reconstruct2(numeval, coeffs2, coeffs0)
+ amp = contract2_2(coeffs2,momenta,b_set)
+ amp = amp + contract2_2s1(coeffs0,momenta,b_set)
+ case default
+ print*, "Not yet implemented: N, r = ", 2, r
+ stop
+ end select
+ case(3)
+ select case(r)
+ case(0)
+ coeffs0 = numeval(null_vec, 0.0_ki)
+ amp = coeffs0 * a30(b_set)
+ case(1)
+ call reconstruct1(numeval, coeffs1)
+ amp = contract3_1(coeffs1,momenta,b_set)
+ case(2)
+ call reconstruct2(numeval, coeffs2, coeffs0)
+ amp = contract3_2(coeffs2,momenta,b_set)
+ amp = amp + contract3_2s1(coeffs0,momenta,b_set)
+ case(3)
+ call reconstruct3(numeval, coeffs3, coeffs1)
+ amp = contract3_3(coeffs3,momenta,b_set)
+ amp = amp + contract3_3s1(coeffs1,momenta,b_set)
+ case default
+ print*, "Not yet implemented: N, r = ", 3, r
+ stop
+ end select
+ case(4)
+ select case(r)
+ case(0)
+ coeffs0 = numeval(null_vec, 0.0_ki)
+ amp = coeffs0 * a40(b_set)
+ case(1)
+ call reconstruct1(numeval, coeffs1)
+ amp = contract4_1(coeffs1,momenta,b_set)
+ case(2)
+ call reconstruct2(numeval, coeffs2, coeffs0)
+ amp = contract4_2(coeffs2,momenta,b_set)
+ amp = amp + contract4_2s1(coeffs0,momenta,b_set)
+ case(3)
+ call reconstruct3(numeval, coeffs3, coeffs1)
+ amp = contract4_3(coeffs3,momenta,b_set)
+ amp = amp + contract4_3s1(coeffs1,momenta,b_set)
+ case(4)
+ call reconstruct4(numeval, coeffs4, coeffs2, coeffs2x)
+ amp = contract4_4(coeffs4,momenta,b_set)
+ amp = amp + contract4_4s1(coeffs2,momenta,b_set)
+ amp = amp + contract4_4s2(coeffs2x,momenta,b_set)
+ case default
+ print*, "Not yet implemented: N, r = ", 4, r
+ stop
+ end select
+ case(5)
+ select case(r)
+ case(0)
+ coeffs0 = numeval(null_vec, 0.0_ki)
+ amp = coeffs0 * a50(b_set)
+ case(1)
+ call reconstruct1(numeval, coeffs1)
+ amp = contract5_1(coeffs1,momenta,b_set)
+ case(2)
+ call reconstruct2(numeval, coeffs2)
+ amp = contract5_2(coeffs2,momenta,b_set)
+ case(3)
+ call reconstruct3(numeval, coeffs3)
+ amp = contract5_3(coeffs3,momenta,b_set)
+ case(4)
+ call reconstruct4(numeval, coeffs4)
+ amp = contract5_4(coeffs4,momenta,b_set)
+ case(5)
+ call reconstruct5(numeval, coeffs5)
+ amp = contract5_5(coeffs5,momenta,b_set)
+ case default
+ print*, "Not yet implemented: N, r = ", 5, r
+ stop
+ end select
+ case(6)
+ select case(r)
+ case(0)
+ coeffs0 = numeval(null_vec, 0.0_ki)
+ amp = coeffs0 * a60(b_set)
+ case(1)
+ call reconstruct1(numeval, coeffs1)
+ amp = contract6_1(coeffs1,momenta,b_set)
+ case(2)
+ call reconstruct2(numeval, coeffs2)
+ amp = contract6_2(coeffs2,momenta,b_set)
+ case(3)
+ call reconstruct3(numeval, coeffs3)
+ amp = contract6_3(coeffs3,momenta,b_set)
+ case(4)
+ call reconstruct4(numeval, coeffs4)
+ amp = contract6_4(coeffs4,momenta,b_set)
+ case(5)
+ call reconstruct5(numeval, coeffs5)
+ amp = contract6_5(coeffs5,momenta,b_set)
+ case(6)
+ call reconstruct6(numeval, coeffs6)
+ amp = contract6_6(coeffs6,momenta,b_set)
+ case default
+ print*, "Not yet implemented: N, r = ", 6, r
+ stop
+ end select
+ case default
+ print*, "Not yet implemented: N=", N
+ stop
+ end select
+end function evaluate_b
+!****f* src/interface/tens_comb/contract1_1
+! NAME
+!
+! Function contract1_1
+!
+! USAGE
+!
+! amp = contract1_1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 1-point rank 1 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract1_1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1
+ integer, dimension(1) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 1)
+ l1 = unpinched(1)
+ amp = coeffs%c0 * a10(b_set)
+end function contract1_1
+!****f* src/interface/tens_comb/contract2_1
+! NAME
+!
+! Function contract2_1
+!
+! USAGE
+!
+! amp = contract2_1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 2-point rank 1 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract2_1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1, l2
+ integer, dimension(2) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 2)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ amp = coeffs%c0 * a20(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a21(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a21(l2, b_set)
+end function contract2_1
+!****f* src/interface/tens_comb/contract2_2
+! NAME
+!
+! Function contract2_2
+!
+! USAGE
+!
+! amp = contract2_2(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 2-point rank 2 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract2_2(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ integer :: l1, l2
+ integer, dimension(2) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 2)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ amp = coeffs%c0 * a20(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a21(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a21(l2, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a22(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a22(l1, l2, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a22(l2, l2, b_set)
+ amp = amp + contract_b_tensor_2(coeffs) * b22(b_set)
+end function contract2_2
+!****f* src/interface/tens_comb/contract2_2s1
+! NAME
+!
+! Function contract2_2s1
+!
+! USAGE
+!
+! amp = contract2_2s1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 2-point rank 2 tensor integral
+! with (mu^2)^1 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(complex(ki))
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract2_2s1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ complex(ki), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ integer :: l1, l2
+ integer, dimension(2) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 2)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ amp = coeffs * b22(b_set)
+ ! multiply by 2*epsilon
+ amp%c = 2.0_ki*amp%b
+ amp%b = 2.0_ki*amp%a
+ amp%a = 0.0_ki
+end function contract2_2s1
+!****f* src/interface/tens_comb/contract3_1
+! NAME
+!
+! Function contract3_1
+!
+! USAGE
+!
+! amp = contract3_1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 3-point rank 1 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract3_1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1, l2, l3
+ integer, dimension(3) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 3)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ amp = coeffs%c0 * a30(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a31(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a31(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a31(l3, b_set)
+end function contract3_1
+!****f* src/interface/tens_comb/contract3_2
+! NAME
+!
+! Function contract3_2
+!
+! USAGE
+!
+! amp = contract3_2(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 3-point rank 2 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract3_2(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ integer :: l1, l2, l3
+ integer, dimension(3) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 3)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ amp = coeffs%c0 * a30(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a31(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a31(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a31(l3, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a32(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a32(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a32(l1, l3, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a32(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a32(l2, l3, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a32(l3, l3, b_set)
+ amp = amp + contract_b_tensor_2(coeffs) * b32(b_set)
+end function contract3_2
+!****f* src/interface/tens_comb/contract3_2s1
+! NAME
+!
+! Function contract3_2s1
+!
+! USAGE
+!
+! amp = contract3_2s1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 3-point rank 2 tensor integral
+! with (mu^2)^1 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(complex(ki))
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract3_2s1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ complex(ki), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ integer :: l1, l2, l3
+ integer, dimension(3) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 3)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ amp = coeffs * b32(b_set)
+ ! multiply by 2*epsilon
+ amp%c = 2.0_ki*amp%b
+ amp%b = 2.0_ki*amp%a
+ amp%a = 0.0_ki
+end function contract3_2s1
+!****f* src/interface/tens_comb/contract3_3
+! NAME
+!
+! Function contract3_3
+!
+! USAGE
+!
+! amp = contract3_3(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 3-point rank 3 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_3)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract3_3(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ real(ki), dimension(3,0:3) :: mom3
+ integer :: l1, l2, l3
+ integer, dimension(3) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 3)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ amp = coeffs%c0 * a30(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a31(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a31(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a31(l3, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a32(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a32(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a32(l1, l3, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a32(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a32(l2, l3, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a32(l3, l3, b_set)
+ amp = amp + contract_b_tensor_3(coeffs) * b32(b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a33(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l1, l3, l3, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a33(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a33(l2, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a33(l3, l3, l3, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b33(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b33(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b33(l3, b_set)
+end function contract3_3
+!****f* src/interface/tens_comb/contract3_3s1
+! NAME
+!
+! Function contract3_3s1
+!
+! USAGE
+!
+! amp = contract3_3s1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 3-point rank 3 tensor integral
+! with (mu^2)^1 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract3_3s1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1, l2, l3
+ integer, dimension(3) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 3)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ amp = coeffs%c0 * b32(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * b33(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * b33(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * b33(l3, b_set)
+ ! multiply by 2*epsilon
+ amp%c = 2.0_ki*amp%b
+ amp%b = 2.0_ki*amp%a
+ amp%a = 0.0_ki
+end function contract3_3s1
+!****f* src/interface/tens_comb/contract4_1
+! NAME
+!
+! Function contract4_1
+!
+! USAGE
+!
+! amp = contract4_1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 1 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = coeffs%c0 * a40(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a41(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a41(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a41(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a41(l4, b_set)
+end function contract4_1
+!****f* src/interface/tens_comb/contract4_2
+! NAME
+!
+! Function contract4_2
+!
+! USAGE
+!
+! amp = contract4_2(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 2 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_2(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = coeffs%c0 * a40(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a41(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a41(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a41(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a41(l4, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a42(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a42(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a42(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a42(l1, l4, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a42(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a42(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a42(l2, l4, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a42(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a42(l3, l4, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a42(l4, l4, b_set)
+ amp = amp + contract_b_tensor_2(coeffs) * b42(b_set)
+end function contract4_2
+!****f* src/interface/tens_comb/contract4_2s1
+! NAME
+!
+! Function contract4_2s1
+!
+! USAGE
+!
+! amp = contract4_2s1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 2 tensor integral
+! with (mu^2)^1 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(complex(ki))
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_2s1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ complex(ki), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = 0.0_ki
+end function contract4_2s1
+!****f* src/interface/tens_comb/contract4_3
+! NAME
+!
+! Function contract4_3
+!
+! USAGE
+!
+! amp = contract4_3(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 3 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_3)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_3(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ real(ki), dimension(3,0:3) :: mom3
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = coeffs%c0 * a40(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a41(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a41(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a41(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a41(l4, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a42(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a42(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a42(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a42(l1, l4, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a42(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a42(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a42(l2, l4, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a42(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a42(l3, l4, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a42(l4, l4, b_set)
+ amp = amp + contract_b_tensor_3(coeffs) * b42(b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a43(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l1,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l1, l4, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l2,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l2, l4, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l3, l3, b_set)
+ mom3 = momenta((/l1,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l3, l4, b_set)
+ mom3 = momenta((/l1,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l1, l4, l4, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a43(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l2,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l2, l2, l4, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l2, l3, l3, b_set)
+ mom3 = momenta((/l2,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l2, l3, l4, b_set)
+ mom3 = momenta((/l2,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l2, l4, l4, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a43(l3, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l3, l3, l4, b_set)
+ mom3 = momenta((/l3,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a43(l3, l4, l4, b_set)
+ mom3 = momenta((/l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a43(l4, l4, l4, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b43(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b43(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b43(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b43(l4, b_set)
+end function contract4_3
+!****f* src/interface/tens_comb/contract4_3s1
+! NAME
+!
+! Function contract4_3s1
+!
+! USAGE
+!
+! amp = contract4_3s1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 3 tensor integral
+! with (mu^2)^1 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_3s1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = 0.0_ki
+end function contract4_3s1
+!****f* src/interface/tens_comb/contract4_4
+! NAME
+!
+! Function contract4_4
+!
+! USAGE
+!
+! amp = contract4_4(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 4 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_4)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_4(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ real(ki), dimension(3,0:3) :: mom3
+ real(ki), dimension(4,0:3) :: mom4
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = coeffs%c0 * a40(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a41(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a41(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a41(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a41(l4, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a42(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a42(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a42(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a42(l1, l4, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a42(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a42(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a42(l2, l4, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a42(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a42(l3, l4, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a42(l4, l4, b_set)
+ amp = amp + contract_b_tensor_4(coeffs) * b42(b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a43(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l1,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l1, l4, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l2,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l2, l4, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l3, l3, b_set)
+ mom3 = momenta((/l1,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l3, l4, b_set)
+ mom3 = momenta((/l1,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l1, l4, l4, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a43(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l2,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l2, l2, l4, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l2, l3, l3, b_set)
+ mom3 = momenta((/l2,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l2, l3, l4, b_set)
+ mom3 = momenta((/l2,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l2, l4, l4, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a43(l3, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l3, l3, l4, b_set)
+ mom3 = momenta((/l3,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a43(l3, l4, l4, b_set)
+ mom3 = momenta((/l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a43(l4, l4, l4, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b43(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b43(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b43(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b43(l4, b_set)
+ mom4 = momenta((/l1,l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a44(l1, l1, l1, l1, b_set)
+ mom4 = momenta((/l1,l1,l1,l2/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l1, l2, b_set)
+ mom4 = momenta((/l1,l1,l1,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l1, l3, b_set)
+ mom4 = momenta((/l1,l1,l1,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l1, l4, b_set)
+ mom4 = momenta((/l1,l1,l2,l2/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l2, l2, b_set)
+ mom4 = momenta((/l1,l1,l2,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l2, l3, b_set)
+ mom4 = momenta((/l1,l1,l2,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l2, l4, b_set)
+ mom4 = momenta((/l1,l1,l3,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l3, l3, b_set)
+ mom4 = momenta((/l1,l1,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l3, l4, b_set)
+ mom4 = momenta((/l1,l1,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l1, l4, l4, b_set)
+ mom4 = momenta((/l1,l2,l2,l2/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l2, l2, l2, b_set)
+ mom4 = momenta((/l1,l2,l2,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l2, l2, l3, b_set)
+ mom4 = momenta((/l1,l2,l2,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l2, l2, l4, b_set)
+ mom4 = momenta((/l1,l2,l3,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l2, l3, l3, b_set)
+ mom4 = momenta((/l1,l2,l3,l4/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l2, l3, l4, b_set)
+ mom4 = momenta((/l1,l2,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l2, l4, l4, b_set)
+ mom4 = momenta((/l1,l3,l3,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l3, l3, l3, b_set)
+ mom4 = momenta((/l1,l3,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l3, l3, l4, b_set)
+ mom4 = momenta((/l1,l3,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l3, l4, l4, b_set)
+ mom4 = momenta((/l1,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l1, l4, l4, l4, b_set)
+ mom4 = momenta((/l2,l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a44(l2, l2, l2, l2, b_set)
+ mom4 = momenta((/l2,l2,l2,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l2, l2, l3, b_set)
+ mom4 = momenta((/l2,l2,l2,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l2, l2, l4, b_set)
+ mom4 = momenta((/l2,l2,l3,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l2, l3, l3, b_set)
+ mom4 = momenta((/l2,l2,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l2, l3, l4, b_set)
+ mom4 = momenta((/l2,l2,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l2, l4, l4, b_set)
+ mom4 = momenta((/l2,l3,l3,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l3, l3, l3, b_set)
+ mom4 = momenta((/l2,l3,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l3, l3, l4, b_set)
+ mom4 = momenta((/l2,l3,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l3, l4, l4, b_set)
+ mom4 = momenta((/l2,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l2, l4, l4, l4, b_set)
+ mom4 = momenta((/l3,l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a44(l3, l3, l3, l3, b_set)
+ mom4 = momenta((/l3,l3,l3,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l3, l3, l3, l4, b_set)
+ mom4 = momenta((/l3,l3,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l3, l3, l4, l4, b_set)
+ mom4 = momenta((/l3,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a44(l3, l4, l4, l4, b_set)
+ mom4 = momenta((/l4,l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a44(l4, l4, l4, l4, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b44(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b44(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b44(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b44(l1, l4, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b44(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b44(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b44(l2, l4, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b44(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b44(l3, l4, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b44(l4, l4, b_set)
+ amp = amp + contract_c_tensor_4(coeffs) * c44(b_set)
+end function contract4_4
+!****f* src/interface/tens_comb/contract4_4s1
+! NAME
+!
+! Function contract4_4s1
+!
+! USAGE
+!
+! amp = contract4_4s1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 4 tensor integral
+! with (mu^2)^1 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_4s1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = contract_b_tensor_2(coeffs) * c44(b_set)
+ ! multiply by 2*epsilon
+ amp%c = 2.0_ki*amp%b
+ amp%b = 2.0_ki*amp%a
+ amp%a = 0.0_ki
+end function contract4_4s1
+!****f* src/interface/tens_comb/contract4_4s2
+! NAME
+!
+! Function contract4_4s2
+!
+! USAGE
+!
+! amp = contract4_4s2(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 4-point rank 4 tensor integral
+! with (mu^2)^2 in the numerator with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract4_4s2(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ integer :: l1, l2, l3, l4
+ integer, dimension(4) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 4)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ amp = coeffs%c0 * c44(b_set)
+ ! multiply by -4*(epsilon-epsilon^2)
+ amp%c = -4.0_ki*(amp%b-amp%a)
+ amp%b = -4.0_ki*amp%a
+ amp%a = 0.0_ki
+end function contract4_4s2
+!****f* src/interface/tens_comb/contract5_1
+! NAME
+!
+! Function contract5_1
+!
+! USAGE
+!
+! amp = contract5_1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 5-point rank 1 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract5_1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ integer :: l1, l2, l3, l4, l5
+ integer, dimension(5) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 5)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ l5 = unpinched(5)
+ amp = coeffs%c0 * a50(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a51(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a51(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a51(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a51(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_a_tensor_1(coeffs, mom1) * a51(l5, b_set)
+end function contract5_1
+!****f* src/interface/tens_comb/contract5_2
+! NAME
+!
+! Function contract5_2
+!
+! USAGE
+!
+! amp = contract5_2(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 5-point rank 2 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract5_2(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ integer :: l1, l2, l3, l4, l5
+ integer, dimension(5) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 5)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ l5 = unpinched(5)
+ amp = coeffs%c0 * a50(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a51(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a51(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a51(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a51(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom1) * a51(l5, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a52(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l1, l4, b_set)
+ mom2 = momenta((/l1,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l1, l5, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a52(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l2, l4, b_set)
+ mom2 = momenta((/l2,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l2, l5, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a52(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l3, l4, b_set)
+ mom2 = momenta((/l3,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l3, l5, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a52(l4, l4, b_set)
+ mom2 = momenta((/l4,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_2(coeffs, mom2) * a52(l4, l5, b_set)
+ mom2 = momenta((/l5,l5/),:)
+ amp = amp + contract_a_tensor_2(coeffs, mom2) * a52(l5, l5, b_set)
+ amp = amp + contract_b_tensor_2(coeffs) * b52(b_set)
+end function contract5_2
+!****f* src/interface/tens_comb/contract5_3
+! NAME
+!
+! Function contract5_3
+!
+! USAGE
+!
+! amp = contract5_3(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 5-point rank 3 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_3)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract5_3(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ real(ki), dimension(3,0:3) :: mom3
+ integer :: l1, l2, l3, l4, l5
+ integer, dimension(5) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 5)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ l5 = unpinched(5)
+ amp = coeffs%c0 * a50(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a51(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a51(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a51(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a51(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom1) * a51(l5, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a52(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l1, l4, b_set)
+ mom2 = momenta((/l1,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l1, l5, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a52(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l2, l4, b_set)
+ mom2 = momenta((/l2,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l2, l5, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a52(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l3, l4, b_set)
+ mom2 = momenta((/l3,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l3, l5, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a52(l4, l4, b_set)
+ mom2 = momenta((/l4,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_3(coeffs, mom2) * a52(l4, l5, b_set)
+ mom2 = momenta((/l5,l5/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom2) * a52(l5, l5, b_set)
+ amp = amp + contract_b_tensor_3(coeffs) * b52(b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a53(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l1,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l1, l4, b_set)
+ mom3 = momenta((/l1,l1,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l1, l5, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l2,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l2, l4, b_set)
+ mom3 = momenta((/l1,l2,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l2, l5, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l3, l3, b_set)
+ mom3 = momenta((/l1,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l3, l4, b_set)
+ mom3 = momenta((/l1,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l3, l5, b_set)
+ mom3 = momenta((/l1,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l4, l4, b_set)
+ mom3 = momenta((/l1,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l4, l5, b_set)
+ mom3 = momenta((/l1,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l1, l5, l5, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a53(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l2,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l2, l4, b_set)
+ mom3 = momenta((/l2,l2,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l2, l5, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l3, l3, b_set)
+ mom3 = momenta((/l2,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l3, l4, b_set)
+ mom3 = momenta((/l2,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l3, l5, b_set)
+ mom3 = momenta((/l2,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l4, l4, b_set)
+ mom3 = momenta((/l2,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l4, l5, b_set)
+ mom3 = momenta((/l2,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l2, l5, l5, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a53(l3, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l3, l3, l4, b_set)
+ mom3 = momenta((/l3,l3,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l3, l3, l5, b_set)
+ mom3 = momenta((/l3,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l3, l4, l4, b_set)
+ mom3 = momenta((/l3,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l3, l4, l5, b_set)
+ mom3 = momenta((/l3,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l3, l5, l5, b_set)
+ mom3 = momenta((/l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a53(l4, l4, l4, b_set)
+ mom3 = momenta((/l4,l4,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l4, l4, l5, b_set)
+ mom3 = momenta((/l4,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_3(coeffs, mom3) &
+ & * a53(l4, l5, l5, b_set)
+ mom3 = momenta((/l5,l5,l5/),:)
+ amp = amp + contract_a_tensor_3(coeffs, mom3) * a53(l5, l5, l5, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b53(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b53(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b53(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b53(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_b_tensor_3(coeffs, mom1) * b53(l5, b_set)
+end function contract5_3
+!****f* src/interface/tens_comb/contract5_4
+! NAME
+!
+! Function contract5_4
+!
+! USAGE
+!
+! amp = contract5_4(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 5-point rank 4 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_4)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract5_4(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ real(ki), dimension(3,0:3) :: mom3
+ real(ki), dimension(4,0:3) :: mom4
+ integer :: l1, l2, l3, l4, l5
+ integer, dimension(5) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 5)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ l5 = unpinched(5)
+ amp = coeffs%c0 * a50(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a51(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a51(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a51(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a51(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom1) * a51(l5, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a52(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l1, l4, b_set)
+ mom2 = momenta((/l1,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l1, l5, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a52(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l2, l4, b_set)
+ mom2 = momenta((/l2,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l2, l5, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a52(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l3, l4, b_set)
+ mom2 = momenta((/l3,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l3, l5, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a52(l4, l4, b_set)
+ mom2 = momenta((/l4,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_4(coeffs, mom2) * a52(l4, l5, b_set)
+ mom2 = momenta((/l5,l5/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom2) * a52(l5, l5, b_set)
+ amp = amp + contract_b_tensor_4(coeffs) * b52(b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a53(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l1,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l1, l4, b_set)
+ mom3 = momenta((/l1,l1,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l1, l5, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l2,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l2, l4, b_set)
+ mom3 = momenta((/l1,l2,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l2, l5, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l3, l3, b_set)
+ mom3 = momenta((/l1,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l3, l4, b_set)
+ mom3 = momenta((/l1,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l3, l5, b_set)
+ mom3 = momenta((/l1,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l4, l4, b_set)
+ mom3 = momenta((/l1,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l4, l5, b_set)
+ mom3 = momenta((/l1,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l1, l5, l5, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a53(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l2,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l2, l4, b_set)
+ mom3 = momenta((/l2,l2,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l2, l5, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l3, l3, b_set)
+ mom3 = momenta((/l2,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l3, l4, b_set)
+ mom3 = momenta((/l2,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l3, l5, b_set)
+ mom3 = momenta((/l2,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l4, l4, b_set)
+ mom3 = momenta((/l2,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l4, l5, b_set)
+ mom3 = momenta((/l2,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l2, l5, l5, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a53(l3, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l3, l3, l4, b_set)
+ mom3 = momenta((/l3,l3,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l3, l3, l5, b_set)
+ mom3 = momenta((/l3,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l3, l4, l4, b_set)
+ mom3 = momenta((/l3,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l3, l4, l5, b_set)
+ mom3 = momenta((/l3,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l3, l5, l5, b_set)
+ mom3 = momenta((/l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a53(l4, l4, l4, b_set)
+ mom3 = momenta((/l4,l4,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l4, l4, l5, b_set)
+ mom3 = momenta((/l4,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_4(coeffs, mom3) &
+ & * a53(l4, l5, l5, b_set)
+ mom3 = momenta((/l5,l5,l5/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom3) * a53(l5, l5, l5, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b53(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b53(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b53(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b53(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom1) * b53(l5, b_set)
+ mom4 = momenta((/l1,l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a54(l1, l1, l1, l1, b_set)
+ mom4 = momenta((/l1,l1,l1,l2/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l1, l2, b_set)
+ mom4 = momenta((/l1,l1,l1,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l1, l3, b_set)
+ mom4 = momenta((/l1,l1,l1,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l1, l4, b_set)
+ mom4 = momenta((/l1,l1,l1,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l1, l5, b_set)
+ mom4 = momenta((/l1,l1,l2,l2/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l2, l2, b_set)
+ mom4 = momenta((/l1,l1,l2,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l2, l3, b_set)
+ mom4 = momenta((/l1,l1,l2,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l2, l4, b_set)
+ mom4 = momenta((/l1,l1,l2,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l2, l5, b_set)
+ mom4 = momenta((/l1,l1,l3,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l3, l3, b_set)
+ mom4 = momenta((/l1,l1,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l3, l4, b_set)
+ mom4 = momenta((/l1,l1,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l3, l5, b_set)
+ mom4 = momenta((/l1,l1,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l4, l4, b_set)
+ mom4 = momenta((/l1,l1,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l4, l5, b_set)
+ mom4 = momenta((/l1,l1,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l1, l5, l5, b_set)
+ mom4 = momenta((/l1,l2,l2,l2/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l2, l2, b_set)
+ mom4 = momenta((/l1,l2,l2,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l2, l3, b_set)
+ mom4 = momenta((/l1,l2,l2,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l2, l4, b_set)
+ mom4 = momenta((/l1,l2,l2,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l2, l5, b_set)
+ mom4 = momenta((/l1,l2,l3,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l3, l3, b_set)
+ mom4 = momenta((/l1,l2,l3,l4/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l3, l4, b_set)
+ mom4 = momenta((/l1,l2,l3,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l3, l5, b_set)
+ mom4 = momenta((/l1,l2,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l4, l4, b_set)
+ mom4 = momenta((/l1,l2,l4,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l4, l5, b_set)
+ mom4 = momenta((/l1,l2,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l2, l5, l5, b_set)
+ mom4 = momenta((/l1,l3,l3,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l3, l3, l3, b_set)
+ mom4 = momenta((/l1,l3,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l3, l3, l4, b_set)
+ mom4 = momenta((/l1,l3,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l3, l3, l5, b_set)
+ mom4 = momenta((/l1,l3,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l3, l4, l4, b_set)
+ mom4 = momenta((/l1,l3,l4,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l3, l4, l5, b_set)
+ mom4 = momenta((/l1,l3,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l3, l5, l5, b_set)
+ mom4 = momenta((/l1,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l4, l4, l4, b_set)
+ mom4 = momenta((/l1,l4,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l4, l4, l5, b_set)
+ mom4 = momenta((/l1,l4,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l4, l5, l5, b_set)
+ mom4 = momenta((/l1,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l1, l5, l5, l5, b_set)
+ mom4 = momenta((/l2,l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a54(l2, l2, l2, l2, b_set)
+ mom4 = momenta((/l2,l2,l2,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l2, l3, b_set)
+ mom4 = momenta((/l2,l2,l2,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l2, l4, b_set)
+ mom4 = momenta((/l2,l2,l2,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l2, l5, b_set)
+ mom4 = momenta((/l2,l2,l3,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l3, l3, b_set)
+ mom4 = momenta((/l2,l2,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l3, l4, b_set)
+ mom4 = momenta((/l2,l2,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l3, l5, b_set)
+ mom4 = momenta((/l2,l2,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l4, l4, b_set)
+ mom4 = momenta((/l2,l2,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l4, l5, b_set)
+ mom4 = momenta((/l2,l2,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l2, l5, l5, b_set)
+ mom4 = momenta((/l2,l3,l3,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l3, l3, l3, b_set)
+ mom4 = momenta((/l2,l3,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l3, l3, l4, b_set)
+ mom4 = momenta((/l2,l3,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l3, l3, l5, b_set)
+ mom4 = momenta((/l2,l3,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l3, l4, l4, b_set)
+ mom4 = momenta((/l2,l3,l4,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l3, l4, l5, b_set)
+ mom4 = momenta((/l2,l3,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l3, l5, l5, b_set)
+ mom4 = momenta((/l2,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l4, l4, l4, b_set)
+ mom4 = momenta((/l2,l4,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l4, l4, l5, b_set)
+ mom4 = momenta((/l2,l4,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l4, l5, l5, b_set)
+ mom4 = momenta((/l2,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l2, l5, l5, l5, b_set)
+ mom4 = momenta((/l3,l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a54(l3, l3, l3, l3, b_set)
+ mom4 = momenta((/l3,l3,l3,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l3, l3, l4, b_set)
+ mom4 = momenta((/l3,l3,l3,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l3, l3, l5, b_set)
+ mom4 = momenta((/l3,l3,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l3, l4, l4, b_set)
+ mom4 = momenta((/l3,l3,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l3, l4, l5, b_set)
+ mom4 = momenta((/l3,l3,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l3, l5, l5, b_set)
+ mom4 = momenta((/l3,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l4, l4, l4, b_set)
+ mom4 = momenta((/l3,l4,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l4, l4, l5, b_set)
+ mom4 = momenta((/l3,l4,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l4, l5, l5, b_set)
+ mom4 = momenta((/l3,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l3, l5, l5, l5, b_set)
+ mom4 = momenta((/l4,l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a54(l4, l4, l4, l4, b_set)
+ mom4 = momenta((/l4,l4,l4,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l4, l4, l4, l5, b_set)
+ mom4 = momenta((/l4,l4,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l4, l4, l5, l5, b_set)
+ mom4 = momenta((/l4,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_4(coeffs, mom4) &
+ & * a54(l4, l5, l5, l5, b_set)
+ mom4 = momenta((/l5,l5,l5,l5/),:)
+ amp = amp + contract_a_tensor_4(coeffs, mom4) * a54(l5, l5, l5, l5, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b54(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l1, l4, b_set)
+ mom2 = momenta((/l1,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l1, l5, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b54(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l2, l4, b_set)
+ mom2 = momenta((/l2,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l2, l5, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b54(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l3, l4, b_set)
+ mom2 = momenta((/l3,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l3, l5, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b54(l4, l4, b_set)
+ mom2 = momenta((/l4,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_4(coeffs, mom2) * b54(l4, l5, b_set)
+ mom2 = momenta((/l5,l5/),:)
+ amp = amp + contract_b_tensor_4(coeffs, mom2) * b54(l5, l5, b_set)
+ amp = amp + contract_c_tensor_4(coeffs) * c54(b_set)
+end function contract5_4
+!****f* src/interface/tens_comb/contract5_5
+! NAME
+!
+! Function contract5_5
+!
+! USAGE
+!
+! amp = contract5_5(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 5-point rank 5 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_5)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract5_5(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_5), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_simple
+ real(ki), dimension(1,0:3) :: mom1
+ real(ki), dimension(2,0:3) :: mom2
+ real(ki), dimension(3,0:3) :: mom3
+ real(ki), dimension(4,0:3) :: mom4
+ real(ki), dimension(5,0:3) :: mom5
+ integer :: l1, l2, l3, l4, l5
+ integer, dimension(5) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 5)
+ l1 = unpinched(1)
+ l2 = unpinched(2)
+ l3 = unpinched(3)
+ l4 = unpinched(4)
+ l5 = unpinched(5)
+ amp = coeffs%c0 * a50(b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom1) * a51(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom1) * a51(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom1) * a51(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom1) * a51(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom1) * a51(l5, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom2) * a52(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l1, l4, b_set)
+ mom2 = momenta((/l1,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l1, l5, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom2) * a52(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l2, l4, b_set)
+ mom2 = momenta((/l2,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l2, l5, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom2) * a52(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l3, l4, b_set)
+ mom2 = momenta((/l3,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l3, l5, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom2) * a52(l4, l4, b_set)
+ mom2 = momenta((/l4,l5/),:)
+ amp = amp + 2.0_ki * contract_a_tensor_5(coeffs, mom2) * a52(l4, l5, b_set)
+ mom2 = momenta((/l5,l5/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom2) * a52(l5, l5, b_set)
+ amp = amp + contract_b_tensor_5(coeffs) * b52(b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom3) * a53(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l1,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l1, l4, b_set)
+ mom3 = momenta((/l1,l1,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l1, l5, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l2,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l2, l4, b_set)
+ mom3 = momenta((/l1,l2,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l2, l5, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l3, l3, b_set)
+ mom3 = momenta((/l1,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l3, l4, b_set)
+ mom3 = momenta((/l1,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l3, l5, b_set)
+ mom3 = momenta((/l1,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l4, l4, b_set)
+ mom3 = momenta((/l1,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l4, l5, b_set)
+ mom3 = momenta((/l1,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l1, l5, l5, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom3) * a53(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l2,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l2, l4, b_set)
+ mom3 = momenta((/l2,l2,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l2, l5, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l3, l3, b_set)
+ mom3 = momenta((/l2,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l3, l4, b_set)
+ mom3 = momenta((/l2,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l3, l5, b_set)
+ mom3 = momenta((/l2,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l4, l4, b_set)
+ mom3 = momenta((/l2,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l4, l5, b_set)
+ mom3 = momenta((/l2,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l2, l5, l5, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom3) * a53(l3, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l3, l3, l4, b_set)
+ mom3 = momenta((/l3,l3,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l3, l3, l5, b_set)
+ mom3 = momenta((/l3,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l3, l4, l4, b_set)
+ mom3 = momenta((/l3,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l3, l4, l5, b_set)
+ mom3 = momenta((/l3,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l3, l5, l5, b_set)
+ mom3 = momenta((/l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom3) * a53(l4, l4, l4, b_set)
+ mom3 = momenta((/l4,l4,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l4, l4, l5, b_set)
+ mom3 = momenta((/l4,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_a_tensor_5(coeffs, mom3) &
+ & * a53(l4, l5, l5, b_set)
+ mom3 = momenta((/l5,l5,l5/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom3) * a53(l5, l5, l5, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom1) * b53(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom1) * b53(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom1) * b53(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom1) * b53(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom1) * b53(l5, b_set)
+ mom4 = momenta((/l1,l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom4) * a54(l1, l1, l1, l1, b_set)
+ mom4 = momenta((/l1,l1,l1,l2/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l1, l2, b_set)
+ mom4 = momenta((/l1,l1,l1,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l1, l3, b_set)
+ mom4 = momenta((/l1,l1,l1,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l1, l4, b_set)
+ mom4 = momenta((/l1,l1,l1,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l1, l5, b_set)
+ mom4 = momenta((/l1,l1,l2,l2/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l2, l2, b_set)
+ mom4 = momenta((/l1,l1,l2,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l2, l3, b_set)
+ mom4 = momenta((/l1,l1,l2,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l2, l4, b_set)
+ mom4 = momenta((/l1,l1,l2,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l2, l5, b_set)
+ mom4 = momenta((/l1,l1,l3,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l3, l3, b_set)
+ mom4 = momenta((/l1,l1,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l3, l4, b_set)
+ mom4 = momenta((/l1,l1,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l3, l5, b_set)
+ mom4 = momenta((/l1,l1,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l4, l4, b_set)
+ mom4 = momenta((/l1,l1,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l4, l5, b_set)
+ mom4 = momenta((/l1,l1,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l1, l5, l5, b_set)
+ mom4 = momenta((/l1,l2,l2,l2/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l2, l2, b_set)
+ mom4 = momenta((/l1,l2,l2,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l2, l3, b_set)
+ mom4 = momenta((/l1,l2,l2,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l2, l4, b_set)
+ mom4 = momenta((/l1,l2,l2,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l2, l5, b_set)
+ mom4 = momenta((/l1,l2,l3,l3/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l3, l3, b_set)
+ mom4 = momenta((/l1,l2,l3,l4/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l3, l4, b_set)
+ mom4 = momenta((/l1,l2,l3,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l3, l5, b_set)
+ mom4 = momenta((/l1,l2,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l4, l4, b_set)
+ mom4 = momenta((/l1,l2,l4,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l4, l5, b_set)
+ mom4 = momenta((/l1,l2,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l2, l5, l5, b_set)
+ mom4 = momenta((/l1,l3,l3,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l3, l3, l3, b_set)
+ mom4 = momenta((/l1,l3,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l3, l3, l4, b_set)
+ mom4 = momenta((/l1,l3,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l3, l3, l5, b_set)
+ mom4 = momenta((/l1,l3,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l3, l4, l4, b_set)
+ mom4 = momenta((/l1,l3,l4,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l3, l4, l5, b_set)
+ mom4 = momenta((/l1,l3,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l3, l5, l5, b_set)
+ mom4 = momenta((/l1,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l4, l4, l4, b_set)
+ mom4 = momenta((/l1,l4,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l4, l4, l5, b_set)
+ mom4 = momenta((/l1,l4,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l4, l5, l5, b_set)
+ mom4 = momenta((/l1,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l1, l5, l5, l5, b_set)
+ mom4 = momenta((/l2,l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom4) * a54(l2, l2, l2, l2, b_set)
+ mom4 = momenta((/l2,l2,l2,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l2, l3, b_set)
+ mom4 = momenta((/l2,l2,l2,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l2, l4, b_set)
+ mom4 = momenta((/l2,l2,l2,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l2, l5, b_set)
+ mom4 = momenta((/l2,l2,l3,l3/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l3, l3, b_set)
+ mom4 = momenta((/l2,l2,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l3, l4, b_set)
+ mom4 = momenta((/l2,l2,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l3, l5, b_set)
+ mom4 = momenta((/l2,l2,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l4, l4, b_set)
+ mom4 = momenta((/l2,l2,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l4, l5, b_set)
+ mom4 = momenta((/l2,l2,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l2, l5, l5, b_set)
+ mom4 = momenta((/l2,l3,l3,l3/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l3, l3, l3, b_set)
+ mom4 = momenta((/l2,l3,l3,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l3, l3, l4, b_set)
+ mom4 = momenta((/l2,l3,l3,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l3, l3, l5, b_set)
+ mom4 = momenta((/l2,l3,l4,l4/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l3, l4, l4, b_set)
+ mom4 = momenta((/l2,l3,l4,l5/),:)
+ amp = amp + 24.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l3, l4, l5, b_set)
+ mom4 = momenta((/l2,l3,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l3, l5, l5, b_set)
+ mom4 = momenta((/l2,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l4, l4, l4, b_set)
+ mom4 = momenta((/l2,l4,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l4, l4, l5, b_set)
+ mom4 = momenta((/l2,l4,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l4, l5, l5, b_set)
+ mom4 = momenta((/l2,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l2, l5, l5, l5, b_set)
+ mom4 = momenta((/l3,l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom4) * a54(l3, l3, l3, l3, b_set)
+ mom4 = momenta((/l3,l3,l3,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l3, l3, l4, b_set)
+ mom4 = momenta((/l3,l3,l3,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l3, l3, l5, b_set)
+ mom4 = momenta((/l3,l3,l4,l4/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l3, l4, l4, b_set)
+ mom4 = momenta((/l3,l3,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l3, l4, l5, b_set)
+ mom4 = momenta((/l3,l3,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l3, l5, l5, b_set)
+ mom4 = momenta((/l3,l4,l4,l4/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l4, l4, l4, b_set)
+ mom4 = momenta((/l3,l4,l4,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l4, l4, l5, b_set)
+ mom4 = momenta((/l3,l4,l5,l5/),:)
+ amp = amp + 12.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l4, l5, l5, b_set)
+ mom4 = momenta((/l3,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l3, l5, l5, l5, b_set)
+ mom4 = momenta((/l4,l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom4) * a54(l4, l4, l4, l4, b_set)
+ mom4 = momenta((/l4,l4,l4,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l4, l4, l4, l5, b_set)
+ mom4 = momenta((/l4,l4,l5,l5/),:)
+ amp = amp + 6.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l4, l4, l5, l5, b_set)
+ mom4 = momenta((/l4,l5,l5,l5/),:)
+ amp = amp + 4.0_ki * contract_a_tensor_5(coeffs, mom4) &
+ & * a54(l4, l5, l5, l5, b_set)
+ mom4 = momenta((/l5,l5,l5,l5/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom4) * a54(l5, l5, l5, l5, b_set)
+ mom2 = momenta((/l1,l1/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom2) * b54(l1, l1, b_set)
+ mom2 = momenta((/l1,l2/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l1, l2, b_set)
+ mom2 = momenta((/l1,l3/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l1, l3, b_set)
+ mom2 = momenta((/l1,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l1, l4, b_set)
+ mom2 = momenta((/l1,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l1, l5, b_set)
+ mom2 = momenta((/l2,l2/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom2) * b54(l2, l2, b_set)
+ mom2 = momenta((/l2,l3/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l2, l3, b_set)
+ mom2 = momenta((/l2,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l2, l4, b_set)
+ mom2 = momenta((/l2,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l2, l5, b_set)
+ mom2 = momenta((/l3,l3/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom2) * b54(l3, l3, b_set)
+ mom2 = momenta((/l3,l4/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l3, l4, b_set)
+ mom2 = momenta((/l3,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l3, l5, b_set)
+ mom2 = momenta((/l4,l4/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom2) * b54(l4, l4, b_set)
+ mom2 = momenta((/l4,l5/),:)
+ amp = amp + 2.0_ki * contract_b_tensor_5(coeffs, mom2) * b54(l4, l5, b_set)
+ mom2 = momenta((/l5,l5/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom2) * b54(l5, l5, b_set)
+ amp = amp + contract_c_tensor_5(coeffs) * c54(b_set)
+ mom5 = momenta((/l1,l1,l1,l1,l1/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l1, l1, b_set)
+ mom5 = momenta((/l1,l1,l1,l1,l2/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l1, l2, b_set)
+ mom5 = momenta((/l1,l1,l1,l1,l3/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l1, l3, b_set)
+ mom5 = momenta((/l1,l1,l1,l1,l4/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l1, l4, b_set)
+ mom5 = momenta((/l1,l1,l1,l1,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l1, l5, b_set)
+ mom5 = momenta((/l1,l1,l1,l2,l2/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l2, l2, b_set)
+ mom5 = momenta((/l1,l1,l1,l2,l3/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l2, l3, b_set)
+ mom5 = momenta((/l1,l1,l1,l2,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l2, l4, b_set)
+ mom5 = momenta((/l1,l1,l1,l2,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l2, l5, b_set)
+ mom5 = momenta((/l1,l1,l1,l3,l3/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l3, l3, b_set)
+ mom5 = momenta((/l1,l1,l1,l3,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l3, l4, b_set)
+ mom5 = momenta((/l1,l1,l1,l3,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l3, l5, b_set)
+ mom5 = momenta((/l1,l1,l1,l4,l4/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l4, l4, b_set)
+ mom5 = momenta((/l1,l1,l1,l4,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l4, l5, b_set)
+ mom5 = momenta((/l1,l1,l1,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l1, l5, l5, b_set)
+ mom5 = momenta((/l1,l1,l2,l2,l2/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l2, l2, b_set)
+ mom5 = momenta((/l1,l1,l2,l2,l3/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l2, l3, b_set)
+ mom5 = momenta((/l1,l1,l2,l2,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l2, l4, b_set)
+ mom5 = momenta((/l1,l1,l2,l2,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l2, l5, b_set)
+ mom5 = momenta((/l1,l1,l2,l3,l3/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l3, l3, b_set)
+ mom5 = momenta((/l1,l1,l2,l3,l4/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l3, l4, b_set)
+ mom5 = momenta((/l1,l1,l2,l3,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l3, l5, b_set)
+ mom5 = momenta((/l1,l1,l2,l4,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l4, l4, b_set)
+ mom5 = momenta((/l1,l1,l2,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l4, l5, b_set)
+ mom5 = momenta((/l1,l1,l2,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l2, l5, l5, b_set)
+ mom5 = momenta((/l1,l1,l3,l3,l3/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l3, l3, l3, b_set)
+ mom5 = momenta((/l1,l1,l3,l3,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l3, l3, l4, b_set)
+ mom5 = momenta((/l1,l1,l3,l3,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l3, l3, l5, b_set)
+ mom5 = momenta((/l1,l1,l3,l4,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l3, l4, l4, b_set)
+ mom5 = momenta((/l1,l1,l3,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l3, l4, l5, b_set)
+ mom5 = momenta((/l1,l1,l3,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l3, l5, l5, b_set)
+ mom5 = momenta((/l1,l1,l4,l4,l4/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l4, l4, l4, b_set)
+ mom5 = momenta((/l1,l1,l4,l4,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l4, l4, l5, b_set)
+ mom5 = momenta((/l1,l1,l4,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l4, l5, l5, b_set)
+ mom5 = momenta((/l1,l1,l5,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l1, l5, l5, l5, b_set)
+ mom5 = momenta((/l1,l2,l2,l2,l2/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l2, l2, b_set)
+ mom5 = momenta((/l1,l2,l2,l2,l3/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l2, l3, b_set)
+ mom5 = momenta((/l1,l2,l2,l2,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l2, l4, b_set)
+ mom5 = momenta((/l1,l2,l2,l2,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l2, l5, b_set)
+ mom5 = momenta((/l1,l2,l2,l3,l3/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l3, l3, b_set)
+ mom5 = momenta((/l1,l2,l2,l3,l4/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l3, l4, b_set)
+ mom5 = momenta((/l1,l2,l2,l3,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l3, l5, b_set)
+ mom5 = momenta((/l1,l2,l2,l4,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l4, l4, b_set)
+ mom5 = momenta((/l1,l2,l2,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l4, l5, b_set)
+ mom5 = momenta((/l1,l2,l2,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l2, l5, l5, b_set)
+ mom5 = momenta((/l1,l2,l3,l3,l3/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l3, l3, l3, b_set)
+ mom5 = momenta((/l1,l2,l3,l3,l4/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l3, l3, l4, b_set)
+ mom5 = momenta((/l1,l2,l3,l3,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l3, l3, l5, b_set)
+ mom5 = momenta((/l1,l2,l3,l4,l4/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l3, l4, l4, b_set)
+ mom5 = momenta((/l1,l2,l3,l4,l5/),:)
+ amp = amp + 120.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l3, l4, l5, b_set)
+ mom5 = momenta((/l1,l2,l3,l5,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l3, l5, l5, b_set)
+ mom5 = momenta((/l1,l2,l4,l4,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l4, l4, l4, b_set)
+ mom5 = momenta((/l1,l2,l4,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l4, l4, l5, b_set)
+ mom5 = momenta((/l1,l2,l4,l5,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l4, l5, l5, b_set)
+ mom5 = momenta((/l1,l2,l5,l5,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l2, l5, l5, l5, b_set)
+ mom5 = momenta((/l1,l3,l3,l3,l3/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l3, l3, l3, b_set)
+ mom5 = momenta((/l1,l3,l3,l3,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l3, l3, l4, b_set)
+ mom5 = momenta((/l1,l3,l3,l3,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l3, l3, l5, b_set)
+ mom5 = momenta((/l1,l3,l3,l4,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l3, l4, l4, b_set)
+ mom5 = momenta((/l1,l3,l3,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l3, l4, l5, b_set)
+ mom5 = momenta((/l1,l3,l3,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l3, l5, l5, b_set)
+ mom5 = momenta((/l1,l3,l4,l4,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l4, l4, l4, b_set)
+ mom5 = momenta((/l1,l3,l4,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l4, l4, l5, b_set)
+ mom5 = momenta((/l1,l3,l4,l5,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l4, l5, l5, b_set)
+ mom5 = momenta((/l1,l3,l5,l5,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l3, l5, l5, l5, b_set)
+ mom5 = momenta((/l1,l4,l4,l4,l4/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l4, l4, l4, l4, b_set)
+ mom5 = momenta((/l1,l4,l4,l4,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l4, l4, l4, l5, b_set)
+ mom5 = momenta((/l1,l4,l4,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l4, l4, l5, l5, b_set)
+ mom5 = momenta((/l1,l4,l5,l5,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l4, l5, l5, l5, b_set)
+ mom5 = momenta((/l1,l5,l5,l5,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l1, l5, l5, l5, l5, b_set)
+ mom5 = momenta((/l2,l2,l2,l2,l2/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l2, l2, b_set)
+ mom5 = momenta((/l2,l2,l2,l2,l3/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l2, l3, b_set)
+ mom5 = momenta((/l2,l2,l2,l2,l4/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l2, l4, b_set)
+ mom5 = momenta((/l2,l2,l2,l2,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l2, l5, b_set)
+ mom5 = momenta((/l2,l2,l2,l3,l3/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l3, l3, b_set)
+ mom5 = momenta((/l2,l2,l2,l3,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l3, l4, b_set)
+ mom5 = momenta((/l2,l2,l2,l3,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l3, l5, b_set)
+ mom5 = momenta((/l2,l2,l2,l4,l4/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l4, l4, b_set)
+ mom5 = momenta((/l2,l2,l2,l4,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l4, l5, b_set)
+ mom5 = momenta((/l2,l2,l2,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l2, l5, l5, b_set)
+ mom5 = momenta((/l2,l2,l3,l3,l3/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l3, l3, l3, b_set)
+ mom5 = momenta((/l2,l2,l3,l3,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l3, l3, l4, b_set)
+ mom5 = momenta((/l2,l2,l3,l3,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l3, l3, l5, b_set)
+ mom5 = momenta((/l2,l2,l3,l4,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l3, l4, l4, b_set)
+ mom5 = momenta((/l2,l2,l3,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l3, l4, l5, b_set)
+ mom5 = momenta((/l2,l2,l3,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l3, l5, l5, b_set)
+ mom5 = momenta((/l2,l2,l4,l4,l4/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l4, l4, l4, b_set)
+ mom5 = momenta((/l2,l2,l4,l4,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l4, l4, l5, b_set)
+ mom5 = momenta((/l2,l2,l4,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l4, l5, l5, b_set)
+ mom5 = momenta((/l2,l2,l5,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l2, l5, l5, l5, b_set)
+ mom5 = momenta((/l2,l3,l3,l3,l3/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l3, l3, l3, b_set)
+ mom5 = momenta((/l2,l3,l3,l3,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l3, l3, l4, b_set)
+ mom5 = momenta((/l2,l3,l3,l3,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l3, l3, l5, b_set)
+ mom5 = momenta((/l2,l3,l3,l4,l4/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l3, l4, l4, b_set)
+ mom5 = momenta((/l2,l3,l3,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l3, l4, l5, b_set)
+ mom5 = momenta((/l2,l3,l3,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l3, l5, l5, b_set)
+ mom5 = momenta((/l2,l3,l4,l4,l4/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l4, l4, l4, b_set)
+ mom5 = momenta((/l2,l3,l4,l4,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l4, l4, l5, b_set)
+ mom5 = momenta((/l2,l3,l4,l5,l5/),:)
+ amp = amp + 60.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l4, l5, l5, b_set)
+ mom5 = momenta((/l2,l3,l5,l5,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l3, l5, l5, l5, b_set)
+ mom5 = momenta((/l2,l4,l4,l4,l4/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l4, l4, l4, l4, b_set)
+ mom5 = momenta((/l2,l4,l4,l4,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l4, l4, l4, l5, b_set)
+ mom5 = momenta((/l2,l4,l4,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l4, l4, l5, l5, b_set)
+ mom5 = momenta((/l2,l4,l5,l5,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l4, l5, l5, l5, b_set)
+ mom5 = momenta((/l2,l5,l5,l5,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l2, l5, l5, l5, l5, b_set)
+ mom5 = momenta((/l3,l3,l3,l3,l3/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l3, l3, l3, b_set)
+ mom5 = momenta((/l3,l3,l3,l3,l4/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l3, l3, l4, b_set)
+ mom5 = momenta((/l3,l3,l3,l3,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l3, l3, l5, b_set)
+ mom5 = momenta((/l3,l3,l3,l4,l4/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l3, l4, l4, b_set)
+ mom5 = momenta((/l3,l3,l3,l4,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l3, l4, l5, b_set)
+ mom5 = momenta((/l3,l3,l3,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l3, l5, l5, b_set)
+ mom5 = momenta((/l3,l3,l4,l4,l4/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l4, l4, l4, b_set)
+ mom5 = momenta((/l3,l3,l4,l4,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l4, l4, l5, b_set)
+ mom5 = momenta((/l3,l3,l4,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l4, l5, l5, b_set)
+ mom5 = momenta((/l3,l3,l5,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l3, l5, l5, l5, b_set)
+ mom5 = momenta((/l3,l4,l4,l4,l4/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l4, l4, l4, l4, b_set)
+ mom5 = momenta((/l3,l4,l4,l4,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l4, l4, l4, l5, b_set)
+ mom5 = momenta((/l3,l4,l4,l5,l5/),:)
+ amp = amp + 30.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l4, l4, l5, l5, b_set)
+ mom5 = momenta((/l3,l4,l5,l5,l5/),:)
+ amp = amp + 20.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l4, l5, l5, l5, b_set)
+ mom5 = momenta((/l3,l5,l5,l5,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l3, l5, l5, l5, l5, b_set)
+ mom5 = momenta((/l4,l4,l4,l4,l4/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l4, l4, l4, l4, l4, b_set)
+ mom5 = momenta((/l4,l4,l4,l4,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l4, l4, l4, l4, l5, b_set)
+ mom5 = momenta((/l4,l4,l4,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l4, l4, l4, l5, l5, b_set)
+ mom5 = momenta((/l4,l4,l5,l5,l5/),:)
+ amp = amp + 10.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l4, l4, l5, l5, l5, b_set)
+ mom5 = momenta((/l4,l5,l5,l5,l5/),:)
+ amp = amp + 5.0_ki * contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l4, l5, l5, l5, l5, b_set)
+ mom5 = momenta((/l5,l5,l5,l5,l5/),:)
+ amp = amp + contract_a_tensor_5(coeffs, mom5) &
+ & * a55(l5, l5, l5, l5, l5, b_set)
+ mom3 = momenta((/l1,l1,l1/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom3) * b55(l1, l1, l1, b_set)
+ mom3 = momenta((/l1,l1,l2/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l1, l2, b_set)
+ mom3 = momenta((/l1,l1,l3/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l1, l3, b_set)
+ mom3 = momenta((/l1,l1,l4/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l1, l4, b_set)
+ mom3 = momenta((/l1,l1,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l1, l5, b_set)
+ mom3 = momenta((/l1,l2,l2/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l2, l2, b_set)
+ mom3 = momenta((/l1,l2,l3/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l2, l3, b_set)
+ mom3 = momenta((/l1,l2,l4/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l2, l4, b_set)
+ mom3 = momenta((/l1,l2,l5/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l2, l5, b_set)
+ mom3 = momenta((/l1,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l3, l3, b_set)
+ mom3 = momenta((/l1,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l3, l4, b_set)
+ mom3 = momenta((/l1,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l3, l5, b_set)
+ mom3 = momenta((/l1,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l4, l4, b_set)
+ mom3 = momenta((/l1,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l4, l5, b_set)
+ mom3 = momenta((/l1,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l1, l5, l5, b_set)
+ mom3 = momenta((/l2,l2,l2/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom3) * b55(l2, l2, l2, b_set)
+ mom3 = momenta((/l2,l2,l3/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l2, l3, b_set)
+ mom3 = momenta((/l2,l2,l4/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l2, l4, b_set)
+ mom3 = momenta((/l2,l2,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l2, l5, b_set)
+ mom3 = momenta((/l2,l3,l3/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l3, l3, b_set)
+ mom3 = momenta((/l2,l3,l4/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l3, l4, b_set)
+ mom3 = momenta((/l2,l3,l5/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l3, l5, b_set)
+ mom3 = momenta((/l2,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l4, l4, b_set)
+ mom3 = momenta((/l2,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l4, l5, b_set)
+ mom3 = momenta((/l2,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l2, l5, l5, b_set)
+ mom3 = momenta((/l3,l3,l3/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom3) * b55(l3, l3, l3, b_set)
+ mom3 = momenta((/l3,l3,l4/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l3, l3, l4, b_set)
+ mom3 = momenta((/l3,l3,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l3, l3, l5, b_set)
+ mom3 = momenta((/l3,l4,l4/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l3, l4, l4, b_set)
+ mom3 = momenta((/l3,l4,l5/),:)
+ amp = amp + 6.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l3, l4, l5, b_set)
+ mom3 = momenta((/l3,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l3, l5, l5, b_set)
+ mom3 = momenta((/l4,l4,l4/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom3) * b55(l4, l4, l4, b_set)
+ mom3 = momenta((/l4,l4,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l4, l4, l5, b_set)
+ mom3 = momenta((/l4,l5,l5/),:)
+ amp = amp + 3.0_ki * contract_b_tensor_5(coeffs, mom3) &
+ & * b55(l4, l5, l5, b_set)
+ mom3 = momenta((/l5,l5,l5/),:)
+ amp = amp + contract_b_tensor_5(coeffs, mom3) * b55(l5, l5, l5, b_set)
+ mom1 = momenta((/l1/),:)
+ amp = amp + contract_c_tensor_5(coeffs, mom1) * c55(l1, b_set)
+ mom1 = momenta((/l2/),:)
+ amp = amp + contract_c_tensor_5(coeffs, mom1) * c55(l2, b_set)
+ mom1 = momenta((/l3/),:)
+ amp = amp + contract_c_tensor_5(coeffs, mom1) * c55(l3, b_set)
+ mom1 = momenta((/l4/),:)
+ amp = amp + contract_c_tensor_5(coeffs, mom1) * c55(l4, b_set)
+ mom1 = momenta((/l5/),:)
+ amp = amp + contract_c_tensor_5(coeffs, mom1) * c55(l5, b_set)
+end function contract5_5
+!****f* src/interface/tens_comb/contract6_1
+! NAME
+!
+! Function contract6_1
+!
+! USAGE
+!
+! amp = contract6_1(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 6-point rank 1 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract6_1(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_split
+ complex(ki), dimension(0:3) :: C
+ complex(ki) :: cprime
+ integer :: i, pnch, new_set
+ integer, dimension(1) :: pnch_set
+ integer, dimension(6) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 6)
+ amp = coeffs%c0 * a60(b_set)
+ do pnch=1,6
+ ! Eq. (54) in hep-ph/0504267
+ C(:) = 0.0_ki
+ do i=1,6
+ C(:) = C(:) + inv_s(unpinched(pnch),unpinched(i),b_set) * &
+ & momenta(unpinched(i),:)
+ end do
+ ! Eq. (63) in hep-ph/0504267
+ pnch_set(1) = pnch
+ new_set = punion(packb(pnch_set),b_set)
+ ! [] <-- [0]
+ cprime = C(0) * coeffs%c1(1, 1)
+ ! [] <-- [1]
+ cprime = cprime + C(1) * coeffs%c1(2, 1)
+ ! [] <-- [2]
+ cprime = cprime + C(2) * coeffs%c1(3, 1)
+ ! [] <-- [3]
+ cprime = cprime + C(3) * coeffs%c1(4, 1)
+ amp = amp - cprime * a50(new_set)
+ end do
+end function contract6_1
+!****f* src/interface/tens_comb/contract6_2
+! NAME
+!
+! Function contract6_2
+!
+! USAGE
+!
+! amp = contract6_2(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 6-point rank 2 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract6_2(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_split
+ complex(ki), dimension(0:3) :: C
+ type(coeff_type_1) :: cprime
+ integer :: i, pnch, new_set
+ integer, dimension(1) :: pnch_set
+ integer, dimension(6) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 6)
+ amp = coeffs%c0 * a60(b_set)
+ do pnch=1,6
+ ! Eq. (54) in hep-ph/0504267
+ C(:) = 0.0_ki
+ do i=1,6
+ C(:) = C(:) + inv_s(unpinched(pnch),unpinched(i),b_set) * &
+ & momenta(unpinched(i),:)
+ end do
+ ! Eq. (63) in hep-ph/0504267
+ pnch_set(1) = pnch
+ new_set = punion(packb(pnch_set),b_set)
+ ! [] <-- [0]
+ cprime%c0 = C(0) * coeffs%c1(1, 1)
+ ! [] <-- [1]
+ cprime%c0 = cprime%c0 + C(1) * coeffs%c1(2, 1)
+ ! [] <-- [2]
+ cprime%c0 = cprime%c0 + C(2) * coeffs%c1(3, 1)
+ ! [] <-- [3]
+ cprime%c0 = cprime%c0 + C(3) * coeffs%c1(4, 1)
+ ! [0] <-- [0, 0]
+ cprime%c1(1,1) = C(0) * coeffs%c1(1, 2)
+ ! [1] <-- [1, 1]
+ cprime%c1(2,1) = C(1) * coeffs%c1(2, 2)
+ ! [2] <-- [2, 2]
+ cprime%c1(3,1) = C(2) * coeffs%c1(3, 2)
+ ! [3] <-- [3, 3]
+ cprime%c1(4,1) = C(3) * coeffs%c1(4, 2)
+ ! [1] <-- [0, 1]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(0) * coeffs%c2(1, 1)
+ ! [0] <-- [0, 1]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(1) * coeffs%c2(1, 1)
+ ! [2] <-- [0, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(0) * coeffs%c2(2, 1)
+ ! [0] <-- [0, 2]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(2) * coeffs%c2(2, 1)
+ ! [3] <-- [0, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(0) * coeffs%c2(3, 1)
+ ! [0] <-- [0, 3]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(3) * coeffs%c2(3, 1)
+ ! [2] <-- [1, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(1) * coeffs%c2(4, 1)
+ ! [1] <-- [1, 2]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(2) * coeffs%c2(4, 1)
+ ! [3] <-- [1, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(1) * coeffs%c2(5, 1)
+ ! [1] <-- [1, 3]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(3) * coeffs%c2(5, 1)
+ ! [3] <-- [2, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(2) * coeffs%c2(6, 1)
+ ! [2] <-- [2, 3]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(3) * coeffs%c2(6, 1)
+ amp = amp - contract5_1(cprime, momenta, new_set)
+ end do
+end function contract6_2
+!****f* src/interface/tens_comb/contract6_3
+! NAME
+!
+! Function contract6_3
+!
+! USAGE
+!
+! amp = contract6_3(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 6-point rank 3 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_3)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract6_3(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_split
+ complex(ki), dimension(0:3) :: C
+ type(coeff_type_2) :: cprime
+ integer :: i, pnch, new_set
+ integer, dimension(1) :: pnch_set
+ integer, dimension(6) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 6)
+ amp = coeffs%c0 * a60(b_set)
+ do pnch=1,6
+ ! Eq. (54) in hep-ph/0504267
+ C(:) = 0.0_ki
+ do i=1,6
+ C(:) = C(:) + inv_s(unpinched(pnch),unpinched(i),b_set) * &
+ & momenta(unpinched(i),:)
+ end do
+ ! Eq. (63) in hep-ph/0504267
+ pnch_set(1) = pnch
+ new_set = punion(packb(pnch_set),b_set)
+ ! [] <-- [0]
+ cprime%c0 = C(0) * coeffs%c1(1, 1)
+ ! [] <-- [1]
+ cprime%c0 = cprime%c0 + C(1) * coeffs%c1(2, 1)
+ ! [] <-- [2]
+ cprime%c0 = cprime%c0 + C(2) * coeffs%c1(3, 1)
+ ! [] <-- [3]
+ cprime%c0 = cprime%c0 + C(3) * coeffs%c1(4, 1)
+ ! [0] <-- [0, 0]
+ cprime%c1(1,1) = C(0) * coeffs%c1(1, 2)
+ ! [1] <-- [1, 1]
+ cprime%c1(2,1) = C(1) * coeffs%c1(2, 2)
+ ! [2] <-- [2, 2]
+ cprime%c1(3,1) = C(2) * coeffs%c1(3, 2)
+ ! [3] <-- [3, 3]
+ cprime%c1(4,1) = C(3) * coeffs%c1(4, 2)
+ ! [1] <-- [0, 1]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(0) * coeffs%c2(1, 1)
+ ! [0] <-- [0, 1]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(1) * coeffs%c2(1, 1)
+ ! [2] <-- [0, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(0) * coeffs%c2(2, 1)
+ ! [0] <-- [0, 2]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(2) * coeffs%c2(2, 1)
+ ! [3] <-- [0, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(0) * coeffs%c2(3, 1)
+ ! [0] <-- [0, 3]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(3) * coeffs%c2(3, 1)
+ ! [2] <-- [1, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(1) * coeffs%c2(4, 1)
+ ! [1] <-- [1, 2]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(2) * coeffs%c2(4, 1)
+ ! [3] <-- [1, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(1) * coeffs%c2(5, 1)
+ ! [1] <-- [1, 3]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(3) * coeffs%c2(5, 1)
+ ! [3] <-- [2, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(2) * coeffs%c2(6, 1)
+ ! [2] <-- [2, 3]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(3) * coeffs%c2(6, 1)
+ ! [1, 1] <-- [0, 1, 1]
+ cprime%c1(2,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(1, 2)
+ ! [0, 1] <-- [0, 1, 1]
+ cprime%c2(1,1) = 2.0_ki/3.0_ki * C(1) * coeffs%c2(1, 2)
+ ! [2, 2] <-- [0, 2, 2]
+ cprime%c1(3,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(2, 2)
+ ! [0, 2] <-- [0, 2, 2]
+ cprime%c2(2,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(2, 2)
+ ! [3, 3] <-- [0, 3, 3]
+ cprime%c1(4,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(3, 2)
+ ! [0, 3] <-- [0, 3, 3]
+ cprime%c2(3,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(3, 2)
+ ! [2, 2] <-- [1, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(4, 2)
+ ! [1, 2] <-- [1, 2, 2]
+ cprime%c2(4,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(4, 2)
+ ! [3, 3] <-- [1, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(5, 2)
+ ! [1, 3] <-- [1, 3, 3]
+ cprime%c2(5,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(5, 2)
+ ! [3, 3] <-- [2, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(6, 2)
+ ! [2, 3] <-- [2, 3, 3]
+ cprime%c2(6,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(6, 2)
+ ! [1, 2] <-- [0, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 1)
+ ! [0, 2] <-- [0, 1, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 1)
+ ! [0, 1] <-- [0, 1, 2]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 1)
+ ! [1, 3] <-- [0, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 1)
+ ! [0, 3] <-- [0, 1, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 1)
+ ! [0, 1] <-- [0, 1, 3]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 1)
+ ! [2, 3] <-- [0, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 1)
+ ! [0, 3] <-- [0, 2, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 1)
+ ! [0, 2] <-- [0, 2, 3]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 1)
+ ! [2, 3] <-- [1, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 1)
+ ! [1, 3] <-- [1, 2, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 1)
+ ! [1, 2] <-- [1, 2, 3]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 1)
+ ! [0, 0] <-- [0, 0, 0]
+ cprime%c1(1,2) = C(0) * coeffs%c1(1, 3)
+ ! [1, 1] <-- [1, 1, 1]
+ cprime%c1(2,2) = cprime%c1(2,2) + C(1) * coeffs%c1(2, 3)
+ ! [2, 2] <-- [2, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + C(2) * coeffs%c1(3, 3)
+ ! [3, 3] <-- [3, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + C(3) * coeffs%c1(4, 3)
+ ! [0, 1] <-- [0, 0, 1]
+ cprime%c2(1,1) = cprime%c2(1,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(1, 3)
+ ! [0, 0] <-- [0, 0, 1]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(1, 3)
+ ! [0, 2] <-- [0, 0, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(2, 3)
+ ! [0, 0] <-- [0, 0, 2]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(2, 3)
+ ! [0, 3] <-- [0, 0, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(3, 3)
+ ! [0, 0] <-- [0, 0, 3]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(3, 3)
+ ! [1, 2] <-- [1, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(4, 3)
+ ! [1, 1] <-- [1, 1, 2]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(4, 3)
+ ! [1, 3] <-- [1, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(5, 3)
+ ! [1, 1] <-- [1, 1, 3]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(5, 3)
+ ! [2, 3] <-- [2, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(6, 3)
+ ! [2, 2] <-- [2, 2, 3]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(6, 3)
+ amp = amp - contract5_2(cprime, momenta, new_set)
+ end do
+end function contract6_3
+!****f* src/interface/tens_comb/contract6_4
+! NAME
+!
+! Function contract6_4
+!
+! USAGE
+!
+! amp = contract6_4(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 6-point rank 4 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_4)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract6_4(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_split
+ complex(ki), dimension(0:3) :: C
+ type(coeff_type_3) :: cprime
+ integer :: i, pnch, new_set
+ integer, dimension(1) :: pnch_set
+ integer, dimension(6) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 6)
+ amp = coeffs%c0 * a60(b_set)
+ do pnch=1,6
+ ! Eq. (54) in hep-ph/0504267
+ C(:) = 0.0_ki
+ do i=1,6
+ C(:) = C(:) + inv_s(unpinched(pnch),unpinched(i),b_set) * &
+ & momenta(unpinched(i),:)
+ end do
+ ! Eq. (63) in hep-ph/0504267
+ pnch_set(1) = pnch
+ new_set = punion(packb(pnch_set),b_set)
+ ! [] <-- [0]
+ cprime%c0 = C(0) * coeffs%c1(1, 1)
+ ! [] <-- [1]
+ cprime%c0 = cprime%c0 + C(1) * coeffs%c1(2, 1)
+ ! [] <-- [2]
+ cprime%c0 = cprime%c0 + C(2) * coeffs%c1(3, 1)
+ ! [] <-- [3]
+ cprime%c0 = cprime%c0 + C(3) * coeffs%c1(4, 1)
+ ! [0] <-- [0, 0]
+ cprime%c1(1,1) = C(0) * coeffs%c1(1, 2)
+ ! [1] <-- [1, 1]
+ cprime%c1(2,1) = C(1) * coeffs%c1(2, 2)
+ ! [2] <-- [2, 2]
+ cprime%c1(3,1) = C(2) * coeffs%c1(3, 2)
+ ! [3] <-- [3, 3]
+ cprime%c1(4,1) = C(3) * coeffs%c1(4, 2)
+ ! [1] <-- [0, 1]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(0) * coeffs%c2(1, 1)
+ ! [0] <-- [0, 1]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(1) * coeffs%c2(1, 1)
+ ! [2] <-- [0, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(0) * coeffs%c2(2, 1)
+ ! [0] <-- [0, 2]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(2) * coeffs%c2(2, 1)
+ ! [3] <-- [0, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(0) * coeffs%c2(3, 1)
+ ! [0] <-- [0, 3]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(3) * coeffs%c2(3, 1)
+ ! [2] <-- [1, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(1) * coeffs%c2(4, 1)
+ ! [1] <-- [1, 2]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(2) * coeffs%c2(4, 1)
+ ! [3] <-- [1, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(1) * coeffs%c2(5, 1)
+ ! [1] <-- [1, 3]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(3) * coeffs%c2(5, 1)
+ ! [3] <-- [2, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(2) * coeffs%c2(6, 1)
+ ! [2] <-- [2, 3]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(3) * coeffs%c2(6, 1)
+ ! [1, 1] <-- [0, 1, 1]
+ cprime%c1(2,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(1, 2)
+ ! [0, 1] <-- [0, 1, 1]
+ cprime%c2(1,1) = 2.0_ki/3.0_ki * C(1) * coeffs%c2(1, 2)
+ ! [2, 2] <-- [0, 2, 2]
+ cprime%c1(3,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(2, 2)
+ ! [0, 2] <-- [0, 2, 2]
+ cprime%c2(2,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(2, 2)
+ ! [3, 3] <-- [0, 3, 3]
+ cprime%c1(4,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(3, 2)
+ ! [0, 3] <-- [0, 3, 3]
+ cprime%c2(3,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(3, 2)
+ ! [2, 2] <-- [1, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(4, 2)
+ ! [1, 2] <-- [1, 2, 2]
+ cprime%c2(4,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(4, 2)
+ ! [3, 3] <-- [1, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(5, 2)
+ ! [1, 3] <-- [1, 3, 3]
+ cprime%c2(5,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(5, 2)
+ ! [3, 3] <-- [2, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(6, 2)
+ ! [2, 3] <-- [2, 3, 3]
+ cprime%c2(6,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(6, 2)
+ ! [1, 2] <-- [0, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 1)
+ ! [0, 2] <-- [0, 1, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 1)
+ ! [0, 1] <-- [0, 1, 2]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 1)
+ ! [1, 3] <-- [0, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 1)
+ ! [0, 3] <-- [0, 1, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 1)
+ ! [0, 1] <-- [0, 1, 3]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 1)
+ ! [2, 3] <-- [0, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 1)
+ ! [0, 3] <-- [0, 2, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 1)
+ ! [0, 2] <-- [0, 2, 3]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 1)
+ ! [2, 3] <-- [1, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 1)
+ ! [1, 3] <-- [1, 2, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 1)
+ ! [1, 2] <-- [1, 2, 3]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 1)
+ ! [0, 0] <-- [0, 0, 0]
+ cprime%c1(1,2) = C(0) * coeffs%c1(1, 3)
+ ! [1, 1] <-- [1, 1, 1]
+ cprime%c1(2,2) = cprime%c1(2,2) + C(1) * coeffs%c1(2, 3)
+ ! [2, 2] <-- [2, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + C(2) * coeffs%c1(3, 3)
+ ! [3, 3] <-- [3, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + C(3) * coeffs%c1(4, 3)
+ ! [0, 1] <-- [0, 0, 1]
+ cprime%c2(1,1) = cprime%c2(1,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(1, 4)
+ ! [0, 0] <-- [0, 0, 1]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(1, 4)
+ ! [0, 2] <-- [0, 0, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(2, 4)
+ ! [0, 0] <-- [0, 0, 2]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(2, 4)
+ ! [0, 3] <-- [0, 0, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(3, 4)
+ ! [0, 0] <-- [0, 0, 3]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(3, 4)
+ ! [1, 2] <-- [1, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(4, 4)
+ ! [1, 1] <-- [1, 1, 2]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(4, 4)
+ ! [1, 3] <-- [1, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(5, 4)
+ ! [1, 1] <-- [1, 1, 3]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(5, 4)
+ ! [2, 3] <-- [2, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(6, 4)
+ ! [2, 2] <-- [2, 2, 3]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(6, 4)
+ ! [1, 1, 2] <-- [0, 1, 1, 2]
+ cprime%c2(4,3) = 0.25_ki * C(0) * coeffs%c3(1, 3)
+ ! [0, 1, 2] <-- [0, 1, 1, 2]
+ cprime%c3(1,1) = 0.5_ki * C(1) * coeffs%c3(1, 3)
+ ! [0, 1, 1] <-- [0, 1, 1, 2]
+ cprime%c2(1,2) = 0.25_ki * C(2) * coeffs%c3(1, 3)
+ ! [1, 1, 3] <-- [0, 1, 1, 3]
+ cprime%c2(5,3) = 0.25_ki * C(0) * coeffs%c3(2, 3)
+ ! [0, 1, 3] <-- [0, 1, 1, 3]
+ cprime%c3(2,1) = 0.5_ki * C(1) * coeffs%c3(2, 3)
+ ! [0, 1, 1] <-- [0, 1, 1, 3]
+ cprime%c2(1,2) = cprime%c2(1,2) + 0.25_ki * C(3) * coeffs%c3(2, 3)
+ ! [2, 2, 3] <-- [0, 2, 2, 3]
+ cprime%c2(6,3) = 0.25_ki * C(0) * coeffs%c3(3, 3)
+ ! [0, 2, 3] <-- [0, 2, 2, 3]
+ cprime%c3(3,1) = 0.5_ki * C(2) * coeffs%c3(3, 3)
+ ! [0, 2, 2] <-- [0, 2, 2, 3]
+ cprime%c2(2,2) = 0.25_ki * C(3) * coeffs%c3(3, 3)
+ ! [2, 2, 3] <-- [1, 2, 2, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 0.25_ki * C(1) * coeffs%c3(4, 3)
+ ! [1, 2, 3] <-- [1, 2, 2, 3]
+ cprime%c3(4,1) = 0.5_ki * C(2) * coeffs%c3(4, 3)
+ ! [1, 2, 2] <-- [1, 2, 2, 3]
+ cprime%c2(4,2) = 0.25_ki * C(3) * coeffs%c3(4, 3)
+ ! [1, 1, 1] <-- [0, 1, 1, 1]
+ cprime%c1(2,3) = 0.25_ki * C(0) * coeffs%c2(1, 3)
+ ! [0, 1, 1] <-- [0, 1, 1, 1]
+ cprime%c2(1,2) = cprime%c2(1,2) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(1, 3)
+ ! [2, 2, 2] <-- [0, 2, 2, 2]
+ cprime%c1(3,3) = 0.25_ki * C(0) * coeffs%c2(2, 3)
+ ! [0, 2, 2] <-- [0, 2, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(2, 3)
+ ! [3, 3, 3] <-- [0, 3, 3, 3]
+ cprime%c1(4,3) = 0.25_ki * C(0) * coeffs%c2(3, 3)
+ ! [0, 3, 3] <-- [0, 3, 3, 3]
+ cprime%c2(3,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(3, 3)
+ ! [2, 2, 2] <-- [1, 2, 2, 2]
+ cprime%c1(3,3) = cprime%c1(3,3) + 0.25_ki * C(1) * coeffs%c2(4, 3)
+ ! [1, 2, 2] <-- [1, 2, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(4, 3)
+ ! [3, 3, 3] <-- [1, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + 0.25_ki * C(1) * coeffs%c2(5, 3)
+ ! [1, 3, 3] <-- [1, 3, 3, 3]
+ cprime%c2(5,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(5, 3)
+ ! [3, 3, 3] <-- [2, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + 0.25_ki * C(2) * coeffs%c2(6, 3)
+ ! [2, 3, 3] <-- [2, 3, 3, 3]
+ cprime%c2(6,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(6, 3)
+ ! [0, 1, 2] <-- [0, 0, 1, 2]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.5_ki * C(0) * coeffs%c3(1, 4)
+ ! [0, 0, 2] <-- [0, 0, 1, 2]
+ cprime%c2(2,3) = 0.25_ki * C(1) * coeffs%c3(1, 4)
+ ! [0, 0, 1] <-- [0, 0, 1, 2]
+ cprime%c2(1,3) = 0.25_ki * C(2) * coeffs%c3(1, 4)
+ ! [0, 1, 3] <-- [0, 0, 1, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.5_ki * C(0) * coeffs%c3(2, 4)
+ ! [0, 0, 3] <-- [0, 0, 1, 3]
+ cprime%c2(3,3) = 0.25_ki * C(1) * coeffs%c3(2, 4)
+ ! [0, 0, 1] <-- [0, 0, 1, 3]
+ cprime%c2(1,3) = cprime%c2(1,3) + 0.25_ki * C(3) * coeffs%c3(2, 4)
+ ! [0, 2, 3] <-- [0, 0, 2, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.5_ki * C(0) * coeffs%c3(3, 4)
+ ! [0, 0, 3] <-- [0, 0, 2, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 0.25_ki * C(2) * coeffs%c3(3, 4)
+ ! [0, 0, 2] <-- [0, 0, 2, 3]
+ cprime%c2(2,3) = cprime%c2(2,3) + 0.25_ki * C(3) * coeffs%c3(3, 4)
+ ! [1, 2, 3] <-- [1, 1, 2, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.5_ki * C(1) * coeffs%c3(4, 4)
+ ! [1, 1, 3] <-- [1, 1, 2, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 0.25_ki * C(2) * coeffs%c3(4, 4)
+ ! [1, 1, 2] <-- [1, 1, 2, 3]
+ cprime%c2(4,3) = cprime%c2(4,3) + 0.25_ki * C(3) * coeffs%c3(4, 4)
+ ! [0, 0, 1] <-- [0, 0, 0, 1]
+ cprime%c2(1,3) = cprime%c2(1,3) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(1, 6)
+ ! [0, 0, 0] <-- [0, 0, 0, 1]
+ cprime%c1(1,3) = 0.25_ki * C(1) * coeffs%c2(1, 6)
+ ! [0, 0, 2] <-- [0, 0, 0, 2]
+ cprime%c2(2,3) = cprime%c2(2,3) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(2, 6)
+ ! [0, 0, 0] <-- [0, 0, 0, 2]
+ cprime%c1(1,3) = cprime%c1(1,3) + 0.25_ki * C(2) * coeffs%c2(2, 6)
+ ! [0, 0, 3] <-- [0, 0, 0, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(3, 6)
+ ! [0, 0, 0] <-- [0, 0, 0, 3]
+ cprime%c1(1,3) = cprime%c1(1,3) + 0.25_ki * C(3) * coeffs%c2(3, 6)
+ ! [1, 1, 2] <-- [1, 1, 1, 2]
+ cprime%c2(4,3) = cprime%c2(4,3) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(4, 6)
+ ! [1, 1, 1] <-- [1, 1, 1, 2]
+ cprime%c1(2,3) = cprime%c1(2,3) + 0.25_ki * C(2) * coeffs%c2(4, 6)
+ ! [1, 1, 3] <-- [1, 1, 1, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(5, 6)
+ ! [1, 1, 1] <-- [1, 1, 1, 3]
+ cprime%c1(2,3) = cprime%c1(2,3) + 0.25_ki * C(3) * coeffs%c2(5, 6)
+ ! [2, 2, 3] <-- [2, 2, 2, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(6, 6)
+ ! [2, 2, 2] <-- [2, 2, 2, 3]
+ cprime%c1(3,3) = cprime%c1(3,3) + 0.25_ki * C(3) * coeffs%c2(6, 6)
+ ! [1, 2, 3] <-- [0, 1, 2, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.25_ki * C(0) * coeffs%c4(1, 1)
+ ! [0, 2, 3] <-- [0, 1, 2, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.25_ki * C(1) * coeffs%c4(1, 1)
+ ! [0, 1, 3] <-- [0, 1, 2, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.25_ki * C(2) * coeffs%c4(1, 1)
+ ! [0, 1, 2] <-- [0, 1, 2, 3]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.25_ki * C(3) * coeffs%c4(1, 1)
+ ! [1, 2, 2] <-- [0, 1, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 0.25_ki * C(0) * coeffs%c3(1, 2)
+ ! [0, 2, 2] <-- [0, 1, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 0.25_ki * C(1) * coeffs%c3(1, 2)
+ ! [0, 1, 2] <-- [0, 1, 2, 2]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.5_ki * C(2) * coeffs%c3(1, 2)
+ ! [1, 3, 3] <-- [0, 1, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.25_ki * C(0) * coeffs%c3(2, 2)
+ ! [0, 3, 3] <-- [0, 1, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.25_ki * C(1) * coeffs%c3(2, 2)
+ ! [0, 1, 3] <-- [0, 1, 3, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.5_ki * C(3) * coeffs%c3(2, 2)
+ ! [2, 3, 3] <-- [0, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.25_ki * C(0) * coeffs%c3(3, 2)
+ ! [0, 3, 3] <-- [0, 2, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.25_ki * C(2) * coeffs%c3(3, 2)
+ ! [0, 2, 3] <-- [0, 2, 3, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.5_ki * C(3) * coeffs%c3(3, 2)
+ ! [2, 3, 3] <-- [1, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.25_ki * C(1) * coeffs%c3(4, 2)
+ ! [1, 3, 3] <-- [1, 2, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.25_ki * C(2) * coeffs%c3(4, 2)
+ ! [1, 2, 3] <-- [1, 2, 3, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.5_ki * C(3) * coeffs%c3(4, 2)
+ ! [0, 1, 1] <-- [0, 0, 1, 1]
+ cprime%c2(1,2) = cprime%c2(1,2) + 0.5_ki * C(0) * coeffs%c2(1, 5)
+ ! [0, 0, 1] <-- [0, 0, 1, 1]
+ cprime%c2(1,3) = cprime%c2(1,3) + 0.5_ki * C(1) * coeffs%c2(1, 5)
+ ! [0, 2, 2] <-- [0, 0, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 0.5_ki * C(0) * coeffs%c2(2, 5)
+ ! [0, 0, 2] <-- [0, 0, 2, 2]
+ cprime%c2(2,3) = cprime%c2(2,3) + 0.5_ki * C(2) * coeffs%c2(2, 5)
+ ! [0, 3, 3] <-- [0, 0, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.5_ki * C(0) * coeffs%c2(3, 5)
+ ! [0, 0, 3] <-- [0, 0, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 0.5_ki * C(3) * coeffs%c2(3, 5)
+ ! [1, 2, 2] <-- [1, 1, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 0.5_ki * C(1) * coeffs%c2(4, 5)
+ ! [1, 1, 2] <-- [1, 1, 2, 2]
+ cprime%c2(4,3) = cprime%c2(4,3) + 0.5_ki * C(2) * coeffs%c2(4, 5)
+ ! [1, 3, 3] <-- [1, 1, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.5_ki * C(1) * coeffs%c2(5, 5)
+ ! [1, 1, 3] <-- [1, 1, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 0.5_ki * C(3) * coeffs%c2(5, 5)
+ ! [2, 3, 3] <-- [2, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.5_ki * C(2) * coeffs%c2(6, 5)
+ ! [2, 2, 3] <-- [2, 2, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 0.5_ki * C(3) * coeffs%c2(6, 5)
+ ! [0, 0, 0] <-- [0, 0, 0, 0]
+ cprime%c1(1,3) = cprime%c1(1,3) + C(0) * coeffs%c1(1, 4)
+ ! [1, 1, 1] <-- [1, 1, 1, 1]
+ cprime%c1(2,3) = cprime%c1(2,3) + C(1) * coeffs%c1(2, 4)
+ ! [2, 2, 2] <-- [2, 2, 2, 2]
+ cprime%c1(3,3) = cprime%c1(3,3) + C(2) * coeffs%c1(3, 4)
+ ! [3, 3, 3] <-- [3, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + C(3) * coeffs%c1(4, 4)
+ amp = amp - contract5_3(cprime, momenta, new_set)
+ end do
+end function contract6_4
+!****f* src/interface/tens_comb/contract6_5
+! NAME
+!
+! Function contract6_5
+!
+! USAGE
+!
+! amp = contract6_5(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 6-point rank 5 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_5)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract6_5(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_5), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_split
+ complex(ki), dimension(0:3) :: C
+ type(coeff_type_4) :: cprime
+ integer :: i, pnch, new_set
+ integer, dimension(1) :: pnch_set
+ integer, dimension(6) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 6)
+ amp = coeffs%c0 * a60(b_set)
+ do pnch=1,6
+ ! Eq. (54) in hep-ph/0504267
+ C(:) = 0.0_ki
+ do i=1,6
+ C(:) = C(:) + inv_s(unpinched(pnch),unpinched(i),b_set) * &
+ & momenta(unpinched(i),:)
+ end do
+ ! Eq. (63) in hep-ph/0504267
+ pnch_set(1) = pnch
+ new_set = punion(packb(pnch_set),b_set)
+ ! [] <-- [0]
+ cprime%c0 = C(0) * coeffs%c1(1, 1)
+ ! [] <-- [1]
+ cprime%c0 = cprime%c0 + C(1) * coeffs%c1(2, 1)
+ ! [] <-- [2]
+ cprime%c0 = cprime%c0 + C(2) * coeffs%c1(3, 1)
+ ! [] <-- [3]
+ cprime%c0 = cprime%c0 + C(3) * coeffs%c1(4, 1)
+ ! [0] <-- [0, 0]
+ cprime%c1(1,1) = C(0) * coeffs%c1(1, 2)
+ ! [1] <-- [1, 1]
+ cprime%c1(2,1) = C(1) * coeffs%c1(2, 2)
+ ! [2] <-- [2, 2]
+ cprime%c1(3,1) = C(2) * coeffs%c1(3, 2)
+ ! [3] <-- [3, 3]
+ cprime%c1(4,1) = C(3) * coeffs%c1(4, 2)
+ ! [1] <-- [0, 1]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(0) * coeffs%c2(1, 1)
+ ! [0] <-- [0, 1]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(1) * coeffs%c2(1, 1)
+ ! [2] <-- [0, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(0) * coeffs%c2(2, 1)
+ ! [0] <-- [0, 2]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(2) * coeffs%c2(2, 1)
+ ! [3] <-- [0, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(0) * coeffs%c2(3, 1)
+ ! [0] <-- [0, 3]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(3) * coeffs%c2(3, 1)
+ ! [2] <-- [1, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(1) * coeffs%c2(4, 1)
+ ! [1] <-- [1, 2]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(2) * coeffs%c2(4, 1)
+ ! [3] <-- [1, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(1) * coeffs%c2(5, 1)
+ ! [1] <-- [1, 3]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(3) * coeffs%c2(5, 1)
+ ! [3] <-- [2, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(2) * coeffs%c2(6, 1)
+ ! [2] <-- [2, 3]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(3) * coeffs%c2(6, 1)
+ ! [1, 1] <-- [0, 1, 1]
+ cprime%c1(2,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(1, 2)
+ ! [0, 1] <-- [0, 1, 1]
+ cprime%c2(1,1) = 2.0_ki/3.0_ki * C(1) * coeffs%c2(1, 2)
+ ! [2, 2] <-- [0, 2, 2]
+ cprime%c1(3,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(2, 2)
+ ! [0, 2] <-- [0, 2, 2]
+ cprime%c2(2,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(2, 2)
+ ! [3, 3] <-- [0, 3, 3]
+ cprime%c1(4,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(3, 2)
+ ! [0, 3] <-- [0, 3, 3]
+ cprime%c2(3,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(3, 2)
+ ! [2, 2] <-- [1, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(4, 2)
+ ! [1, 2] <-- [1, 2, 2]
+ cprime%c2(4,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(4, 2)
+ ! [3, 3] <-- [1, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(5, 2)
+ ! [1, 3] <-- [1, 3, 3]
+ cprime%c2(5,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(5, 2)
+ ! [3, 3] <-- [2, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(6, 2)
+ ! [2, 3] <-- [2, 3, 3]
+ cprime%c2(6,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(6, 2)
+ ! [1, 2] <-- [0, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 1)
+ ! [0, 2] <-- [0, 1, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 1)
+ ! [0, 1] <-- [0, 1, 2]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 1)
+ ! [1, 3] <-- [0, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 1)
+ ! [0, 3] <-- [0, 1, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 1)
+ ! [0, 1] <-- [0, 1, 3]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 1)
+ ! [2, 3] <-- [0, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 1)
+ ! [0, 3] <-- [0, 2, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 1)
+ ! [0, 2] <-- [0, 2, 3]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 1)
+ ! [2, 3] <-- [1, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 1)
+ ! [1, 3] <-- [1, 2, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 1)
+ ! [1, 2] <-- [1, 2, 3]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 1)
+ ! [0, 0] <-- [0, 0, 0]
+ cprime%c1(1,2) = C(0) * coeffs%c1(1, 3)
+ ! [1, 1] <-- [1, 1, 1]
+ cprime%c1(2,2) = cprime%c1(2,2) + C(1) * coeffs%c1(2, 3)
+ ! [2, 2] <-- [2, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + C(2) * coeffs%c1(3, 3)
+ ! [3, 3] <-- [3, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + C(3) * coeffs%c1(4, 3)
+ ! [0, 1] <-- [0, 0, 1]
+ cprime%c2(1,1) = cprime%c2(1,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(1, 5)
+ ! [0, 0] <-- [0, 0, 1]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(1, 5)
+ ! [0, 2] <-- [0, 0, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(2, 5)
+ ! [0, 0] <-- [0, 0, 2]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(2, 5)
+ ! [0, 3] <-- [0, 0, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(3, 5)
+ ! [0, 0] <-- [0, 0, 3]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(3, 5)
+ ! [1, 2] <-- [1, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(4, 5)
+ ! [1, 1] <-- [1, 1, 2]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(4, 5)
+ ! [1, 3] <-- [1, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(5, 5)
+ ! [1, 1] <-- [1, 1, 3]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(5, 5)
+ ! [2, 3] <-- [2, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(6, 5)
+ ! [2, 2] <-- [2, 2, 3]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(6, 5)
+ ! [1, 1, 2] <-- [0, 1, 1, 2]
+ cprime%c2(4,4) = 0.25_ki * C(0) * coeffs%c3(1, 4)
+ ! [0, 1, 2] <-- [0, 1, 1, 2]
+ cprime%c3(1,1) = 0.5_ki * C(1) * coeffs%c3(1, 4)
+ ! [0, 1, 1] <-- [0, 1, 1, 2]
+ cprime%c2(1,2) = 0.25_ki * C(2) * coeffs%c3(1, 4)
+ ! [1, 1, 3] <-- [0, 1, 1, 3]
+ cprime%c2(5,4) = 0.25_ki * C(0) * coeffs%c3(2, 4)
+ ! [0, 1, 3] <-- [0, 1, 1, 3]
+ cprime%c3(2,1) = 0.5_ki * C(1) * coeffs%c3(2, 4)
+ ! [0, 1, 1] <-- [0, 1, 1, 3]
+ cprime%c2(1,2) = cprime%c2(1,2) + 0.25_ki * C(3) * coeffs%c3(2, 4)
+ ! [2, 2, 3] <-- [0, 2, 2, 3]
+ cprime%c2(6,4) = 0.25_ki * C(0) * coeffs%c3(3, 4)
+ ! [0, 2, 3] <-- [0, 2, 2, 3]
+ cprime%c3(3,1) = 0.5_ki * C(2) * coeffs%c3(3, 4)
+ ! [0, 2, 2] <-- [0, 2, 2, 3]
+ cprime%c2(2,2) = 0.25_ki * C(3) * coeffs%c3(3, 4)
+ ! [2, 2, 3] <-- [1, 2, 2, 3]
+ cprime%c2(6,4) = cprime%c2(6,4) + 0.25_ki * C(1) * coeffs%c3(4, 4)
+ ! [1, 2, 3] <-- [1, 2, 2, 3]
+ cprime%c3(4,1) = 0.5_ki * C(2) * coeffs%c3(4, 4)
+ ! [1, 2, 2] <-- [1, 2, 2, 3]
+ cprime%c2(4,2) = 0.25_ki * C(3) * coeffs%c3(4, 4)
+ ! [1, 1, 1] <-- [0, 1, 1, 1]
+ cprime%c1(2,3) = 0.25_ki * C(0) * coeffs%c2(1, 3)
+ ! [0, 1, 1] <-- [0, 1, 1, 1]
+ cprime%c2(1,2) = cprime%c2(1,2) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(1, 3)
+ ! [2, 2, 2] <-- [0, 2, 2, 2]
+ cprime%c1(3,3) = 0.25_ki * C(0) * coeffs%c2(2, 3)
+ ! [0, 2, 2] <-- [0, 2, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(2, 3)
+ ! [3, 3, 3] <-- [0, 3, 3, 3]
+ cprime%c1(4,3) = 0.25_ki * C(0) * coeffs%c2(3, 3)
+ ! [0, 3, 3] <-- [0, 3, 3, 3]
+ cprime%c2(3,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(3, 3)
+ ! [2, 2, 2] <-- [1, 2, 2, 2]
+ cprime%c1(3,3) = cprime%c1(3,3) + 0.25_ki * C(1) * coeffs%c2(4, 3)
+ ! [1, 2, 2] <-- [1, 2, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(4, 3)
+ ! [3, 3, 3] <-- [1, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + 0.25_ki * C(1) * coeffs%c2(5, 3)
+ ! [1, 3, 3] <-- [1, 3, 3, 3]
+ cprime%c2(5,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(5, 3)
+ ! [3, 3, 3] <-- [2, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + 0.25_ki * C(2) * coeffs%c2(6, 3)
+ ! [2, 3, 3] <-- [2, 3, 3, 3]
+ cprime%c2(6,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(6, 3)
+ ! [0, 1, 2] <-- [0, 0, 1, 2]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.5_ki * C(0) * coeffs%c3(1, 7)
+ ! [0, 0, 2] <-- [0, 0, 1, 2]
+ cprime%c2(2,4) = 0.25_ki * C(1) * coeffs%c3(1, 7)
+ ! [0, 0, 1] <-- [0, 0, 1, 2]
+ cprime%c2(1,4) = 0.25_ki * C(2) * coeffs%c3(1, 7)
+ ! [0, 1, 3] <-- [0, 0, 1, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.5_ki * C(0) * coeffs%c3(2, 7)
+ ! [0, 0, 3] <-- [0, 0, 1, 3]
+ cprime%c2(3,4) = 0.25_ki * C(1) * coeffs%c3(2, 7)
+ ! [0, 0, 1] <-- [0, 0, 1, 3]
+ cprime%c2(1,4) = cprime%c2(1,4) + 0.25_ki * C(3) * coeffs%c3(2, 7)
+ ! [0, 2, 3] <-- [0, 0, 2, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.5_ki * C(0) * coeffs%c3(3, 7)
+ ! [0, 0, 3] <-- [0, 0, 2, 3]
+ cprime%c2(3,4) = cprime%c2(3,4) + 0.25_ki * C(2) * coeffs%c3(3, 7)
+ ! [0, 0, 2] <-- [0, 0, 2, 3]
+ cprime%c2(2,4) = cprime%c2(2,4) + 0.25_ki * C(3) * coeffs%c3(3, 7)
+ ! [1, 2, 3] <-- [1, 1, 2, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.5_ki * C(1) * coeffs%c3(4, 7)
+ ! [1, 1, 3] <-- [1, 1, 2, 3]
+ cprime%c2(5,4) = cprime%c2(5,4) + 0.25_ki * C(2) * coeffs%c3(4, 7)
+ ! [1, 1, 2] <-- [1, 1, 2, 3]
+ cprime%c2(4,4) = cprime%c2(4,4) + 0.25_ki * C(3) * coeffs%c3(4, 7)
+ ! [0, 0, 1] <-- [0, 0, 0, 1]
+ cprime%c2(1,4) = cprime%c2(1,4) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(1, 8)
+ ! [0, 0, 0] <-- [0, 0, 0, 1]
+ cprime%c1(1,3) = 0.25_ki * C(1) * coeffs%c2(1, 8)
+ ! [0, 0, 2] <-- [0, 0, 0, 2]
+ cprime%c2(2,4) = cprime%c2(2,4) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(2, 8)
+ ! [0, 0, 0] <-- [0, 0, 0, 2]
+ cprime%c1(1,3) = cprime%c1(1,3) + 0.25_ki * C(2) * coeffs%c2(2, 8)
+ ! [0, 0, 3] <-- [0, 0, 0, 3]
+ cprime%c2(3,4) = cprime%c2(3,4) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(3, 8)
+ ! [0, 0, 0] <-- [0, 0, 0, 3]
+ cprime%c1(1,3) = cprime%c1(1,3) + 0.25_ki * C(3) * coeffs%c2(3, 8)
+ ! [1, 1, 2] <-- [1, 1, 1, 2]
+ cprime%c2(4,4) = cprime%c2(4,4) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(4, 8)
+ ! [1, 1, 1] <-- [1, 1, 1, 2]
+ cprime%c1(2,3) = cprime%c1(2,3) + 0.25_ki * C(2) * coeffs%c2(4, 8)
+ ! [1, 1, 3] <-- [1, 1, 1, 3]
+ cprime%c2(5,4) = cprime%c2(5,4) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(5, 8)
+ ! [1, 1, 1] <-- [1, 1, 1, 3]
+ cprime%c1(2,3) = cprime%c1(2,3) + 0.25_ki * C(3) * coeffs%c2(5, 8)
+ ! [2, 2, 3] <-- [2, 2, 2, 3]
+ cprime%c2(6,4) = cprime%c2(6,4) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(6, 8)
+ ! [2, 2, 2] <-- [2, 2, 2, 3]
+ cprime%c1(3,3) = cprime%c1(3,3) + 0.25_ki * C(3) * coeffs%c2(6, 8)
+ ! [1, 2, 3] <-- [0, 1, 2, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.25_ki * C(0) * coeffs%c4(1, 1)
+ ! [0, 2, 3] <-- [0, 1, 2, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.25_ki * C(1) * coeffs%c4(1, 1)
+ ! [0, 1, 3] <-- [0, 1, 2, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.25_ki * C(2) * coeffs%c4(1, 1)
+ ! [0, 1, 2] <-- [0, 1, 2, 3]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.25_ki * C(3) * coeffs%c4(1, 1)
+ ! [1, 2, 2] <-- [0, 1, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 0.25_ki * C(0) * coeffs%c3(1, 2)
+ ! [0, 2, 2] <-- [0, 1, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 0.25_ki * C(1) * coeffs%c3(1, 2)
+ ! [0, 1, 2] <-- [0, 1, 2, 2]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.5_ki * C(2) * coeffs%c3(1, 2)
+ ! [1, 3, 3] <-- [0, 1, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.25_ki * C(0) * coeffs%c3(2, 2)
+ ! [0, 3, 3] <-- [0, 1, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.25_ki * C(1) * coeffs%c3(2, 2)
+ ! [0, 1, 3] <-- [0, 1, 3, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.5_ki * C(3) * coeffs%c3(2, 2)
+ ! [2, 3, 3] <-- [0, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.25_ki * C(0) * coeffs%c3(3, 2)
+ ! [0, 3, 3] <-- [0, 2, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.25_ki * C(2) * coeffs%c3(3, 2)
+ ! [0, 2, 3] <-- [0, 2, 3, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.5_ki * C(3) * coeffs%c3(3, 2)
+ ! [2, 3, 3] <-- [1, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.25_ki * C(1) * coeffs%c3(4, 2)
+ ! [1, 3, 3] <-- [1, 2, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.25_ki * C(2) * coeffs%c3(4, 2)
+ ! [1, 2, 3] <-- [1, 2, 3, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.5_ki * C(3) * coeffs%c3(4, 2)
+ ! [0, 1, 1] <-- [0, 0, 1, 1]
+ cprime%c2(1,2) = cprime%c2(1,2) + 0.5_ki * C(0) * coeffs%c2(1, 6)
+ ! [0, 0, 1] <-- [0, 0, 1, 1]
+ cprime%c2(1,4) = cprime%c2(1,4) + 0.5_ki * C(1) * coeffs%c2(1, 6)
+ ! [0, 2, 2] <-- [0, 0, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 0.5_ki * C(0) * coeffs%c2(2, 6)
+ ! [0, 0, 2] <-- [0, 0, 2, 2]
+ cprime%c2(2,4) = cprime%c2(2,4) + 0.5_ki * C(2) * coeffs%c2(2, 6)
+ ! [0, 3, 3] <-- [0, 0, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.5_ki * C(0) * coeffs%c2(3, 6)
+ ! [0, 0, 3] <-- [0, 0, 3, 3]
+ cprime%c2(3,4) = cprime%c2(3,4) + 0.5_ki * C(3) * coeffs%c2(3, 6)
+ ! [1, 2, 2] <-- [1, 1, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 0.5_ki * C(1) * coeffs%c2(4, 6)
+ ! [1, 1, 2] <-- [1, 1, 2, 2]
+ cprime%c2(4,4) = cprime%c2(4,4) + 0.5_ki * C(2) * coeffs%c2(4, 6)
+ ! [1, 3, 3] <-- [1, 1, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.5_ki * C(1) * coeffs%c2(5, 6)
+ ! [1, 1, 3] <-- [1, 1, 3, 3]
+ cprime%c2(5,4) = cprime%c2(5,4) + 0.5_ki * C(3) * coeffs%c2(5, 6)
+ ! [2, 3, 3] <-- [2, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.5_ki * C(2) * coeffs%c2(6, 6)
+ ! [2, 2, 3] <-- [2, 2, 3, 3]
+ cprime%c2(6,4) = cprime%c2(6,4) + 0.5_ki * C(3) * coeffs%c2(6, 6)
+ ! [0, 0, 0] <-- [0, 0, 0, 0]
+ cprime%c1(1,3) = cprime%c1(1,3) + C(0) * coeffs%c1(1, 4)
+ ! [1, 1, 1] <-- [1, 1, 1, 1]
+ cprime%c1(2,3) = cprime%c1(2,3) + C(1) * coeffs%c1(2, 4)
+ ! [2, 2, 2] <-- [2, 2, 2, 2]
+ cprime%c1(3,3) = cprime%c1(3,3) + C(2) * coeffs%c1(3, 4)
+ ! [3, 3, 3] <-- [3, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + C(3) * coeffs%c1(4, 4)
+ ! [0, 0, 1, 1] <-- [0, 0, 0, 1, 1]
+ cprime%c2(1,5) = 3.0_ki/5.0_ki * C(0) * coeffs%c2(1, 9)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 1, 1]
+ cprime%c2(1,6) = 2.0_ki/5.0_ki * C(1) * coeffs%c2(1, 9)
+ ! [0, 0, 2, 2] <-- [0, 0, 0, 2, 2]
+ cprime%c2(2,5) = 3.0_ki/5.0_ki * C(0) * coeffs%c2(2, 9)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 2, 2]
+ cprime%c2(2,6) = 2.0_ki/5.0_ki * C(2) * coeffs%c2(2, 9)
+ ! [0, 0, 3, 3] <-- [0, 0, 0, 3, 3]
+ cprime%c2(3,5) = 3.0_ki/5.0_ki * C(0) * coeffs%c2(3, 9)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 3, 3]
+ cprime%c2(3,6) = 2.0_ki/5.0_ki * C(3) * coeffs%c2(3, 9)
+ ! [1, 1, 2, 2] <-- [1, 1, 1, 2, 2]
+ cprime%c2(4,5) = 3.0_ki/5.0_ki * C(1) * coeffs%c2(4, 9)
+ ! [1, 1, 1, 2] <-- [1, 1, 1, 2, 2]
+ cprime%c2(4,6) = 2.0_ki/5.0_ki * C(2) * coeffs%c2(4, 9)
+ ! [1, 1, 3, 3] <-- [1, 1, 1, 3, 3]
+ cprime%c2(5,5) = 3.0_ki/5.0_ki * C(1) * coeffs%c2(5, 9)
+ ! [1, 1, 1, 3] <-- [1, 1, 1, 3, 3]
+ cprime%c2(5,6) = 2.0_ki/5.0_ki * C(3) * coeffs%c2(5, 9)
+ ! [2, 2, 3, 3] <-- [2, 2, 2, 3, 3]
+ cprime%c2(6,5) = 3.0_ki/5.0_ki * C(2) * coeffs%c2(6, 9)
+ ! [2, 2, 2, 3] <-- [2, 2, 2, 3, 3]
+ cprime%c2(6,6) = 2.0_ki/5.0_ki * C(3) * coeffs%c2(6, 9)
+ ! [0, 0, 1, 2] <-- [0, 0, 0, 1, 2]
+ cprime%c3(1,4) = 3.0_ki/5.0_ki * C(0) * coeffs%c3(1, 10)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 1, 2]
+ cprime%c2(2,6) = cprime%c2(2,6) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(1, 10)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 1, 2]
+ cprime%c2(1,6) = cprime%c2(1,6) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(1, 10)
+ ! [0, 0, 1, 3] <-- [0, 0, 0, 1, 3]
+ cprime%c3(2,4) = 3.0_ki/5.0_ki * C(0) * coeffs%c3(2, 10)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 1, 3]
+ cprime%c2(3,6) = cprime%c2(3,6) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(2, 10)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 1, 3]
+ cprime%c2(1,6) = cprime%c2(1,6) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(2, 10)
+ ! [0, 0, 2, 3] <-- [0, 0, 0, 2, 3]
+ cprime%c3(3,4) = 3.0_ki/5.0_ki * C(0) * coeffs%c3(3, 10)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 2, 3]
+ cprime%c2(3,6) = cprime%c2(3,6) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(3, 10)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 2, 3]
+ cprime%c2(2,6) = cprime%c2(2,6) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(3, 10)
+ ! [1, 1, 2, 3] <-- [1, 1, 1, 2, 3]
+ cprime%c3(4,4) = 3.0_ki/5.0_ki * C(1) * coeffs%c3(4, 10)
+ ! [1, 1, 1, 3] <-- [1, 1, 1, 2, 3]
+ cprime%c2(5,6) = cprime%c2(5,6) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(4, 10)
+ ! [1, 1, 1, 2] <-- [1, 1, 1, 2, 3]
+ cprime%c2(4,6) = cprime%c2(4,6) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(4, 10)
+ ! [1, 2, 3, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c3(4,2) = 1.0_ki/5.0_ki * C(0) * coeffs%c4(1, 2)
+ ! [0, 2, 3, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c3(3,2) = 1.0_ki/5.0_ki * C(1) * coeffs%c4(1, 2)
+ ! [0, 1, 3, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c3(2,2) = 1.0_ki/5.0_ki * C(2) * coeffs%c4(1, 2)
+ ! [0, 1, 2, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c4(1,1) = 2.0_ki/5.0_ki * C(3) * coeffs%c4(1, 2)
+ ! [1, 2, 2, 2] <-- [0, 1, 2, 2, 2]
+ cprime%c2(4,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c3(1, 3)
+ ! [0, 2, 2, 2] <-- [0, 1, 2, 2, 2]
+ cprime%c2(2,3) = 1.0_ki/5.0_ki * C(1) * coeffs%c3(1, 3)
+ ! [0, 1, 2, 2] <-- [0, 1, 2, 2, 2]
+ cprime%c3(1,2) = 3.0_ki/5.0_ki * C(2) * coeffs%c3(1, 3)
+ ! [1, 3, 3, 3] <-- [0, 1, 3, 3, 3]
+ cprime%c2(5,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c3(2, 3)
+ ! [0, 3, 3, 3] <-- [0, 1, 3, 3, 3]
+ cprime%c2(3,3) = 1.0_ki/5.0_ki * C(1) * coeffs%c3(2, 3)
+ ! [0, 1, 3, 3] <-- [0, 1, 3, 3, 3]
+ cprime%c3(2,2) = cprime%c3(2,2) + 3.0_ki/5.0_ki * C(3) * coeffs%c3(2, 3)
+ ! [2, 3, 3, 3] <-- [0, 2, 3, 3, 3]
+ cprime%c2(6,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c3(3, 3)
+ ! [0, 3, 3, 3] <-- [0, 2, 3, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(3, 3)
+ ! [0, 2, 3, 3] <-- [0, 2, 3, 3, 3]
+ cprime%c3(3,2) = cprime%c3(3,2) + 3.0_ki/5.0_ki * C(3) * coeffs%c3(3, 3)
+ ! [2, 3, 3, 3] <-- [1, 2, 3, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(4, 3)
+ ! [1, 3, 3, 3] <-- [1, 2, 3, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(4, 3)
+ ! [1, 2, 3, 3] <-- [1, 2, 3, 3, 3]
+ cprime%c3(4,2) = cprime%c3(4,2) + 3.0_ki/5.0_ki * C(3) * coeffs%c3(4, 3)
+ ! [0, 1, 2, 3] <-- [0, 0, 1, 2, 3]
+ cprime%c4(1,1) = cprime%c4(1,1) + 2.0_ki/5.0_ki * C(0) * coeffs%c4(1, 5)
+ ! [0, 0, 2, 3] <-- [0, 0, 1, 2, 3]
+ cprime%c3(3,4) = cprime%c3(3,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c4(1, 5)
+ ! [0, 0, 1, 3] <-- [0, 0, 1, 2, 3]
+ cprime%c3(2,4) = cprime%c3(2,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c4(1, 5)
+ ! [0, 0, 1, 2] <-- [0, 0, 1, 2, 3]
+ cprime%c3(1,4) = cprime%c3(1,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c4(1, 5)
+ ! [1, 2, 2, 3] <-- [0, 1, 2, 2, 3]
+ cprime%c3(4,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c4(1, 3)
+ ! [0, 2, 2, 3] <-- [0, 1, 2, 2, 3]
+ cprime%c3(3,3) = 1.0_ki/5.0_ki * C(1) * coeffs%c4(1, 3)
+ ! [0, 1, 2, 3] <-- [0, 1, 2, 2, 3]
+ cprime%c4(1,1) = cprime%c4(1,1) + 2.0_ki/5.0_ki * C(2) * coeffs%c4(1, 3)
+ ! [0, 1, 2, 2] <-- [0, 1, 2, 2, 3]
+ cprime%c3(1,2) = cprime%c3(1,2) + 1.0_ki/5.0_ki * C(3) * coeffs%c4(1, 3)
+ ! [1, 1, 1, 2] <-- [0, 1, 1, 1, 2]
+ cprime%c2(4,6) = cprime%c2(4,6) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(1, 6)
+ ! [0, 1, 1, 2] <-- [0, 1, 1, 1, 2]
+ cprime%c3(1,3) = 3.0_ki/5.0_ki * C(1) * coeffs%c3(1, 6)
+ ! [0, 1, 1, 1] <-- [0, 1, 1, 1, 2]
+ cprime%c2(1,3) = 1.0_ki/5.0_ki * C(2) * coeffs%c3(1, 6)
+ ! [1, 1, 1, 3] <-- [0, 1, 1, 1, 3]
+ cprime%c2(5,6) = cprime%c2(5,6) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(2, 6)
+ ! [0, 1, 1, 3] <-- [0, 1, 1, 1, 3]
+ cprime%c3(2,3) = 3.0_ki/5.0_ki * C(1) * coeffs%c3(2, 6)
+ ! [0, 1, 1, 1] <-- [0, 1, 1, 1, 3]
+ cprime%c2(1,3) = cprime%c2(1,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(2, 6)
+ ! [2, 2, 2, 3] <-- [0, 2, 2, 2, 3]
+ cprime%c2(6,6) = cprime%c2(6,6) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(3, 6)
+ ! [0, 2, 2, 3] <-- [0, 2, 2, 2, 3]
+ cprime%c3(3,3) = cprime%c3(3,3) + 3.0_ki/5.0_ki * C(2) * coeffs%c3(3, 6)
+ ! [0, 2, 2, 2] <-- [0, 2, 2, 2, 3]
+ cprime%c2(2,3) = cprime%c2(2,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(3, 6)
+ ! [2, 2, 2, 3] <-- [1, 2, 2, 2, 3]
+ cprime%c2(6,6) = cprime%c2(6,6) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(4, 6)
+ ! [1, 2, 2, 3] <-- [1, 2, 2, 2, 3]
+ cprime%c3(4,3) = cprime%c3(4,3) + 3.0_ki/5.0_ki * C(2) * coeffs%c3(4, 6)
+ ! [1, 2, 2, 2] <-- [1, 2, 2, 2, 3]
+ cprime%c2(4,3) = cprime%c2(4,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(4, 6)
+ ! [1, 1, 1, 1] <-- [0, 1, 1, 1, 1]
+ cprime%c1(2,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c2(1, 4)
+ ! [0, 1, 1, 1] <-- [0, 1, 1, 1, 1]
+ cprime%c2(1,3) = cprime%c2(1,3) + 4.0_ki/5.0_ki * C(1) * coeffs%c2(1, 4)
+ ! [2, 2, 2, 2] <-- [0, 2, 2, 2, 2]
+ cprime%c1(3,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c2(2, 4)
+ ! [0, 2, 2, 2] <-- [0, 2, 2, 2, 2]
+ cprime%c2(2,3) = cprime%c2(2,3) + 4.0_ki/5.0_ki * C(2) * coeffs%c2(2, 4)
+ ! [3, 3, 3, 3] <-- [0, 3, 3, 3, 3]
+ cprime%c1(4,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c2(3, 4)
+ ! [0, 3, 3, 3] <-- [0, 3, 3, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 4.0_ki/5.0_ki * C(3) * coeffs%c2(3, 4)
+ ! [2, 2, 2, 2] <-- [1, 2, 2, 2, 2]
+ cprime%c1(3,4) = cprime%c1(3,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c2(4, 4)
+ ! [1, 2, 2, 2] <-- [1, 2, 2, 2, 2]
+ cprime%c2(4,3) = cprime%c2(4,3) + 4.0_ki/5.0_ki * C(2) * coeffs%c2(4, 4)
+ ! [3, 3, 3, 3] <-- [1, 3, 3, 3, 3]
+ cprime%c1(4,4) = cprime%c1(4,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c2(5, 4)
+ ! [1, 3, 3, 3] <-- [1, 3, 3, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 4.0_ki/5.0_ki * C(3) * coeffs%c2(5, 4)
+ ! [3, 3, 3, 3] <-- [2, 3, 3, 3, 3]
+ cprime%c1(4,4) = cprime%c1(4,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c2(6, 4)
+ ! [2, 3, 3, 3] <-- [2, 3, 3, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 4.0_ki/5.0_ki * C(3) * coeffs%c2(6, 4)
+ ! [1, 1, 2, 2] <-- [0, 1, 1, 2, 2]
+ cprime%c2(4,5) = cprime%c2(4,5) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(1, 5)
+ ! [0, 1, 2, 2] <-- [0, 1, 1, 2, 2]
+ cprime%c3(1,2) = cprime%c3(1,2) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(1, 5)
+ ! [0, 1, 1, 2] <-- [0, 1, 1, 2, 2]
+ cprime%c3(1,3) = cprime%c3(1,3) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(1, 5)
+ ! [1, 1, 3, 3] <-- [0, 1, 1, 3, 3]
+ cprime%c2(5,5) = cprime%c2(5,5) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(2, 5)
+ ! [0, 1, 3, 3] <-- [0, 1, 1, 3, 3]
+ cprime%c3(2,2) = cprime%c3(2,2) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(2, 5)
+ ! [0, 1, 1, 3] <-- [0, 1, 1, 3, 3]
+ cprime%c3(2,3) = cprime%c3(2,3) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(2, 5)
+ ! [2, 2, 3, 3] <-- [0, 2, 2, 3, 3]
+ cprime%c2(6,5) = cprime%c2(6,5) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(3, 5)
+ ! [0, 2, 3, 3] <-- [0, 2, 2, 3, 3]
+ cprime%c3(3,2) = cprime%c3(3,2) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(3, 5)
+ ! [0, 2, 2, 3] <-- [0, 2, 2, 3, 3]
+ cprime%c3(3,3) = cprime%c3(3,3) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(3, 5)
+ ! [2, 2, 3, 3] <-- [1, 2, 2, 3, 3]
+ cprime%c2(6,5) = cprime%c2(6,5) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(4, 5)
+ ! [1, 2, 3, 3] <-- [1, 2, 2, 3, 3]
+ cprime%c3(4,2) = cprime%c3(4,2) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(4, 5)
+ ! [1, 2, 2, 3] <-- [1, 2, 2, 3, 3]
+ cprime%c3(4,3) = cprime%c3(4,3) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(4, 5)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 0]
+ cprime%c1(1,4) = C(0) * coeffs%c1(1, 5)
+ ! [1, 1, 1, 1] <-- [1, 1, 1, 1, 1]
+ cprime%c1(2,4) = cprime%c1(2,4) + C(1) * coeffs%c1(2, 5)
+ ! [2, 2, 2, 2] <-- [2, 2, 2, 2, 2]
+ cprime%c1(3,4) = cprime%c1(3,4) + C(2) * coeffs%c1(3, 5)
+ ! [3, 3, 3, 3] <-- [3, 3, 3, 3, 3]
+ cprime%c1(4,4) = cprime%c1(4,4) + C(3) * coeffs%c1(4, 5)
+ ! [0, 1, 1, 1] <-- [0, 0, 1, 1, 1]
+ cprime%c2(1,3) = cprime%c2(1,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c2(1, 7)
+ ! [0, 0, 1, 1] <-- [0, 0, 1, 1, 1]
+ cprime%c2(1,5) = cprime%c2(1,5) + 3.0_ki/5.0_ki * C(1) * coeffs%c2(1, 7)
+ ! [0, 2, 2, 2] <-- [0, 0, 2, 2, 2]
+ cprime%c2(2,3) = cprime%c2(2,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c2(2, 7)
+ ! [0, 0, 2, 2] <-- [0, 0, 2, 2, 2]
+ cprime%c2(2,5) = cprime%c2(2,5) + 3.0_ki/5.0_ki * C(2) * coeffs%c2(2, 7)
+ ! [0, 3, 3, 3] <-- [0, 0, 3, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c2(3, 7)
+ ! [0, 0, 3, 3] <-- [0, 0, 3, 3, 3]
+ cprime%c2(3,5) = cprime%c2(3,5) + 3.0_ki/5.0_ki * C(3) * coeffs%c2(3, 7)
+ ! [1, 2, 2, 2] <-- [1, 1, 2, 2, 2]
+ cprime%c2(4,3) = cprime%c2(4,3) + 2.0_ki/5.0_ki * C(1) * coeffs%c2(4, 7)
+ ! [1, 1, 2, 2] <-- [1, 1, 2, 2, 2]
+ cprime%c2(4,5) = cprime%c2(4,5) + 3.0_ki/5.0_ki * C(2) * coeffs%c2(4, 7)
+ ! [1, 3, 3, 3] <-- [1, 1, 3, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 2.0_ki/5.0_ki * C(1) * coeffs%c2(5, 7)
+ ! [1, 1, 3, 3] <-- [1, 1, 3, 3, 3]
+ cprime%c2(5,5) = cprime%c2(5,5) + 3.0_ki/5.0_ki * C(3) * coeffs%c2(5, 7)
+ ! [2, 3, 3, 3] <-- [2, 2, 3, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 2.0_ki/5.0_ki * C(2) * coeffs%c2(6, 7)
+ ! [2, 2, 3, 3] <-- [2, 2, 3, 3, 3]
+ cprime%c2(6,5) = cprime%c2(6,5) + 3.0_ki/5.0_ki * C(3) * coeffs%c2(6, 7)
+ ! [0, 1, 2, 2] <-- [0, 0, 1, 2, 2]
+ cprime%c3(1,2) = cprime%c3(1,2) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(1, 8)
+ ! [0, 0, 2, 2] <-- [0, 0, 1, 2, 2]
+ cprime%c2(2,5) = cprime%c2(2,5) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(1, 8)
+ ! [0, 0, 1, 2] <-- [0, 0, 1, 2, 2]
+ cprime%c3(1,4) = cprime%c3(1,4) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(1, 8)
+ ! [0, 1, 3, 3] <-- [0, 0, 1, 3, 3]
+ cprime%c3(2,2) = cprime%c3(2,2) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(2, 8)
+ ! [0, 0, 3, 3] <-- [0, 0, 1, 3, 3]
+ cprime%c2(3,5) = cprime%c2(3,5) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(2, 8)
+ ! [0, 0, 1, 3] <-- [0, 0, 1, 3, 3]
+ cprime%c3(2,4) = cprime%c3(2,4) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(2, 8)
+ ! [0, 2, 3, 3] <-- [0, 0, 2, 3, 3]
+ cprime%c3(3,2) = cprime%c3(3,2) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(3, 8)
+ ! [0, 0, 3, 3] <-- [0, 0, 2, 3, 3]
+ cprime%c2(3,5) = cprime%c2(3,5) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(3, 8)
+ ! [0, 0, 2, 3] <-- [0, 0, 2, 3, 3]
+ cprime%c3(3,4) = cprime%c3(3,4) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(3, 8)
+ ! [1, 2, 3, 3] <-- [1, 1, 2, 3, 3]
+ cprime%c3(4,2) = cprime%c3(4,2) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(4, 8)
+ ! [1, 1, 3, 3] <-- [1, 1, 2, 3, 3]
+ cprime%c2(5,5) = cprime%c2(5,5) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(4, 8)
+ ! [1, 1, 2, 3] <-- [1, 1, 2, 3, 3]
+ cprime%c3(4,4) = cprime%c3(4,4) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(4, 8)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 0, 1]
+ cprime%c2(1,6) = cprime%c2(1,6) + 4.0_ki/5.0_ki * C(0) * coeffs%c2(1, 10)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 1]
+ cprime%c1(1,4) = cprime%c1(1,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c2(1, 10)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 0, 2]
+ cprime%c2(2,6) = cprime%c2(2,6) + 4.0_ki/5.0_ki * C(0) * coeffs%c2(2, 10)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 2]
+ cprime%c1(1,4) = cprime%c1(1,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c2(2, 10)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 0, 3]
+ cprime%c2(3,6) = cprime%c2(3,6) + 4.0_ki/5.0_ki * C(0) * coeffs%c2(3, 10)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 3]
+ cprime%c1(1,4) = cprime%c1(1,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c2(3, 10)
+ ! [1, 1, 1, 2] <-- [1, 1, 1, 1, 2]
+ cprime%c2(4,6) = cprime%c2(4,6) + 4.0_ki/5.0_ki * C(1) * coeffs%c2(4, 10)
+ ! [1, 1, 1, 1] <-- [1, 1, 1, 1, 2]
+ cprime%c1(2,4) = cprime%c1(2,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c2(4, 10)
+ ! [1, 1, 1, 3] <-- [1, 1, 1, 1, 3]
+ cprime%c2(5,6) = cprime%c2(5,6) + 4.0_ki/5.0_ki * C(1) * coeffs%c2(5, 10)
+ ! [1, 1, 1, 1] <-- [1, 1, 1, 1, 3]
+ cprime%c1(2,4) = cprime%c1(2,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c2(5, 10)
+ ! [2, 2, 2, 3] <-- [2, 2, 2, 2, 3]
+ cprime%c2(6,6) = cprime%c2(6,6) + 4.0_ki/5.0_ki * C(2) * coeffs%c2(6, 10)
+ ! [2, 2, 2, 2] <-- [2, 2, 2, 2, 3]
+ cprime%c1(3,4) = cprime%c1(3,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c2(6, 10)
+ ! [0, 1, 1, 2] <-- [0, 0, 1, 1, 2]
+ cprime%c3(1,3) = cprime%c3(1,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(1, 9)
+ ! [0, 0, 1, 2] <-- [0, 0, 1, 1, 2]
+ cprime%c3(1,4) = cprime%c3(1,4) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(1, 9)
+ ! [0, 0, 1, 1] <-- [0, 0, 1, 1, 2]
+ cprime%c2(1,5) = cprime%c2(1,5) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(1, 9)
+ ! [0, 1, 1, 3] <-- [0, 0, 1, 1, 3]
+ cprime%c3(2,3) = cprime%c3(2,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(2, 9)
+ ! [0, 0, 1, 3] <-- [0, 0, 1, 1, 3]
+ cprime%c3(2,4) = cprime%c3(2,4) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(2, 9)
+ ! [0, 0, 1, 1] <-- [0, 0, 1, 1, 3]
+ cprime%c2(1,5) = cprime%c2(1,5) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(2, 9)
+ ! [0, 2, 2, 3] <-- [0, 0, 2, 2, 3]
+ cprime%c3(3,3) = cprime%c3(3,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(3, 9)
+ ! [0, 0, 2, 3] <-- [0, 0, 2, 2, 3]
+ cprime%c3(3,4) = cprime%c3(3,4) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(3, 9)
+ ! [0, 0, 2, 2] <-- [0, 0, 2, 2, 3]
+ cprime%c2(2,5) = cprime%c2(2,5) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(3, 9)
+ ! [1, 2, 2, 3] <-- [1, 1, 2, 2, 3]
+ cprime%c3(4,3) = cprime%c3(4,3) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(4, 9)
+ ! [1, 1, 2, 3] <-- [1, 1, 2, 2, 3]
+ cprime%c3(4,4) = cprime%c3(4,4) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(4, 9)
+ ! [1, 1, 2, 2] <-- [1, 1, 2, 2, 3]
+ cprime%c2(4,5) = cprime%c2(4,5) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(4, 9)
+ ! [1, 1, 2, 3] <-- [0, 1, 1, 2, 3]
+ cprime%c3(4,4) = cprime%c3(4,4) + 1.0_ki/5.0_ki * C(0) * coeffs%c4(1, 4)
+ ! [0, 1, 2, 3] <-- [0, 1, 1, 2, 3]
+ cprime%c4(1,1) = cprime%c4(1,1) + 2.0_ki/5.0_ki * C(1) * coeffs%c4(1, 4)
+ ! [0, 1, 1, 3] <-- [0, 1, 1, 2, 3]
+ cprime%c3(2,3) = cprime%c3(2,3) + 1.0_ki/5.0_ki * C(2) * coeffs%c4(1, 4)
+ ! [0, 1, 1, 2] <-- [0, 1, 1, 2, 3]
+ cprime%c3(1,3) = cprime%c3(1,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c4(1, 4)
+ amp = amp - contract5_4(cprime, momenta, new_set)
+ end do
+end function contract6_5
+!****f* src/interface/tens_comb/contract6_6
+! NAME
+!
+! Function contract6_6
+!
+! USAGE
+!
+! amp = contract6_6(coeffs, momenta, b_set)
+!
+! DESCRIPTION
+!
+! Contracts the 6-point rank 6 tensor integral
+! with its coefficients.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_6)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+! * b_set -- the set of pinched propagators as integer number (bit-set)
+!
+! RETURN VALUE
+!
+! The result of contracting the tensor integral with its coefficient.
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+function contract6_6(coeffs, momenta, b_set) result(amp)
+ ! generated by: write_function_contract
+ implicit none
+ type(coeff_type_6), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in) :: momenta
+ integer, intent(in) :: b_set
+ type(form_factor) :: amp
+ ! generated by: write_contract_split
+ complex(ki), dimension(0:3) :: C
+ type(coeff_type_5) :: cprime
+ integer :: i, pnch, new_set
+ integer, dimension(1) :: pnch_set
+ integer, dimension(6) :: unpinched
+ unpinched = unpackb(pminus(b_ref, b_set), 6)
+ amp = coeffs%c0 * a60(b_set)
+ do pnch=1,6
+ ! Eq. (54) in hep-ph/0504267
+ C(:) = 0.0_ki
+ do i=1,6
+ C(:) = C(:) + inv_s(unpinched(pnch),unpinched(i),b_set) * &
+ & momenta(unpinched(i),:)
+ end do
+ ! Eq. (63) in hep-ph/0504267
+ pnch_set(1) = pnch
+ new_set = punion(packb(pnch_set),b_set)
+ ! [] <-- [0]
+ cprime%c0 = C(0) * coeffs%c1(1, 1)
+ ! [] <-- [1]
+ cprime%c0 = cprime%c0 + C(1) * coeffs%c1(2, 1)
+ ! [] <-- [2]
+ cprime%c0 = cprime%c0 + C(2) * coeffs%c1(3, 1)
+ ! [] <-- [3]
+ cprime%c0 = cprime%c0 + C(3) * coeffs%c1(4, 1)
+ ! [0] <-- [0, 0]
+ cprime%c1(1,1) = C(0) * coeffs%c1(1, 2)
+ ! [1] <-- [1, 1]
+ cprime%c1(2,1) = C(1) * coeffs%c1(2, 2)
+ ! [2] <-- [2, 2]
+ cprime%c1(3,1) = C(2) * coeffs%c1(3, 2)
+ ! [3] <-- [3, 3]
+ cprime%c1(4,1) = C(3) * coeffs%c1(4, 2)
+ ! [1] <-- [0, 1]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(0) * coeffs%c2(1, 1)
+ ! [0] <-- [0, 1]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(1) * coeffs%c2(1, 1)
+ ! [2] <-- [0, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(0) * coeffs%c2(2, 1)
+ ! [0] <-- [0, 2]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(2) * coeffs%c2(2, 1)
+ ! [3] <-- [0, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(0) * coeffs%c2(3, 1)
+ ! [0] <-- [0, 3]
+ cprime%c1(1,1) = cprime%c1(1,1) + 0.5_ki * C(3) * coeffs%c2(3, 1)
+ ! [2] <-- [1, 2]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(1) * coeffs%c2(4, 1)
+ ! [1] <-- [1, 2]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(2) * coeffs%c2(4, 1)
+ ! [3] <-- [1, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(1) * coeffs%c2(5, 1)
+ ! [1] <-- [1, 3]
+ cprime%c1(2,1) = cprime%c1(2,1) + 0.5_ki * C(3) * coeffs%c2(5, 1)
+ ! [3] <-- [2, 3]
+ cprime%c1(4,1) = cprime%c1(4,1) + 0.5_ki * C(2) * coeffs%c2(6, 1)
+ ! [2] <-- [2, 3]
+ cprime%c1(3,1) = cprime%c1(3,1) + 0.5_ki * C(3) * coeffs%c2(6, 1)
+ ! [1, 1] <-- [0, 1, 1]
+ cprime%c1(2,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(1, 2)
+ ! [0, 1] <-- [0, 1, 1]
+ cprime%c2(1,1) = 2.0_ki/3.0_ki * C(1) * coeffs%c2(1, 2)
+ ! [2, 2] <-- [0, 2, 2]
+ cprime%c1(3,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(2, 2)
+ ! [0, 2] <-- [0, 2, 2]
+ cprime%c2(2,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(2, 2)
+ ! [3, 3] <-- [0, 3, 3]
+ cprime%c1(4,2) = 1.0_ki/3.0_ki * C(0) * coeffs%c2(3, 2)
+ ! [0, 3] <-- [0, 3, 3]
+ cprime%c2(3,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(3, 2)
+ ! [2, 2] <-- [1, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(4, 2)
+ ! [1, 2] <-- [1, 2, 2]
+ cprime%c2(4,1) = 2.0_ki/3.0_ki * C(2) * coeffs%c2(4, 2)
+ ! [3, 3] <-- [1, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(5, 2)
+ ! [1, 3] <-- [1, 3, 3]
+ cprime%c2(5,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(5, 2)
+ ! [3, 3] <-- [2, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(6, 2)
+ ! [2, 3] <-- [2, 3, 3]
+ cprime%c2(6,1) = 2.0_ki/3.0_ki * C(3) * coeffs%c2(6, 2)
+ ! [1, 2] <-- [0, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 1)
+ ! [0, 2] <-- [0, 1, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 1)
+ ! [0, 1] <-- [0, 1, 2]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 1)
+ ! [1, 3] <-- [0, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 1)
+ ! [0, 3] <-- [0, 1, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 1)
+ ! [0, 1] <-- [0, 1, 3]
+ cprime%c2(1,1) = cprime%c2(1,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 1)
+ ! [2, 3] <-- [0, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 1)
+ ! [0, 3] <-- [0, 2, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 1)
+ ! [0, 2] <-- [0, 2, 3]
+ cprime%c2(2,1) = cprime%c2(2,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 1)
+ ! [2, 3] <-- [1, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 1)
+ ! [1, 3] <-- [1, 2, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 1)
+ ! [1, 2] <-- [1, 2, 3]
+ cprime%c2(4,1) = cprime%c2(4,1) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 1)
+ ! [0, 0] <-- [0, 0, 0]
+ cprime%c1(1,2) = C(0) * coeffs%c1(1, 3)
+ ! [1, 1] <-- [1, 1, 1]
+ cprime%c1(2,2) = cprime%c1(2,2) + C(1) * coeffs%c1(2, 3)
+ ! [2, 2] <-- [2, 2, 2]
+ cprime%c1(3,2) = cprime%c1(3,2) + C(2) * coeffs%c1(3, 3)
+ ! [3, 3] <-- [3, 3, 3]
+ cprime%c1(4,2) = cprime%c1(4,2) + C(3) * coeffs%c1(4, 3)
+ ! [0, 1] <-- [0, 0, 1]
+ cprime%c2(1,1) = cprime%c2(1,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(1, 6)
+ ! [0, 0] <-- [0, 0, 1]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(1, 6)
+ ! [0, 2] <-- [0, 0, 2]
+ cprime%c2(2,1) = cprime%c2(2,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(2, 6)
+ ! [0, 0] <-- [0, 0, 2]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(2, 6)
+ ! [0, 3] <-- [0, 0, 3]
+ cprime%c2(3,1) = cprime%c2(3,1) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(3, 6)
+ ! [0, 0] <-- [0, 0, 3]
+ cprime%c1(1,2) = cprime%c1(1,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(3, 6)
+ ! [1, 2] <-- [1, 1, 2]
+ cprime%c2(4,1) = cprime%c2(4,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(4, 6)
+ ! [1, 1] <-- [1, 1, 2]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(4, 6)
+ ! [1, 3] <-- [1, 1, 3]
+ cprime%c2(5,1) = cprime%c2(5,1) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(5, 6)
+ ! [1, 1] <-- [1, 1, 3]
+ cprime%c1(2,2) = cprime%c1(2,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(5, 6)
+ ! [2, 3] <-- [2, 2, 3]
+ cprime%c2(6,1) = cprime%c2(6,1) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(6, 6)
+ ! [2, 2] <-- [2, 2, 3]
+ cprime%c1(3,2) = cprime%c1(3,2) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(6, 6)
+ ! [1, 1, 2] <-- [0, 1, 1, 2]
+ cprime%c2(4,5) = 0.25_ki * C(0) * coeffs%c3(1, 5)
+ ! [0, 1, 2] <-- [0, 1, 1, 2]
+ cprime%c3(1,1) = 0.5_ki * C(1) * coeffs%c3(1, 5)
+ ! [0, 1, 1] <-- [0, 1, 1, 2]
+ cprime%c2(1,2) = 0.25_ki * C(2) * coeffs%c3(1, 5)
+ ! [1, 1, 3] <-- [0, 1, 1, 3]
+ cprime%c2(5,5) = 0.25_ki * C(0) * coeffs%c3(2, 5)
+ ! [0, 1, 3] <-- [0, 1, 1, 3]
+ cprime%c3(2,1) = 0.5_ki * C(1) * coeffs%c3(2, 5)
+ ! [0, 1, 1] <-- [0, 1, 1, 3]
+ cprime%c2(1,2) = cprime%c2(1,2) + 0.25_ki * C(3) * coeffs%c3(2, 5)
+ ! [2, 2, 3] <-- [0, 2, 2, 3]
+ cprime%c2(6,5) = 0.25_ki * C(0) * coeffs%c3(3, 5)
+ ! [0, 2, 3] <-- [0, 2, 2, 3]
+ cprime%c3(3,1) = 0.5_ki * C(2) * coeffs%c3(3, 5)
+ ! [0, 2, 2] <-- [0, 2, 2, 3]
+ cprime%c2(2,2) = 0.25_ki * C(3) * coeffs%c3(3, 5)
+ ! [2, 2, 3] <-- [1, 2, 2, 3]
+ cprime%c2(6,5) = cprime%c2(6,5) + 0.25_ki * C(1) * coeffs%c3(4, 5)
+ ! [1, 2, 3] <-- [1, 2, 2, 3]
+ cprime%c3(4,1) = 0.5_ki * C(2) * coeffs%c3(4, 5)
+ ! [1, 2, 2] <-- [1, 2, 2, 3]
+ cprime%c2(4,2) = 0.25_ki * C(3) * coeffs%c3(4, 5)
+ ! [1, 1, 1] <-- [0, 1, 1, 1]
+ cprime%c1(2,3) = 0.25_ki * C(0) * coeffs%c2(1, 3)
+ ! [0, 1, 1] <-- [0, 1, 1, 1]
+ cprime%c2(1,2) = cprime%c2(1,2) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(1, 3)
+ ! [2, 2, 2] <-- [0, 2, 2, 2]
+ cprime%c1(3,3) = 0.25_ki * C(0) * coeffs%c2(2, 3)
+ ! [0, 2, 2] <-- [0, 2, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(2, 3)
+ ! [3, 3, 3] <-- [0, 3, 3, 3]
+ cprime%c1(4,3) = 0.25_ki * C(0) * coeffs%c2(3, 3)
+ ! [0, 3, 3] <-- [0, 3, 3, 3]
+ cprime%c2(3,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(3, 3)
+ ! [2, 2, 2] <-- [1, 2, 2, 2]
+ cprime%c1(3,3) = cprime%c1(3,3) + 0.25_ki * C(1) * coeffs%c2(4, 3)
+ ! [1, 2, 2] <-- [1, 2, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(4, 3)
+ ! [3, 3, 3] <-- [1, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + 0.25_ki * C(1) * coeffs%c2(5, 3)
+ ! [1, 3, 3] <-- [1, 3, 3, 3]
+ cprime%c2(5,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(5, 3)
+ ! [3, 3, 3] <-- [2, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + 0.25_ki * C(2) * coeffs%c2(6, 3)
+ ! [2, 3, 3] <-- [2, 3, 3, 3]
+ cprime%c2(6,2) = 3.0_ki/4.0_ki * C(3) * coeffs%c2(6, 3)
+ ! [0, 1, 2] <-- [0, 0, 1, 2]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.5_ki * C(0) * coeffs%c3(1, 11)
+ ! [0, 0, 2] <-- [0, 0, 1, 2]
+ cprime%c2(2,5) = 0.25_ki * C(1) * coeffs%c3(1, 11)
+ ! [0, 0, 1] <-- [0, 0, 1, 2]
+ cprime%c2(1,5) = 0.25_ki * C(2) * coeffs%c3(1, 11)
+ ! [0, 1, 3] <-- [0, 0, 1, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.5_ki * C(0) * coeffs%c3(2, 11)
+ ! [0, 0, 3] <-- [0, 0, 1, 3]
+ cprime%c2(3,5) = 0.25_ki * C(1) * coeffs%c3(2, 11)
+ ! [0, 0, 1] <-- [0, 0, 1, 3]
+ cprime%c2(1,5) = cprime%c2(1,5) + 0.25_ki * C(3) * coeffs%c3(2, 11)
+ ! [0, 2, 3] <-- [0, 0, 2, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.5_ki * C(0) * coeffs%c3(3, 11)
+ ! [0, 0, 3] <-- [0, 0, 2, 3]
+ cprime%c2(3,5) = cprime%c2(3,5) + 0.25_ki * C(2) * coeffs%c3(3, 11)
+ ! [0, 0, 2] <-- [0, 0, 2, 3]
+ cprime%c2(2,5) = cprime%c2(2,5) + 0.25_ki * C(3) * coeffs%c3(3, 11)
+ ! [1, 2, 3] <-- [1, 1, 2, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.5_ki * C(1) * coeffs%c3(4, 11)
+ ! [1, 1, 3] <-- [1, 1, 2, 3]
+ cprime%c2(5,5) = cprime%c2(5,5) + 0.25_ki * C(2) * coeffs%c3(4, 11)
+ ! [1, 1, 2] <-- [1, 1, 2, 3]
+ cprime%c2(4,5) = cprime%c2(4,5) + 0.25_ki * C(3) * coeffs%c3(4, 11)
+ ! [0, 0, 1] <-- [0, 0, 0, 1]
+ cprime%c2(1,5) = cprime%c2(1,5) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(1, 10)
+ ! [0, 0, 0] <-- [0, 0, 0, 1]
+ cprime%c1(1,3) = 0.25_ki * C(1) * coeffs%c2(1, 10)
+ ! [0, 0, 2] <-- [0, 0, 0, 2]
+ cprime%c2(2,5) = cprime%c2(2,5) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(2, 10)
+ ! [0, 0, 0] <-- [0, 0, 0, 2]
+ cprime%c1(1,3) = cprime%c1(1,3) + 0.25_ki * C(2) * coeffs%c2(2, 10)
+ ! [0, 0, 3] <-- [0, 0, 0, 3]
+ cprime%c2(3,5) = cprime%c2(3,5) + 3.0_ki/4.0_ki * C(0) * coeffs%c2(3, 10)
+ ! [0, 0, 0] <-- [0, 0, 0, 3]
+ cprime%c1(1,3) = cprime%c1(1,3) + 0.25_ki * C(3) * coeffs%c2(3, 10)
+ ! [1, 1, 2] <-- [1, 1, 1, 2]
+ cprime%c2(4,5) = cprime%c2(4,5) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(4, 10)
+ ! [1, 1, 1] <-- [1, 1, 1, 2]
+ cprime%c1(2,3) = cprime%c1(2,3) + 0.25_ki * C(2) * coeffs%c2(4, 10)
+ ! [1, 1, 3] <-- [1, 1, 1, 3]
+ cprime%c2(5,5) = cprime%c2(5,5) + 3.0_ki/4.0_ki * C(1) * coeffs%c2(5, 10)
+ ! [1, 1, 1] <-- [1, 1, 1, 3]
+ cprime%c1(2,3) = cprime%c1(2,3) + 0.25_ki * C(3) * coeffs%c2(5, 10)
+ ! [2, 2, 3] <-- [2, 2, 2, 3]
+ cprime%c2(6,5) = cprime%c2(6,5) + 3.0_ki/4.0_ki * C(2) * coeffs%c2(6, 10)
+ ! [2, 2, 2] <-- [2, 2, 2, 3]
+ cprime%c1(3,3) = cprime%c1(3,3) + 0.25_ki * C(3) * coeffs%c2(6, 10)
+ ! [1, 2, 3] <-- [0, 1, 2, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.25_ki * C(0) * coeffs%c4(1, 1)
+ ! [0, 2, 3] <-- [0, 1, 2, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.25_ki * C(1) * coeffs%c4(1, 1)
+ ! [0, 1, 3] <-- [0, 1, 2, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.25_ki * C(2) * coeffs%c4(1, 1)
+ ! [0, 1, 2] <-- [0, 1, 2, 3]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.25_ki * C(3) * coeffs%c4(1, 1)
+ ! [1, 2, 2] <-- [0, 1, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 0.25_ki * C(0) * coeffs%c3(1, 2)
+ ! [0, 2, 2] <-- [0, 1, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 0.25_ki * C(1) * coeffs%c3(1, 2)
+ ! [0, 1, 2] <-- [0, 1, 2, 2]
+ cprime%c3(1,1) = cprime%c3(1,1) + 0.5_ki * C(2) * coeffs%c3(1, 2)
+ ! [1, 3, 3] <-- [0, 1, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.25_ki * C(0) * coeffs%c3(2, 2)
+ ! [0, 3, 3] <-- [0, 1, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.25_ki * C(1) * coeffs%c3(2, 2)
+ ! [0, 1, 3] <-- [0, 1, 3, 3]
+ cprime%c3(2,1) = cprime%c3(2,1) + 0.5_ki * C(3) * coeffs%c3(2, 2)
+ ! [2, 3, 3] <-- [0, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.25_ki * C(0) * coeffs%c3(3, 2)
+ ! [0, 3, 3] <-- [0, 2, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.25_ki * C(2) * coeffs%c3(3, 2)
+ ! [0, 2, 3] <-- [0, 2, 3, 3]
+ cprime%c3(3,1) = cprime%c3(3,1) + 0.5_ki * C(3) * coeffs%c3(3, 2)
+ ! [2, 3, 3] <-- [1, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.25_ki * C(1) * coeffs%c3(4, 2)
+ ! [1, 3, 3] <-- [1, 2, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.25_ki * C(2) * coeffs%c3(4, 2)
+ ! [1, 2, 3] <-- [1, 2, 3, 3]
+ cprime%c3(4,1) = cprime%c3(4,1) + 0.5_ki * C(3) * coeffs%c3(4, 2)
+ ! [0, 1, 1] <-- [0, 0, 1, 1]
+ cprime%c2(1,2) = cprime%c2(1,2) + 0.5_ki * C(0) * coeffs%c2(1, 7)
+ ! [0, 0, 1] <-- [0, 0, 1, 1]
+ cprime%c2(1,5) = cprime%c2(1,5) + 0.5_ki * C(1) * coeffs%c2(1, 7)
+ ! [0, 2, 2] <-- [0, 0, 2, 2]
+ cprime%c2(2,2) = cprime%c2(2,2) + 0.5_ki * C(0) * coeffs%c2(2, 7)
+ ! [0, 0, 2] <-- [0, 0, 2, 2]
+ cprime%c2(2,5) = cprime%c2(2,5) + 0.5_ki * C(2) * coeffs%c2(2, 7)
+ ! [0, 3, 3] <-- [0, 0, 3, 3]
+ cprime%c2(3,2) = cprime%c2(3,2) + 0.5_ki * C(0) * coeffs%c2(3, 7)
+ ! [0, 0, 3] <-- [0, 0, 3, 3]
+ cprime%c2(3,5) = cprime%c2(3,5) + 0.5_ki * C(3) * coeffs%c2(3, 7)
+ ! [1, 2, 2] <-- [1, 1, 2, 2]
+ cprime%c2(4,2) = cprime%c2(4,2) + 0.5_ki * C(1) * coeffs%c2(4, 7)
+ ! [1, 1, 2] <-- [1, 1, 2, 2]
+ cprime%c2(4,5) = cprime%c2(4,5) + 0.5_ki * C(2) * coeffs%c2(4, 7)
+ ! [1, 3, 3] <-- [1, 1, 3, 3]
+ cprime%c2(5,2) = cprime%c2(5,2) + 0.5_ki * C(1) * coeffs%c2(5, 7)
+ ! [1, 1, 3] <-- [1, 1, 3, 3]
+ cprime%c2(5,5) = cprime%c2(5,5) + 0.5_ki * C(3) * coeffs%c2(5, 7)
+ ! [2, 3, 3] <-- [2, 2, 3, 3]
+ cprime%c2(6,2) = cprime%c2(6,2) + 0.5_ki * C(2) * coeffs%c2(6, 7)
+ ! [2, 2, 3] <-- [2, 2, 3, 3]
+ cprime%c2(6,5) = cprime%c2(6,5) + 0.5_ki * C(3) * coeffs%c2(6, 7)
+ ! [0, 0, 0] <-- [0, 0, 0, 0]
+ cprime%c1(1,3) = cprime%c1(1,3) + C(0) * coeffs%c1(1, 4)
+ ! [1, 1, 1] <-- [1, 1, 1, 1]
+ cprime%c1(2,3) = cprime%c1(2,3) + C(1) * coeffs%c1(2, 4)
+ ! [2, 2, 2] <-- [2, 2, 2, 2]
+ cprime%c1(3,3) = cprime%c1(3,3) + C(2) * coeffs%c1(3, 4)
+ ! [3, 3, 3] <-- [3, 3, 3, 3]
+ cprime%c1(4,3) = cprime%c1(4,3) + C(3) * coeffs%c1(4, 4)
+ ! [0, 0, 1, 1] <-- [0, 0, 0, 1, 1]
+ cprime%c2(1,6) = 3.0_ki/5.0_ki * C(0) * coeffs%c2(1, 11)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 1, 1]
+ cprime%c2(1,8) = 2.0_ki/5.0_ki * C(1) * coeffs%c2(1, 11)
+ ! [0, 0, 2, 2] <-- [0, 0, 0, 2, 2]
+ cprime%c2(2,6) = 3.0_ki/5.0_ki * C(0) * coeffs%c2(2, 11)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 2, 2]
+ cprime%c2(2,8) = 2.0_ki/5.0_ki * C(2) * coeffs%c2(2, 11)
+ ! [0, 0, 3, 3] <-- [0, 0, 0, 3, 3]
+ cprime%c2(3,6) = 3.0_ki/5.0_ki * C(0) * coeffs%c2(3, 11)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 3, 3]
+ cprime%c2(3,8) = 2.0_ki/5.0_ki * C(3) * coeffs%c2(3, 11)
+ ! [1, 1, 2, 2] <-- [1, 1, 1, 2, 2]
+ cprime%c2(4,6) = 3.0_ki/5.0_ki * C(1) * coeffs%c2(4, 11)
+ ! [1, 1, 1, 2] <-- [1, 1, 1, 2, 2]
+ cprime%c2(4,8) = 2.0_ki/5.0_ki * C(2) * coeffs%c2(4, 11)
+ ! [1, 1, 3, 3] <-- [1, 1, 1, 3, 3]
+ cprime%c2(5,6) = 3.0_ki/5.0_ki * C(1) * coeffs%c2(5, 11)
+ ! [1, 1, 1, 3] <-- [1, 1, 1, 3, 3]
+ cprime%c2(5,8) = 2.0_ki/5.0_ki * C(3) * coeffs%c2(5, 11)
+ ! [2, 2, 3, 3] <-- [2, 2, 2, 3, 3]
+ cprime%c2(6,6) = 3.0_ki/5.0_ki * C(2) * coeffs%c2(6, 11)
+ ! [2, 2, 2, 3] <-- [2, 2, 2, 3, 3]
+ cprime%c2(6,8) = 2.0_ki/5.0_ki * C(3) * coeffs%c2(6, 11)
+ ! [0, 0, 1, 2] <-- [0, 0, 0, 1, 2]
+ cprime%c3(1,7) = 3.0_ki/5.0_ki * C(0) * coeffs%c3(1, 17)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 1, 2]
+ cprime%c2(2,8) = cprime%c2(2,8) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(1, 17)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 1, 2]
+ cprime%c2(1,8) = cprime%c2(1,8) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(1, 17)
+ ! [0, 0, 1, 3] <-- [0, 0, 0, 1, 3]
+ cprime%c3(2,7) = 3.0_ki/5.0_ki * C(0) * coeffs%c3(2, 17)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 1, 3]
+ cprime%c2(3,8) = cprime%c2(3,8) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(2, 17)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 1, 3]
+ cprime%c2(1,8) = cprime%c2(1,8) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(2, 17)
+ ! [0, 0, 2, 3] <-- [0, 0, 0, 2, 3]
+ cprime%c3(3,7) = 3.0_ki/5.0_ki * C(0) * coeffs%c3(3, 17)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 2, 3]
+ cprime%c2(3,8) = cprime%c2(3,8) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(3, 17)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 2, 3]
+ cprime%c2(2,8) = cprime%c2(2,8) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(3, 17)
+ ! [1, 1, 2, 3] <-- [1, 1, 1, 2, 3]
+ cprime%c3(4,7) = 3.0_ki/5.0_ki * C(1) * coeffs%c3(4, 17)
+ ! [1, 1, 1, 3] <-- [1, 1, 1, 2, 3]
+ cprime%c2(5,8) = cprime%c2(5,8) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(4, 17)
+ ! [1, 1, 1, 2] <-- [1, 1, 1, 2, 3]
+ cprime%c2(4,8) = cprime%c2(4,8) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(4, 17)
+ ! [1, 2, 3, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c3(4,2) = 1.0_ki/5.0_ki * C(0) * coeffs%c4(1, 2)
+ ! [0, 2, 3, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c3(3,2) = 1.0_ki/5.0_ki * C(1) * coeffs%c4(1, 2)
+ ! [0, 1, 3, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c3(2,2) = 1.0_ki/5.0_ki * C(2) * coeffs%c4(1, 2)
+ ! [0, 1, 2, 3] <-- [0, 1, 2, 3, 3]
+ cprime%c4(1,1) = 2.0_ki/5.0_ki * C(3) * coeffs%c4(1, 2)
+ ! [1, 2, 2, 2] <-- [0, 1, 2, 2, 2]
+ cprime%c2(4,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c3(1, 3)
+ ! [0, 2, 2, 2] <-- [0, 1, 2, 2, 2]
+ cprime%c2(2,3) = 1.0_ki/5.0_ki * C(1) * coeffs%c3(1, 3)
+ ! [0, 1, 2, 2] <-- [0, 1, 2, 2, 2]
+ cprime%c3(1,2) = 3.0_ki/5.0_ki * C(2) * coeffs%c3(1, 3)
+ ! [1, 3, 3, 3] <-- [0, 1, 3, 3, 3]
+ cprime%c2(5,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c3(2, 3)
+ ! [0, 3, 3, 3] <-- [0, 1, 3, 3, 3]
+ cprime%c2(3,3) = 1.0_ki/5.0_ki * C(1) * coeffs%c3(2, 3)
+ ! [0, 1, 3, 3] <-- [0, 1, 3, 3, 3]
+ cprime%c3(2,2) = cprime%c3(2,2) + 3.0_ki/5.0_ki * C(3) * coeffs%c3(2, 3)
+ ! [2, 3, 3, 3] <-- [0, 2, 3, 3, 3]
+ cprime%c2(6,3) = 1.0_ki/5.0_ki * C(0) * coeffs%c3(3, 3)
+ ! [0, 3, 3, 3] <-- [0, 2, 3, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(3, 3)
+ ! [0, 2, 3, 3] <-- [0, 2, 3, 3, 3]
+ cprime%c3(3,2) = cprime%c3(3,2) + 3.0_ki/5.0_ki * C(3) * coeffs%c3(3, 3)
+ ! [2, 3, 3, 3] <-- [1, 2, 3, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(4, 3)
+ ! [1, 3, 3, 3] <-- [1, 2, 3, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(4, 3)
+ ! [1, 2, 3, 3] <-- [1, 2, 3, 3, 3]
+ cprime%c3(4,2) = cprime%c3(4,2) + 3.0_ki/5.0_ki * C(3) * coeffs%c3(4, 3)
+ ! [0, 1, 2, 3] <-- [0, 0, 1, 2, 3]
+ cprime%c4(1,1) = cprime%c4(1,1) + 2.0_ki/5.0_ki * C(0) * coeffs%c4(1, 11)
+ ! [0, 0, 2, 3] <-- [0, 0, 1, 2, 3]
+ cprime%c3(3,7) = cprime%c3(3,7) + 1.0_ki/5.0_ki * C(1) * coeffs%c4(1, 11)
+ ! [0, 0, 1, 3] <-- [0, 0, 1, 2, 3]
+ cprime%c3(2,7) = cprime%c3(2,7) + 1.0_ki/5.0_ki * C(2) * coeffs%c4(1, 11)
+ ! [0, 0, 1, 2] <-- [0, 0, 1, 2, 3]
+ cprime%c3(1,7) = cprime%c3(1,7) + 1.0_ki/5.0_ki * C(3) * coeffs%c4(1, 11)
+ ! [1, 2, 2, 3] <-- [0, 1, 2, 2, 3]
+ cprime%c3(4,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c4(1, 4)
+ ! [0, 2, 2, 3] <-- [0, 1, 2, 2, 3]
+ cprime%c3(3,4) = 1.0_ki/5.0_ki * C(1) * coeffs%c4(1, 4)
+ ! [0, 1, 2, 3] <-- [0, 1, 2, 2, 3]
+ cprime%c4(1,1) = cprime%c4(1,1) + 2.0_ki/5.0_ki * C(2) * coeffs%c4(1, 4)
+ ! [0, 1, 2, 2] <-- [0, 1, 2, 2, 3]
+ cprime%c3(1,2) = cprime%c3(1,2) + 1.0_ki/5.0_ki * C(3) * coeffs%c4(1, 4)
+ ! [1, 1, 1, 2] <-- [0, 1, 1, 1, 2]
+ cprime%c2(4,8) = cprime%c2(4,8) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(1, 8)
+ ! [0, 1, 1, 2] <-- [0, 1, 1, 1, 2]
+ cprime%c3(1,4) = 3.0_ki/5.0_ki * C(1) * coeffs%c3(1, 8)
+ ! [0, 1, 1, 1] <-- [0, 1, 1, 1, 2]
+ cprime%c2(1,3) = 1.0_ki/5.0_ki * C(2) * coeffs%c3(1, 8)
+ ! [1, 1, 1, 3] <-- [0, 1, 1, 1, 3]
+ cprime%c2(5,8) = cprime%c2(5,8) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(2, 8)
+ ! [0, 1, 1, 3] <-- [0, 1, 1, 1, 3]
+ cprime%c3(2,4) = 3.0_ki/5.0_ki * C(1) * coeffs%c3(2, 8)
+ ! [0, 1, 1, 1] <-- [0, 1, 1, 1, 3]
+ cprime%c2(1,3) = cprime%c2(1,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(2, 8)
+ ! [2, 2, 2, 3] <-- [0, 2, 2, 2, 3]
+ cprime%c2(6,8) = cprime%c2(6,8) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(3, 8)
+ ! [0, 2, 2, 3] <-- [0, 2, 2, 2, 3]
+ cprime%c3(3,4) = cprime%c3(3,4) + 3.0_ki/5.0_ki * C(2) * coeffs%c3(3, 8)
+ ! [0, 2, 2, 2] <-- [0, 2, 2, 2, 3]
+ cprime%c2(2,3) = cprime%c2(2,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(3, 8)
+ ! [2, 2, 2, 3] <-- [1, 2, 2, 2, 3]
+ cprime%c2(6,8) = cprime%c2(6,8) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(4, 8)
+ ! [1, 2, 2, 3] <-- [1, 2, 2, 2, 3]
+ cprime%c3(4,4) = cprime%c3(4,4) + 3.0_ki/5.0_ki * C(2) * coeffs%c3(4, 8)
+ ! [1, 2, 2, 2] <-- [1, 2, 2, 2, 3]
+ cprime%c2(4,3) = cprime%c2(4,3) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(4, 8)
+ ! [1, 1, 1, 1] <-- [0, 1, 1, 1, 1]
+ cprime%c1(2,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c2(1, 4)
+ ! [0, 1, 1, 1] <-- [0, 1, 1, 1, 1]
+ cprime%c2(1,3) = cprime%c2(1,3) + 4.0_ki/5.0_ki * C(1) * coeffs%c2(1, 4)
+ ! [2, 2, 2, 2] <-- [0, 2, 2, 2, 2]
+ cprime%c1(3,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c2(2, 4)
+ ! [0, 2, 2, 2] <-- [0, 2, 2, 2, 2]
+ cprime%c2(2,3) = cprime%c2(2,3) + 4.0_ki/5.0_ki * C(2) * coeffs%c2(2, 4)
+ ! [3, 3, 3, 3] <-- [0, 3, 3, 3, 3]
+ cprime%c1(4,4) = 1.0_ki/5.0_ki * C(0) * coeffs%c2(3, 4)
+ ! [0, 3, 3, 3] <-- [0, 3, 3, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 4.0_ki/5.0_ki * C(3) * coeffs%c2(3, 4)
+ ! [2, 2, 2, 2] <-- [1, 2, 2, 2, 2]
+ cprime%c1(3,4) = cprime%c1(3,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c2(4, 4)
+ ! [1, 2, 2, 2] <-- [1, 2, 2, 2, 2]
+ cprime%c2(4,3) = cprime%c2(4,3) + 4.0_ki/5.0_ki * C(2) * coeffs%c2(4, 4)
+ ! [3, 3, 3, 3] <-- [1, 3, 3, 3, 3]
+ cprime%c1(4,4) = cprime%c1(4,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c2(5, 4)
+ ! [1, 3, 3, 3] <-- [1, 3, 3, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 4.0_ki/5.0_ki * C(3) * coeffs%c2(5, 4)
+ ! [3, 3, 3, 3] <-- [2, 3, 3, 3, 3]
+ cprime%c1(4,4) = cprime%c1(4,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c2(6, 4)
+ ! [2, 3, 3, 3] <-- [2, 3, 3, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 4.0_ki/5.0_ki * C(3) * coeffs%c2(6, 4)
+ ! [1, 1, 2, 2] <-- [0, 1, 1, 2, 2]
+ cprime%c2(4,6) = cprime%c2(4,6) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(1, 6)
+ ! [0, 1, 2, 2] <-- [0, 1, 1, 2, 2]
+ cprime%c3(1,2) = cprime%c3(1,2) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(1, 6)
+ ! [0, 1, 1, 2] <-- [0, 1, 1, 2, 2]
+ cprime%c3(1,4) = cprime%c3(1,4) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(1, 6)
+ ! [1, 1, 3, 3] <-- [0, 1, 1, 3, 3]
+ cprime%c2(5,6) = cprime%c2(5,6) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(2, 6)
+ ! [0, 1, 3, 3] <-- [0, 1, 1, 3, 3]
+ cprime%c3(2,2) = cprime%c3(2,2) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(2, 6)
+ ! [0, 1, 1, 3] <-- [0, 1, 1, 3, 3]
+ cprime%c3(2,4) = cprime%c3(2,4) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(2, 6)
+ ! [2, 2, 3, 3] <-- [0, 2, 2, 3, 3]
+ cprime%c2(6,6) = cprime%c2(6,6) + 1.0_ki/5.0_ki * C(0) * coeffs%c3(3, 6)
+ ! [0, 2, 3, 3] <-- [0, 2, 2, 3, 3]
+ cprime%c3(3,2) = cprime%c3(3,2) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(3, 6)
+ ! [0, 2, 2, 3] <-- [0, 2, 2, 3, 3]
+ cprime%c3(3,4) = cprime%c3(3,4) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(3, 6)
+ ! [2, 2, 3, 3] <-- [1, 2, 2, 3, 3]
+ cprime%c2(6,6) = cprime%c2(6,6) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(4, 6)
+ ! [1, 2, 3, 3] <-- [1, 2, 2, 3, 3]
+ cprime%c3(4,2) = cprime%c3(4,2) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(4, 6)
+ ! [1, 2, 2, 3] <-- [1, 2, 2, 3, 3]
+ cprime%c3(4,4) = cprime%c3(4,4) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(4, 6)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 0]
+ cprime%c1(1,4) = C(0) * coeffs%c1(1, 5)
+ ! [1, 1, 1, 1] <-- [1, 1, 1, 1, 1]
+ cprime%c1(2,4) = cprime%c1(2,4) + C(1) * coeffs%c1(2, 5)
+ ! [2, 2, 2, 2] <-- [2, 2, 2, 2, 2]
+ cprime%c1(3,4) = cprime%c1(3,4) + C(2) * coeffs%c1(3, 5)
+ ! [3, 3, 3, 3] <-- [3, 3, 3, 3, 3]
+ cprime%c1(4,4) = cprime%c1(4,4) + C(3) * coeffs%c1(4, 5)
+ ! [0, 1, 1, 1] <-- [0, 0, 1, 1, 1]
+ cprime%c2(1,3) = cprime%c2(1,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c2(1, 8)
+ ! [0, 0, 1, 1] <-- [0, 0, 1, 1, 1]
+ cprime%c2(1,6) = cprime%c2(1,6) + 3.0_ki/5.0_ki * C(1) * coeffs%c2(1, 8)
+ ! [0, 2, 2, 2] <-- [0, 0, 2, 2, 2]
+ cprime%c2(2,3) = cprime%c2(2,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c2(2, 8)
+ ! [0, 0, 2, 2] <-- [0, 0, 2, 2, 2]
+ cprime%c2(2,6) = cprime%c2(2,6) + 3.0_ki/5.0_ki * C(2) * coeffs%c2(2, 8)
+ ! [0, 3, 3, 3] <-- [0, 0, 3, 3, 3]
+ cprime%c2(3,3) = cprime%c2(3,3) + 2.0_ki/5.0_ki * C(0) * coeffs%c2(3, 8)
+ ! [0, 0, 3, 3] <-- [0, 0, 3, 3, 3]
+ cprime%c2(3,6) = cprime%c2(3,6) + 3.0_ki/5.0_ki * C(3) * coeffs%c2(3, 8)
+ ! [1, 2, 2, 2] <-- [1, 1, 2, 2, 2]
+ cprime%c2(4,3) = cprime%c2(4,3) + 2.0_ki/5.0_ki * C(1) * coeffs%c2(4, 8)
+ ! [1, 1, 2, 2] <-- [1, 1, 2, 2, 2]
+ cprime%c2(4,6) = cprime%c2(4,6) + 3.0_ki/5.0_ki * C(2) * coeffs%c2(4, 8)
+ ! [1, 3, 3, 3] <-- [1, 1, 3, 3, 3]
+ cprime%c2(5,3) = cprime%c2(5,3) + 2.0_ki/5.0_ki * C(1) * coeffs%c2(5, 8)
+ ! [1, 1, 3, 3] <-- [1, 1, 3, 3, 3]
+ cprime%c2(5,6) = cprime%c2(5,6) + 3.0_ki/5.0_ki * C(3) * coeffs%c2(5, 8)
+ ! [2, 3, 3, 3] <-- [2, 2, 3, 3, 3]
+ cprime%c2(6,3) = cprime%c2(6,3) + 2.0_ki/5.0_ki * C(2) * coeffs%c2(6, 8)
+ ! [2, 2, 3, 3] <-- [2, 2, 3, 3, 3]
+ cprime%c2(6,6) = cprime%c2(6,6) + 3.0_ki/5.0_ki * C(3) * coeffs%c2(6, 8)
+ ! [0, 1, 2, 2] <-- [0, 0, 1, 2, 2]
+ cprime%c3(1,2) = cprime%c3(1,2) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(1, 12)
+ ! [0, 0, 2, 2] <-- [0, 0, 1, 2, 2]
+ cprime%c2(2,6) = cprime%c2(2,6) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(1, 12)
+ ! [0, 0, 1, 2] <-- [0, 0, 1, 2, 2]
+ cprime%c3(1,7) = cprime%c3(1,7) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(1, 12)
+ ! [0, 1, 3, 3] <-- [0, 0, 1, 3, 3]
+ cprime%c3(2,2) = cprime%c3(2,2) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(2, 12)
+ ! [0, 0, 3, 3] <-- [0, 0, 1, 3, 3]
+ cprime%c2(3,6) = cprime%c2(3,6) + 1.0_ki/5.0_ki * C(1) * coeffs%c3(2, 12)
+ ! [0, 0, 1, 3] <-- [0, 0, 1, 3, 3]
+ cprime%c3(2,7) = cprime%c3(2,7) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(2, 12)
+ ! [0, 2, 3, 3] <-- [0, 0, 2, 3, 3]
+ cprime%c3(3,2) = cprime%c3(3,2) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(3, 12)
+ ! [0, 0, 3, 3] <-- [0, 0, 2, 3, 3]
+ cprime%c2(3,6) = cprime%c2(3,6) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(3, 12)
+ ! [0, 0, 2, 3] <-- [0, 0, 2, 3, 3]
+ cprime%c3(3,7) = cprime%c3(3,7) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(3, 12)
+ ! [1, 2, 3, 3] <-- [1, 1, 2, 3, 3]
+ cprime%c3(4,2) = cprime%c3(4,2) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(4, 12)
+ ! [1, 1, 3, 3] <-- [1, 1, 2, 3, 3]
+ cprime%c2(5,6) = cprime%c2(5,6) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(4, 12)
+ ! [1, 1, 2, 3] <-- [1, 1, 2, 3, 3]
+ cprime%c3(4,7) = cprime%c3(4,7) + 2.0_ki/5.0_ki * C(3) * coeffs%c3(4, 12)
+ ! [0, 0, 0, 1] <-- [0, 0, 0, 0, 1]
+ cprime%c2(1,8) = cprime%c2(1,8) + 4.0_ki/5.0_ki * C(0) * coeffs%c2(1, 13)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 1]
+ cprime%c1(1,4) = cprime%c1(1,4) + 1.0_ki/5.0_ki * C(1) * coeffs%c2(1, 13)
+ ! [0, 0, 0, 2] <-- [0, 0, 0, 0, 2]
+ cprime%c2(2,8) = cprime%c2(2,8) + 4.0_ki/5.0_ki * C(0) * coeffs%c2(2, 13)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 2]
+ cprime%c1(1,4) = cprime%c1(1,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c2(2, 13)
+ ! [0, 0, 0, 3] <-- [0, 0, 0, 0, 3]
+ cprime%c2(3,8) = cprime%c2(3,8) + 4.0_ki/5.0_ki * C(0) * coeffs%c2(3, 13)
+ ! [0, 0, 0, 0] <-- [0, 0, 0, 0, 3]
+ cprime%c1(1,4) = cprime%c1(1,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c2(3, 13)
+ ! [1, 1, 1, 2] <-- [1, 1, 1, 1, 2]
+ cprime%c2(4,8) = cprime%c2(4,8) + 4.0_ki/5.0_ki * C(1) * coeffs%c2(4, 13)
+ ! [1, 1, 1, 1] <-- [1, 1, 1, 1, 2]
+ cprime%c1(2,4) = cprime%c1(2,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c2(4, 13)
+ ! [1, 1, 1, 3] <-- [1, 1, 1, 1, 3]
+ cprime%c2(5,8) = cprime%c2(5,8) + 4.0_ki/5.0_ki * C(1) * coeffs%c2(5, 13)
+ ! [1, 1, 1, 1] <-- [1, 1, 1, 1, 3]
+ cprime%c1(2,4) = cprime%c1(2,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c2(5, 13)
+ ! [2, 2, 2, 3] <-- [2, 2, 2, 2, 3]
+ cprime%c2(6,8) = cprime%c2(6,8) + 4.0_ki/5.0_ki * C(2) * coeffs%c2(6, 13)
+ ! [2, 2, 2, 2] <-- [2, 2, 2, 2, 3]
+ cprime%c1(3,4) = cprime%c1(3,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c2(6, 13)
+ ! [0, 1, 1, 2] <-- [0, 0, 1, 1, 2]
+ cprime%c3(1,4) = cprime%c3(1,4) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(1, 14)
+ ! [0, 0, 1, 2] <-- [0, 0, 1, 1, 2]
+ cprime%c3(1,7) = cprime%c3(1,7) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(1, 14)
+ ! [0, 0, 1, 1] <-- [0, 0, 1, 1, 2]
+ cprime%c2(1,6) = cprime%c2(1,6) + 1.0_ki/5.0_ki * C(2) * coeffs%c3(1, 14)
+ ! [0, 1, 1, 3] <-- [0, 0, 1, 1, 3]
+ cprime%c3(2,4) = cprime%c3(2,4) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(2, 14)
+ ! [0, 0, 1, 3] <-- [0, 0, 1, 1, 3]
+ cprime%c3(2,7) = cprime%c3(2,7) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(2, 14)
+ ! [0, 0, 1, 1] <-- [0, 0, 1, 1, 3]
+ cprime%c2(1,6) = cprime%c2(1,6) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(2, 14)
+ ! [0, 2, 2, 3] <-- [0, 0, 2, 2, 3]
+ cprime%c3(3,4) = cprime%c3(3,4) + 2.0_ki/5.0_ki * C(0) * coeffs%c3(3, 14)
+ ! [0, 0, 2, 3] <-- [0, 0, 2, 2, 3]
+ cprime%c3(3,7) = cprime%c3(3,7) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(3, 14)
+ ! [0, 0, 2, 2] <-- [0, 0, 2, 2, 3]
+ cprime%c2(2,6) = cprime%c2(2,6) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(3, 14)
+ ! [1, 2, 2, 3] <-- [1, 1, 2, 2, 3]
+ cprime%c3(4,4) = cprime%c3(4,4) + 2.0_ki/5.0_ki * C(1) * coeffs%c3(4, 14)
+ ! [1, 1, 2, 3] <-- [1, 1, 2, 2, 3]
+ cprime%c3(4,7) = cprime%c3(4,7) + 2.0_ki/5.0_ki * C(2) * coeffs%c3(4, 14)
+ ! [1, 1, 2, 2] <-- [1, 1, 2, 2, 3]
+ cprime%c2(4,6) = cprime%c2(4,6) + 1.0_ki/5.0_ki * C(3) * coeffs%c3(4, 14)
+ ! [1, 1, 2, 3] <-- [0, 1, 1, 2, 3]
+ cprime%c3(4,7) = cprime%c3(4,7) + 1.0_ki/5.0_ki * C(0) * coeffs%c4(1, 7)
+ ! [0, 1, 2, 3] <-- [0, 1, 1, 2, 3]
+ cprime%c4(1,1) = cprime%c4(1,1) + 2.0_ki/5.0_ki * C(1) * coeffs%c4(1, 7)
+ ! [0, 1, 1, 3] <-- [0, 1, 1, 2, 3]
+ cprime%c3(2,4) = cprime%c3(2,4) + 1.0_ki/5.0_ki * C(2) * coeffs%c4(1, 7)
+ ! [0, 1, 1, 2] <-- [0, 1, 1, 2, 3]
+ cprime%c3(1,4) = cprime%c3(1,4) + 1.0_ki/5.0_ki * C(3) * coeffs%c4(1, 7)
+ ! [0, 1, 1, 2, 3] <-- [0, 0, 1, 1, 2, 3]
+ cprime%c4(1,4) = 1.0_ki/3.0_ki * C(0) * coeffs%c4(1, 14)
+ ! [0, 0, 1, 2, 3] <-- [0, 0, 1, 1, 2, 3]
+ cprime%c4(1,5) = 1.0_ki/3.0_ki * C(1) * coeffs%c4(1, 14)
+ ! [0, 0, 1, 1, 3] <-- [0, 0, 1, 1, 2, 3]
+ cprime%c3(2,9) = 1.0_ki/6.0_ki * C(2) * coeffs%c4(1, 14)
+ ! [0, 0, 1, 1, 2] <-- [0, 0, 1, 1, 2, 3]
+ cprime%c3(1,9) = 1.0_ki/6.0_ki * C(3) * coeffs%c4(1, 14)
+ ! [1, 1, 1, 2, 2] <-- [0, 1, 1, 1, 2, 2]
+ cprime%c2(4,9) = 1.0_ki/6.0_ki * C(0) * coeffs%c3(1, 9)
+ ! [0, 1, 1, 2, 2] <-- [0, 1, 1, 1, 2, 2]
+ cprime%c3(1,5) = 0.5_ki * C(1) * coeffs%c3(1, 9)
+ ! [0, 1, 1, 1, 2] <-- [0, 1, 1, 1, 2, 2]
+ cprime%c3(1,6) = 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 9)
+ ! [1, 1, 1, 3, 3] <-- [0, 1, 1, 1, 3, 3]
+ cprime%c2(5,9) = 1.0_ki/6.0_ki * C(0) * coeffs%c3(2, 9)
+ ! [0, 1, 1, 3, 3] <-- [0, 1, 1, 1, 3, 3]
+ cprime%c3(2,5) = 0.5_ki * C(1) * coeffs%c3(2, 9)
+ ! [0, 1, 1, 1, 3] <-- [0, 1, 1, 1, 3, 3]
+ cprime%c3(2,6) = 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 9)
+ ! [2, 2, 2, 3, 3] <-- [0, 2, 2, 2, 3, 3]
+ cprime%c2(6,9) = 1.0_ki/6.0_ki * C(0) * coeffs%c3(3, 9)
+ ! [0, 2, 2, 3, 3] <-- [0, 2, 2, 2, 3, 3]
+ cprime%c3(3,5) = 0.5_ki * C(2) * coeffs%c3(3, 9)
+ ! [0, 2, 2, 2, 3] <-- [0, 2, 2, 2, 3, 3]
+ cprime%c3(3,6) = 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 9)
+ ! [2, 2, 2, 3, 3] <-- [1, 2, 2, 2, 3, 3]
+ cprime%c2(6,9) = cprime%c2(6,9) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(4, 9)
+ ! [1, 2, 2, 3, 3] <-- [1, 2, 2, 2, 3, 3]
+ cprime%c3(4,5) = 0.5_ki * C(2) * coeffs%c3(4, 9)
+ ! [1, 2, 2, 2, 3] <-- [1, 2, 2, 2, 3, 3]
+ cprime%c3(4,6) = 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 9)
+ ! [1, 2, 2, 2, 3] <-- [0, 1, 2, 2, 2, 3]
+ cprime%c3(4,6) = cprime%c3(4,6) + 1.0_ki/6.0_ki * C(0) * coeffs%c4(1, 6)
+ ! [0, 2, 2, 2, 3] <-- [0, 1, 2, 2, 2, 3]
+ cprime%c3(3,6) = cprime%c3(3,6) + 1.0_ki/6.0_ki * C(1) * coeffs%c4(1, 6)
+ ! [0, 1, 2, 2, 3] <-- [0, 1, 2, 2, 2, 3]
+ cprime%c4(1,3) = 0.5_ki * C(2) * coeffs%c4(1, 6)
+ ! [0, 1, 2, 2, 2] <-- [0, 1, 2, 2, 2, 3]
+ cprime%c3(1,3) = 1.0_ki/6.0_ki * C(3) * coeffs%c4(1, 6)
+ ! [0, 0, 0, 0, 1] <-- [0, 0, 0, 0, 0, 1]
+ cprime%c2(1,10) = 5.0_ki/6.0_ki * C(0) * coeffs%c2(1, 15)
+ ! [0, 0, 0, 0, 0] <-- [0, 0, 0, 0, 0, 1]
+ cprime%c1(1,5) = 1.0_ki/6.0_ki * C(1) * coeffs%c2(1, 15)
+ ! [0, 0, 0, 0, 2] <-- [0, 0, 0, 0, 0, 2]
+ cprime%c2(2,10) = 5.0_ki/6.0_ki * C(0) * coeffs%c2(2, 15)
+ ! [0, 0, 0, 0, 0] <-- [0, 0, 0, 0, 0, 2]
+ cprime%c1(1,5) = cprime%c1(1,5) + 1.0_ki/6.0_ki * C(2) * coeffs%c2(2, 15)
+ ! [0, 0, 0, 0, 3] <-- [0, 0, 0, 0, 0, 3]
+ cprime%c2(3,10) = 5.0_ki/6.0_ki * C(0) * coeffs%c2(3, 15)
+ ! [0, 0, 0, 0, 0] <-- [0, 0, 0, 0, 0, 3]
+ cprime%c1(1,5) = cprime%c1(1,5) + 1.0_ki/6.0_ki * C(3) * coeffs%c2(3, 15)
+ ! [1, 1, 1, 1, 2] <-- [1, 1, 1, 1, 1, 2]
+ cprime%c2(4,10) = 5.0_ki/6.0_ki * C(1) * coeffs%c2(4, 15)
+ ! [1, 1, 1, 1, 1] <-- [1, 1, 1, 1, 1, 2]
+ cprime%c1(2,5) = 1.0_ki/6.0_ki * C(2) * coeffs%c2(4, 15)
+ ! [1, 1, 1, 1, 3] <-- [1, 1, 1, 1, 1, 3]
+ cprime%c2(5,10) = 5.0_ki/6.0_ki * C(1) * coeffs%c2(5, 15)
+ ! [1, 1, 1, 1, 1] <-- [1, 1, 1, 1, 1, 3]
+ cprime%c1(2,5) = cprime%c1(2,5) + 1.0_ki/6.0_ki * C(3) * coeffs%c2(5, 15)
+ ! [2, 2, 2, 2, 3] <-- [2, 2, 2, 2, 2, 3]
+ cprime%c2(6,10) = 5.0_ki/6.0_ki * C(2) * coeffs%c2(6, 15)
+ ! [2, 2, 2, 2, 2] <-- [2, 2, 2, 2, 2, 3]
+ cprime%c1(3,5) = 1.0_ki/6.0_ki * C(3) * coeffs%c2(6, 15)
+ ! [0, 1, 1, 1, 2] <-- [0, 0, 1, 1, 1, 2]
+ cprime%c3(1,6) = cprime%c3(1,6) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 16)
+ ! [0, 0, 1, 1, 2] <-- [0, 0, 1, 1, 1, 2]
+ cprime%c3(1,9) = cprime%c3(1,9) + 0.5_ki * C(1) * coeffs%c3(1, 16)
+ ! [0, 0, 1, 1, 1] <-- [0, 0, 1, 1, 1, 2]
+ cprime%c2(1,7) = 1.0_ki/6.0_ki * C(2) * coeffs%c3(1, 16)
+ ! [0, 1, 1, 1, 3] <-- [0, 0, 1, 1, 1, 3]
+ cprime%c3(2,6) = cprime%c3(2,6) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 16)
+ ! [0, 0, 1, 1, 3] <-- [0, 0, 1, 1, 1, 3]
+ cprime%c3(2,9) = cprime%c3(2,9) + 0.5_ki * C(1) * coeffs%c3(2, 16)
+ ! [0, 0, 1, 1, 1] <-- [0, 0, 1, 1, 1, 3]
+ cprime%c2(1,7) = cprime%c2(1,7) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(2, 16)
+ ! [0, 2, 2, 2, 3] <-- [0, 0, 2, 2, 2, 3]
+ cprime%c3(3,6) = cprime%c3(3,6) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 16)
+ ! [0, 0, 2, 2, 3] <-- [0, 0, 2, 2, 2, 3]
+ cprime%c3(3,9) = 0.5_ki * C(2) * coeffs%c3(3, 16)
+ ! [0, 0, 2, 2, 2] <-- [0, 0, 2, 2, 2, 3]
+ cprime%c2(2,7) = 1.0_ki/6.0_ki * C(3) * coeffs%c3(3, 16)
+ ! [1, 2, 2, 2, 3] <-- [1, 1, 2, 2, 2, 3]
+ cprime%c3(4,6) = cprime%c3(4,6) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 16)
+ ! [1, 1, 2, 2, 3] <-- [1, 1, 2, 2, 2, 3]
+ cprime%c3(4,9) = 0.5_ki * C(2) * coeffs%c3(4, 16)
+ ! [1, 1, 2, 2, 2] <-- [1, 1, 2, 2, 2, 3]
+ cprime%c2(4,7) = 1.0_ki/6.0_ki * C(3) * coeffs%c3(4, 16)
+ ! [1, 2, 2, 3, 3] <-- [0, 1, 2, 2, 3, 3]
+ cprime%c3(4,5) = cprime%c3(4,5) + 1.0_ki/6.0_ki * C(0) * coeffs%c4(1, 5)
+ ! [0, 2, 2, 3, 3] <-- [0, 1, 2, 2, 3, 3]
+ cprime%c3(3,5) = cprime%c3(3,5) + 1.0_ki/6.0_ki * C(1) * coeffs%c4(1, 5)
+ ! [0, 1, 2, 3, 3] <-- [0, 1, 2, 2, 3, 3]
+ cprime%c4(1,2) = 1.0_ki/3.0_ki * C(2) * coeffs%c4(1, 5)
+ ! [0, 1, 2, 2, 3] <-- [0, 1, 2, 2, 3, 3]
+ cprime%c4(1,3) = cprime%c4(1,3) + 1.0_ki/3.0_ki * C(3) * coeffs%c4(1, 5)
+ ! [0, 1, 2, 2, 3] <-- [0, 0, 1, 2, 2, 3]
+ cprime%c4(1,3) = cprime%c4(1,3) + 1.0_ki/3.0_ki * C(0) * coeffs%c4(1, 13)
+ ! [0, 0, 2, 2, 3] <-- [0, 0, 1, 2, 2, 3]
+ cprime%c3(3,9) = cprime%c3(3,9) + 1.0_ki/6.0_ki * C(1) * coeffs%c4(1, 13)
+ ! [0, 0, 1, 2, 3] <-- [0, 0, 1, 2, 2, 3]
+ cprime%c4(1,5) = cprime%c4(1,5) + 1.0_ki/3.0_ki * C(2) * coeffs%c4(1, 13)
+ ! [0, 0, 1, 2, 2] <-- [0, 0, 1, 2, 2, 3]
+ cprime%c3(1,8) = 1.0_ki/6.0_ki * C(3) * coeffs%c4(1, 13)
+ ! [0, 0, 1, 1, 1] <-- [0, 0, 0, 1, 1, 1]
+ cprime%c2(1,7) = cprime%c2(1,7) + 0.5_ki * C(0) * coeffs%c2(1, 12)
+ ! [0, 0, 0, 1, 1] <-- [0, 0, 0, 1, 1, 1]
+ cprime%c2(1,9) = 0.5_ki * C(1) * coeffs%c2(1, 12)
+ ! [0, 0, 2, 2, 2] <-- [0, 0, 0, 2, 2, 2]
+ cprime%c2(2,7) = cprime%c2(2,7) + 0.5_ki * C(0) * coeffs%c2(2, 12)
+ ! [0, 0, 0, 2, 2] <-- [0, 0, 0, 2, 2, 2]
+ cprime%c2(2,9) = 0.5_ki * C(2) * coeffs%c2(2, 12)
+ ! [0, 0, 3, 3, 3] <-- [0, 0, 0, 3, 3, 3]
+ cprime%c2(3,7) = 0.5_ki * C(0) * coeffs%c2(3, 12)
+ ! [0, 0, 0, 3, 3] <-- [0, 0, 0, 3, 3, 3]
+ cprime%c2(3,9) = 0.5_ki * C(3) * coeffs%c2(3, 12)
+ ! [1, 1, 2, 2, 2] <-- [1, 1, 1, 2, 2, 2]
+ cprime%c2(4,7) = cprime%c2(4,7) + 0.5_ki * C(1) * coeffs%c2(4, 12)
+ ! [1, 1, 1, 2, 2] <-- [1, 1, 1, 2, 2, 2]
+ cprime%c2(4,9) = cprime%c2(4,9) + 0.5_ki * C(2) * coeffs%c2(4, 12)
+ ! [1, 1, 3, 3, 3] <-- [1, 1, 1, 3, 3, 3]
+ cprime%c2(5,7) = 0.5_ki * C(1) * coeffs%c2(5, 12)
+ ! [1, 1, 1, 3, 3] <-- [1, 1, 1, 3, 3, 3]
+ cprime%c2(5,9) = cprime%c2(5,9) + 0.5_ki * C(3) * coeffs%c2(5, 12)
+ ! [2, 2, 3, 3, 3] <-- [2, 2, 2, 3, 3, 3]
+ cprime%c2(6,7) = 0.5_ki * C(2) * coeffs%c2(6, 12)
+ ! [2, 2, 2, 3, 3] <-- [2, 2, 2, 3, 3, 3]
+ cprime%c2(6,9) = cprime%c2(6,9) + 0.5_ki * C(3) * coeffs%c2(6, 12)
+ ! [1, 1, 1, 1, 2] <-- [0, 1, 1, 1, 1, 2]
+ cprime%c2(4,10) = cprime%c2(4,10) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(1, 10)
+ ! [0, 1, 1, 1, 2] <-- [0, 1, 1, 1, 1, 2]
+ cprime%c3(1,6) = cprime%c3(1,6) + 2.0_ki/3.0_ki * C(1) * coeffs%c3(1, 10)
+ ! [0, 1, 1, 1, 1] <-- [0, 1, 1, 1, 1, 2]
+ cprime%c2(1,4) = 1.0_ki/6.0_ki * C(2) * coeffs%c3(1, 10)
+ ! [1, 1, 1, 1, 3] <-- [0, 1, 1, 1, 1, 3]
+ cprime%c2(5,10) = cprime%c2(5,10) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(2, 10)
+ ! [0, 1, 1, 1, 3] <-- [0, 1, 1, 1, 1, 3]
+ cprime%c3(2,6) = cprime%c3(2,6) + 2.0_ki/3.0_ki * C(1) * coeffs%c3(2, 10)
+ ! [0, 1, 1, 1, 1] <-- [0, 1, 1, 1, 1, 3]
+ cprime%c2(1,4) = cprime%c2(1,4) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(2, 10)
+ ! [2, 2, 2, 2, 3] <-- [0, 2, 2, 2, 2, 3]
+ cprime%c2(6,10) = cprime%c2(6,10) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(3, 10)
+ ! [0, 2, 2, 2, 3] <-- [0, 2, 2, 2, 2, 3]
+ cprime%c3(3,6) = cprime%c3(3,6) + 2.0_ki/3.0_ki * C(2) * coeffs%c3(3, 10)
+ ! [0, 2, 2, 2, 2] <-- [0, 2, 2, 2, 2, 3]
+ cprime%c2(2,4) = 1.0_ki/6.0_ki * C(3) * coeffs%c3(3, 10)
+ ! [2, 2, 2, 2, 3] <-- [1, 2, 2, 2, 2, 3]
+ cprime%c2(6,10) = cprime%c2(6,10) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(4, 10)
+ ! [1, 2, 2, 2, 3] <-- [1, 2, 2, 2, 2, 3]
+ cprime%c3(4,6) = cprime%c3(4,6) + 2.0_ki/3.0_ki * C(2) * coeffs%c3(4, 10)
+ ! [1, 2, 2, 2, 2] <-- [1, 2, 2, 2, 2, 3]
+ cprime%c2(4,4) = 1.0_ki/6.0_ki * C(3) * coeffs%c3(4, 10)
+ ! [1, 1, 2, 2, 3] <-- [0, 1, 1, 2, 2, 3]
+ cprime%c3(4,9) = cprime%c3(4,9) + 1.0_ki/6.0_ki * C(0) * coeffs%c4(1, 9)
+ ! [0, 1, 2, 2, 3] <-- [0, 1, 1, 2, 2, 3]
+ cprime%c4(1,3) = cprime%c4(1,3) + 1.0_ki/3.0_ki * C(1) * coeffs%c4(1, 9)
+ ! [0, 1, 1, 2, 3] <-- [0, 1, 1, 2, 2, 3]
+ cprime%c4(1,4) = cprime%c4(1,4) + 1.0_ki/3.0_ki * C(2) * coeffs%c4(1, 9)
+ ! [0, 1, 1, 2, 2] <-- [0, 1, 1, 2, 2, 3]
+ cprime%c3(1,5) = cprime%c3(1,5) + 1.0_ki/6.0_ki * C(3) * coeffs%c4(1, 9)
+ ! [0, 0, 1, 2, 3] <-- [0, 0, 0, 1, 2, 3]
+ cprime%c4(1,5) = cprime%c4(1,5) + 0.5_ki * C(0) * coeffs%c4(1, 15)
+ ! [0, 0, 0, 2, 3] <-- [0, 0, 0, 1, 2, 3]
+ cprime%c3(3,10) = 1.0_ki/6.0_ki * C(1) * coeffs%c4(1, 15)
+ ! [0, 0, 0, 1, 3] <-- [0, 0, 0, 1, 2, 3]
+ cprime%c3(2,10) = 1.0_ki/6.0_ki * C(2) * coeffs%c4(1, 15)
+ ! [0, 0, 0, 1, 2] <-- [0, 0, 0, 1, 2, 3]
+ cprime%c3(1,10) = 1.0_ki/6.0_ki * C(3) * coeffs%c4(1, 15)
+ ! [1, 1, 1, 1, 1] <-- [0, 1, 1, 1, 1, 1]
+ cprime%c1(2,5) = cprime%c1(2,5) + 1.0_ki/6.0_ki * C(0) * coeffs%c2(1, 5)
+ ! [0, 1, 1, 1, 1] <-- [0, 1, 1, 1, 1, 1]
+ cprime%c2(1,4) = cprime%c2(1,4) + 5.0_ki/6.0_ki * C(1) * coeffs%c2(1, 5)
+ ! [2, 2, 2, 2, 2] <-- [0, 2, 2, 2, 2, 2]
+ cprime%c1(3,5) = cprime%c1(3,5) + 1.0_ki/6.0_ki * C(0) * coeffs%c2(2, 5)
+ ! [0, 2, 2, 2, 2] <-- [0, 2, 2, 2, 2, 2]
+ cprime%c2(2,4) = cprime%c2(2,4) + 5.0_ki/6.0_ki * C(2) * coeffs%c2(2, 5)
+ ! [3, 3, 3, 3, 3] <-- [0, 3, 3, 3, 3, 3]
+ cprime%c1(4,5) = 1.0_ki/6.0_ki * C(0) * coeffs%c2(3, 5)
+ ! [0, 3, 3, 3, 3] <-- [0, 3, 3, 3, 3, 3]
+ cprime%c2(3,4) = 5.0_ki/6.0_ki * C(3) * coeffs%c2(3, 5)
+ ! [2, 2, 2, 2, 2] <-- [1, 2, 2, 2, 2, 2]
+ cprime%c1(3,5) = cprime%c1(3,5) + 1.0_ki/6.0_ki * C(1) * coeffs%c2(4, 5)
+ ! [1, 2, 2, 2, 2] <-- [1, 2, 2, 2, 2, 2]
+ cprime%c2(4,4) = cprime%c2(4,4) + 5.0_ki/6.0_ki * C(2) * coeffs%c2(4, 5)
+ ! [3, 3, 3, 3, 3] <-- [1, 3, 3, 3, 3, 3]
+ cprime%c1(4,5) = cprime%c1(4,5) + 1.0_ki/6.0_ki * C(1) * coeffs%c2(5, 5)
+ ! [1, 3, 3, 3, 3] <-- [1, 3, 3, 3, 3, 3]
+ cprime%c2(5,4) = 5.0_ki/6.0_ki * C(3) * coeffs%c2(5, 5)
+ ! [3, 3, 3, 3, 3] <-- [2, 3, 3, 3, 3, 3]
+ cprime%c1(4,5) = cprime%c1(4,5) + 1.0_ki/6.0_ki * C(2) * coeffs%c2(6, 5)
+ ! [2, 3, 3, 3, 3] <-- [2, 3, 3, 3, 3, 3]
+ cprime%c2(6,4) = 5.0_ki/6.0_ki * C(3) * coeffs%c2(6, 5)
+ ! [0, 1, 2, 3, 3] <-- [0, 0, 1, 2, 3, 3]
+ cprime%c4(1,2) = cprime%c4(1,2) + 1.0_ki/3.0_ki * C(0) * coeffs%c4(1, 12)
+ ! [0, 0, 2, 3, 3] <-- [0, 0, 1, 2, 3, 3]
+ cprime%c3(3,8) = 1.0_ki/6.0_ki * C(1) * coeffs%c4(1, 12)
+ ! [0, 0, 1, 3, 3] <-- [0, 0, 1, 2, 3, 3]
+ cprime%c3(2,8) = 1.0_ki/6.0_ki * C(2) * coeffs%c4(1, 12)
+ ! [0, 0, 1, 2, 3] <-- [0, 0, 1, 2, 3, 3]
+ cprime%c4(1,5) = cprime%c4(1,5) + 1.0_ki/3.0_ki * C(3) * coeffs%c4(1, 12)
+ ! [0, 0, 1, 2, 2] <-- [0, 0, 0, 1, 2, 2]
+ cprime%c3(1,8) = cprime%c3(1,8) + 0.5_ki * C(0) * coeffs%c3(1, 18)
+ ! [0, 0, 0, 2, 2] <-- [0, 0, 0, 1, 2, 2]
+ cprime%c2(2,9) = cprime%c2(2,9) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(1, 18)
+ ! [0, 0, 0, 1, 2] <-- [0, 0, 0, 1, 2, 2]
+ cprime%c3(1,10) = cprime%c3(1,10) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 18)
+ ! [0, 0, 1, 3, 3] <-- [0, 0, 0, 1, 3, 3]
+ cprime%c3(2,8) = cprime%c3(2,8) + 0.5_ki * C(0) * coeffs%c3(2, 18)
+ ! [0, 0, 0, 3, 3] <-- [0, 0, 0, 1, 3, 3]
+ cprime%c2(3,9) = cprime%c2(3,9) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(2, 18)
+ ! [0, 0, 0, 1, 3] <-- [0, 0, 0, 1, 3, 3]
+ cprime%c3(2,10) = cprime%c3(2,10) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 18)
+ ! [0, 0, 2, 3, 3] <-- [0, 0, 0, 2, 3, 3]
+ cprime%c3(3,8) = cprime%c3(3,8) + 0.5_ki * C(0) * coeffs%c3(3, 18)
+ ! [0, 0, 0, 3, 3] <-- [0, 0, 0, 2, 3, 3]
+ cprime%c2(3,9) = cprime%c2(3,9) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(3, 18)
+ ! [0, 0, 0, 2, 3] <-- [0, 0, 0, 2, 3, 3]
+ cprime%c3(3,10) = cprime%c3(3,10) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 18)
+ ! [1, 1, 2, 3, 3] <-- [1, 1, 1, 2, 3, 3]
+ cprime%c3(4,8) = 0.5_ki * C(1) * coeffs%c3(4, 18)
+ ! [1, 1, 1, 3, 3] <-- [1, 1, 1, 2, 3, 3]
+ cprime%c2(5,9) = cprime%c2(5,9) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(4, 18)
+ ! [1, 1, 1, 2, 3] <-- [1, 1, 1, 2, 3, 3]
+ cprime%c3(4,10) = 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 18)
+ ! [1, 1, 2, 3, 3] <-- [0, 1, 1, 2, 3, 3]
+ cprime%c3(4,8) = cprime%c3(4,8) + 1.0_ki/6.0_ki * C(0) * coeffs%c4(1, 8)
+ ! [0, 1, 2, 3, 3] <-- [0, 1, 1, 2, 3, 3]
+ cprime%c4(1,2) = cprime%c4(1,2) + 1.0_ki/3.0_ki * C(1) * coeffs%c4(1, 8)
+ ! [0, 1, 1, 3, 3] <-- [0, 1, 1, 2, 3, 3]
+ cprime%c3(2,5) = cprime%c3(2,5) + 1.0_ki/6.0_ki * C(2) * coeffs%c4(1, 8)
+ ! [0, 1, 1, 2, 3] <-- [0, 1, 1, 2, 3, 3]
+ cprime%c4(1,4) = cprime%c4(1,4) + 1.0_ki/3.0_ki * C(3) * coeffs%c4(1, 8)
+ ! [0, 0, 1, 1, 2] <-- [0, 0, 0, 1, 1, 2]
+ cprime%c3(1,9) = cprime%c3(1,9) + 0.5_ki * C(0) * coeffs%c3(1, 19)
+ ! [0, 0, 0, 1, 2] <-- [0, 0, 0, 1, 1, 2]
+ cprime%c3(1,10) = cprime%c3(1,10) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 19)
+ ! [0, 0, 0, 1, 1] <-- [0, 0, 0, 1, 1, 2]
+ cprime%c2(1,9) = cprime%c2(1,9) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(1, 19)
+ ! [0, 0, 1, 1, 3] <-- [0, 0, 0, 1, 1, 3]
+ cprime%c3(2,9) = cprime%c3(2,9) + 0.5_ki * C(0) * coeffs%c3(2, 19)
+ ! [0, 0, 0, 1, 3] <-- [0, 0, 0, 1, 1, 3]
+ cprime%c3(2,10) = cprime%c3(2,10) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 19)
+ ! [0, 0, 0, 1, 1] <-- [0, 0, 0, 1, 1, 3]
+ cprime%c2(1,9) = cprime%c2(1,9) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(2, 19)
+ ! [0, 0, 2, 2, 3] <-- [0, 0, 0, 2, 2, 3]
+ cprime%c3(3,9) = cprime%c3(3,9) + 0.5_ki * C(0) * coeffs%c3(3, 19)
+ ! [0, 0, 0, 2, 3] <-- [0, 0, 0, 2, 2, 3]
+ cprime%c3(3,10) = cprime%c3(3,10) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 19)
+ ! [0, 0, 0, 2, 2] <-- [0, 0, 0, 2, 2, 3]
+ cprime%c2(2,9) = cprime%c2(2,9) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(3, 19)
+ ! [1, 1, 2, 2, 3] <-- [1, 1, 1, 2, 2, 3]
+ cprime%c3(4,9) = cprime%c3(4,9) + 0.5_ki * C(1) * coeffs%c3(4, 19)
+ ! [1, 1, 1, 2, 3] <-- [1, 1, 1, 2, 2, 3]
+ cprime%c3(4,10) = cprime%c3(4,10) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 19)
+ ! [1, 1, 1, 2, 2] <-- [1, 1, 1, 2, 2, 3]
+ cprime%c2(4,9) = cprime%c2(4,9) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(4, 19)
+ ! [1, 1, 2, 2, 2] <-- [0, 1, 1, 2, 2, 2]
+ cprime%c2(4,7) = cprime%c2(4,7) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(1, 7)
+ ! [0, 1, 2, 2, 2] <-- [0, 1, 1, 2, 2, 2]
+ cprime%c3(1,3) = cprime%c3(1,3) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 7)
+ ! [0, 1, 1, 2, 2] <-- [0, 1, 1, 2, 2, 2]
+ cprime%c3(1,5) = cprime%c3(1,5) + 0.5_ki * C(2) * coeffs%c3(1, 7)
+ ! [1, 1, 3, 3, 3] <-- [0, 1, 1, 3, 3, 3]
+ cprime%c2(5,7) = cprime%c2(5,7) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(2, 7)
+ ! [0, 1, 3, 3, 3] <-- [0, 1, 1, 3, 3, 3]
+ cprime%c3(2,3) = 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 7)
+ ! [0, 1, 1, 3, 3] <-- [0, 1, 1, 3, 3, 3]
+ cprime%c3(2,5) = cprime%c3(2,5) + 0.5_ki * C(3) * coeffs%c3(2, 7)
+ ! [2, 2, 3, 3, 3] <-- [0, 2, 2, 3, 3, 3]
+ cprime%c2(6,7) = cprime%c2(6,7) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(3, 7)
+ ! [0, 2, 3, 3, 3] <-- [0, 2, 2, 3, 3, 3]
+ cprime%c3(3,3) = 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 7)
+ ! [0, 2, 2, 3, 3] <-- [0, 2, 2, 3, 3, 3]
+ cprime%c3(3,5) = cprime%c3(3,5) + 0.5_ki * C(3) * coeffs%c3(3, 7)
+ ! [2, 2, 3, 3, 3] <-- [1, 2, 2, 3, 3, 3]
+ cprime%c2(6,7) = cprime%c2(6,7) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(4, 7)
+ ! [1, 2, 3, 3, 3] <-- [1, 2, 2, 3, 3, 3]
+ cprime%c3(4,3) = 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 7)
+ ! [1, 2, 2, 3, 3] <-- [1, 2, 2, 3, 3, 3]
+ cprime%c3(4,5) = cprime%c3(4,5) + 0.5_ki * C(3) * coeffs%c3(4, 7)
+ ! [0, 0, 0, 1, 2] <-- [0, 0, 0, 0, 1, 2]
+ cprime%c3(1,10) = cprime%c3(1,10) + 2.0_ki/3.0_ki * C(0) * coeffs%c3(1, 20)
+ ! [0, 0, 0, 0, 2] <-- [0, 0, 0, 0, 1, 2]
+ cprime%c2(2,10) = cprime%c2(2,10) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(1, 20)
+ ! [0, 0, 0, 0, 1] <-- [0, 0, 0, 0, 1, 2]
+ cprime%c2(1,10) = cprime%c2(1,10) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(1, 20)
+ ! [0, 0, 0, 1, 3] <-- [0, 0, 0, 0, 1, 3]
+ cprime%c3(2,10) = cprime%c3(2,10) + 2.0_ki/3.0_ki * C(0) * coeffs%c3(2, 20)
+ ! [0, 0, 0, 0, 3] <-- [0, 0, 0, 0, 1, 3]
+ cprime%c2(3,10) = cprime%c2(3,10) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(2, 20)
+ ! [0, 0, 0, 0, 1] <-- [0, 0, 0, 0, 1, 3]
+ cprime%c2(1,10) = cprime%c2(1,10) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(2, 20)
+ ! [0, 0, 0, 2, 3] <-- [0, 0, 0, 0, 2, 3]
+ cprime%c3(3,10) = cprime%c3(3,10) + 2.0_ki/3.0_ki * C(0) * coeffs%c3(3, 20)
+ ! [0, 0, 0, 0, 3] <-- [0, 0, 0, 0, 2, 3]
+ cprime%c2(3,10) = cprime%c2(3,10) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(3, 20)
+ ! [0, 0, 0, 0, 2] <-- [0, 0, 0, 0, 2, 3]
+ cprime%c2(2,10) = cprime%c2(2,10) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(3, 20)
+ ! [1, 1, 1, 2, 3] <-- [1, 1, 1, 1, 2, 3]
+ cprime%c3(4,10) = cprime%c3(4,10) + 2.0_ki/3.0_ki * C(1) * coeffs%c3(4, 20)
+ ! [1, 1, 1, 1, 3] <-- [1, 1, 1, 1, 2, 3]
+ cprime%c2(5,10) = cprime%c2(5,10) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(4, 20)
+ ! [1, 1, 1, 1, 2] <-- [1, 1, 1, 1, 2, 3]
+ cprime%c2(4,10) = cprime%c2(4,10) + 1.0_ki/6.0_ki * C(3) * coeffs%c3(4, 20)
+ ! [1, 1, 1, 2, 3] <-- [0, 1, 1, 1, 2, 3]
+ cprime%c3(4,10) = cprime%c3(4,10) + 1.0_ki/6.0_ki * C(0) * coeffs%c4(1, 10)
+ ! [0, 1, 1, 2, 3] <-- [0, 1, 1, 1, 2, 3]
+ cprime%c4(1,4) = cprime%c4(1,4) + 0.5_ki * C(1) * coeffs%c4(1, 10)
+ ! [0, 1, 1, 1, 3] <-- [0, 1, 1, 1, 2, 3]
+ cprime%c3(2,6) = cprime%c3(2,6) + 1.0_ki/6.0_ki * C(2) * coeffs%c4(1, 10)
+ ! [0, 1, 1, 1, 2] <-- [0, 1, 1, 1, 2, 3]
+ cprime%c3(1,6) = cprime%c3(1,6) + 1.0_ki/6.0_ki * C(3) * coeffs%c4(1, 10)
+ ! [0, 0, 0, 1, 1] <-- [0, 0, 0, 0, 1, 1]
+ cprime%c2(1,9) = cprime%c2(1,9) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(1, 14)
+ ! [0, 0, 0, 0, 1] <-- [0, 0, 0, 0, 1, 1]
+ cprime%c2(1,10) = cprime%c2(1,10) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(1, 14)
+ ! [0, 0, 0, 2, 2] <-- [0, 0, 0, 0, 2, 2]
+ cprime%c2(2,9) = cprime%c2(2,9) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(2, 14)
+ ! [0, 0, 0, 0, 2] <-- [0, 0, 0, 0, 2, 2]
+ cprime%c2(2,10) = cprime%c2(2,10) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(2, 14)
+ ! [0, 0, 0, 3, 3] <-- [0, 0, 0, 0, 3, 3]
+ cprime%c2(3,9) = cprime%c2(3,9) + 2.0_ki/3.0_ki * C(0) * coeffs%c2(3, 14)
+ ! [0, 0, 0, 0, 3] <-- [0, 0, 0, 0, 3, 3]
+ cprime%c2(3,10) = cprime%c2(3,10) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(3, 14)
+ ! [1, 1, 1, 2, 2] <-- [1, 1, 1, 1, 2, 2]
+ cprime%c2(4,9) = cprime%c2(4,9) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(4, 14)
+ ! [1, 1, 1, 1, 2] <-- [1, 1, 1, 1, 2, 2]
+ cprime%c2(4,10) = cprime%c2(4,10) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(4, 14)
+ ! [1, 1, 1, 3, 3] <-- [1, 1, 1, 1, 3, 3]
+ cprime%c2(5,9) = cprime%c2(5,9) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(5, 14)
+ ! [1, 1, 1, 1, 3] <-- [1, 1, 1, 1, 3, 3]
+ cprime%c2(5,10) = cprime%c2(5,10) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(5, 14)
+ ! [2, 2, 2, 3, 3] <-- [2, 2, 2, 2, 3, 3]
+ cprime%c2(6,9) = cprime%c2(6,9) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(6, 14)
+ ! [2, 2, 2, 2, 3] <-- [2, 2, 2, 2, 3, 3]
+ cprime%c2(6,10) = cprime%c2(6,10) + 1.0_ki/3.0_ki * C(3) * coeffs%c2(6, 14)
+ ! [0, 1, 2, 2, 2] <-- [0, 0, 1, 2, 2, 2]
+ cprime%c3(1,3) = cprime%c3(1,3) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 13)
+ ! [0, 0, 2, 2, 2] <-- [0, 0, 1, 2, 2, 2]
+ cprime%c2(2,7) = cprime%c2(2,7) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(1, 13)
+ ! [0, 0, 1, 2, 2] <-- [0, 0, 1, 2, 2, 2]
+ cprime%c3(1,8) = cprime%c3(1,8) + 0.5_ki * C(2) * coeffs%c3(1, 13)
+ ! [0, 1, 3, 3, 3] <-- [0, 0, 1, 3, 3, 3]
+ cprime%c3(2,3) = cprime%c3(2,3) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 13)
+ ! [0, 0, 3, 3, 3] <-- [0, 0, 1, 3, 3, 3]
+ cprime%c2(3,7) = cprime%c2(3,7) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(2, 13)
+ ! [0, 0, 1, 3, 3] <-- [0, 0, 1, 3, 3, 3]
+ cprime%c3(2,8) = cprime%c3(2,8) + 0.5_ki * C(3) * coeffs%c3(2, 13)
+ ! [0, 2, 3, 3, 3] <-- [0, 0, 2, 3, 3, 3]
+ cprime%c3(3,3) = cprime%c3(3,3) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 13)
+ ! [0, 0, 3, 3, 3] <-- [0, 0, 2, 3, 3, 3]
+ cprime%c2(3,7) = cprime%c2(3,7) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(3, 13)
+ ! [0, 0, 2, 3, 3] <-- [0, 0, 2, 3, 3, 3]
+ cprime%c3(3,8) = cprime%c3(3,8) + 0.5_ki * C(3) * coeffs%c3(3, 13)
+ ! [1, 2, 3, 3, 3] <-- [1, 1, 2, 3, 3, 3]
+ cprime%c3(4,3) = cprime%c3(4,3) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 13)
+ ! [1, 1, 3, 3, 3] <-- [1, 1, 2, 3, 3, 3]
+ cprime%c2(5,7) = cprime%c2(5,7) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(4, 13)
+ ! [1, 1, 2, 3, 3] <-- [1, 1, 2, 3, 3, 3]
+ cprime%c3(4,8) = cprime%c3(4,8) + 0.5_ki * C(3) * coeffs%c3(4, 13)
+ ! [1, 2, 3, 3, 3] <-- [0, 1, 2, 3, 3, 3]
+ cprime%c3(4,3) = cprime%c3(4,3) + 1.0_ki/6.0_ki * C(0) * coeffs%c4(1, 3)
+ ! [0, 2, 3, 3, 3] <-- [0, 1, 2, 3, 3, 3]
+ cprime%c3(3,3) = cprime%c3(3,3) + 1.0_ki/6.0_ki * C(1) * coeffs%c4(1, 3)
+ ! [0, 1, 3, 3, 3] <-- [0, 1, 2, 3, 3, 3]
+ cprime%c3(2,3) = cprime%c3(2,3) + 1.0_ki/6.0_ki * C(2) * coeffs%c4(1, 3)
+ ! [0, 1, 2, 3, 3] <-- [0, 1, 2, 3, 3, 3]
+ cprime%c4(1,2) = cprime%c4(1,2) + 0.5_ki * C(3) * coeffs%c4(1, 3)
+ ! [0, 1, 1, 2, 2] <-- [0, 0, 1, 1, 2, 2]
+ cprime%c3(1,5) = cprime%c3(1,5) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(1, 15)
+ ! [0, 0, 1, 2, 2] <-- [0, 0, 1, 1, 2, 2]
+ cprime%c3(1,8) = cprime%c3(1,8) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(1, 15)
+ ! [0, 0, 1, 1, 2] <-- [0, 0, 1, 1, 2, 2]
+ cprime%c3(1,9) = cprime%c3(1,9) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(1, 15)
+ ! [0, 1, 1, 3, 3] <-- [0, 0, 1, 1, 3, 3]
+ cprime%c3(2,5) = cprime%c3(2,5) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(2, 15)
+ ! [0, 0, 1, 3, 3] <-- [0, 0, 1, 1, 3, 3]
+ cprime%c3(2,8) = cprime%c3(2,8) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(2, 15)
+ ! [0, 0, 1, 1, 3] <-- [0, 0, 1, 1, 3, 3]
+ cprime%c3(2,9) = cprime%c3(2,9) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(2, 15)
+ ! [0, 2, 2, 3, 3] <-- [0, 0, 2, 2, 3, 3]
+ cprime%c3(3,5) = cprime%c3(3,5) + 1.0_ki/3.0_ki * C(0) * coeffs%c3(3, 15)
+ ! [0, 0, 2, 3, 3] <-- [0, 0, 2, 2, 3, 3]
+ cprime%c3(3,8) = cprime%c3(3,8) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(3, 15)
+ ! [0, 0, 2, 2, 3] <-- [0, 0, 2, 2, 3, 3]
+ cprime%c3(3,9) = cprime%c3(3,9) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(3, 15)
+ ! [1, 2, 2, 3, 3] <-- [1, 1, 2, 2, 3, 3]
+ cprime%c3(4,5) = cprime%c3(4,5) + 1.0_ki/3.0_ki * C(1) * coeffs%c3(4, 15)
+ ! [1, 1, 2, 3, 3] <-- [1, 1, 2, 2, 3, 3]
+ cprime%c3(4,8) = cprime%c3(4,8) + 1.0_ki/3.0_ki * C(2) * coeffs%c3(4, 15)
+ ! [1, 1, 2, 2, 3] <-- [1, 1, 2, 2, 3, 3]
+ cprime%c3(4,9) = cprime%c3(4,9) + 1.0_ki/3.0_ki * C(3) * coeffs%c3(4, 15)
+ ! [0, 1, 1, 1, 1] <-- [0, 0, 1, 1, 1, 1]
+ cprime%c2(1,4) = cprime%c2(1,4) + 1.0_ki/3.0_ki * C(0) * coeffs%c2(1, 9)
+ ! [0, 0, 1, 1, 1] <-- [0, 0, 1, 1, 1, 1]
+ cprime%c2(1,7) = cprime%c2(1,7) + 2.0_ki/3.0_ki * C(1) * coeffs%c2(1, 9)
+ ! [0, 2, 2, 2, 2] <-- [0, 0, 2, 2, 2, 2]
+ cprime%c2(2,4) = cprime%c2(2,4) + 1.0_ki/3.0_ki * C(0) * coeffs%c2(2, 9)
+ ! [0, 0, 2, 2, 2] <-- [0, 0, 2, 2, 2, 2]
+ cprime%c2(2,7) = cprime%c2(2,7) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(2, 9)
+ ! [0, 3, 3, 3, 3] <-- [0, 0, 3, 3, 3, 3]
+ cprime%c2(3,4) = cprime%c2(3,4) + 1.0_ki/3.0_ki * C(0) * coeffs%c2(3, 9)
+ ! [0, 0, 3, 3, 3] <-- [0, 0, 3, 3, 3, 3]
+ cprime%c2(3,7) = cprime%c2(3,7) + 2.0_ki/3.0_ki * C(3) * coeffs%c2(3, 9)
+ ! [1, 2, 2, 2, 2] <-- [1, 1, 2, 2, 2, 2]
+ cprime%c2(4,4) = cprime%c2(4,4) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(4, 9)
+ ! [1, 1, 2, 2, 2] <-- [1, 1, 2, 2, 2, 2]
+ cprime%c2(4,7) = cprime%c2(4,7) + 2.0_ki/3.0_ki * C(2) * coeffs%c2(4, 9)
+ ! [1, 3, 3, 3, 3] <-- [1, 1, 3, 3, 3, 3]
+ cprime%c2(5,4) = cprime%c2(5,4) + 1.0_ki/3.0_ki * C(1) * coeffs%c2(5, 9)
+ ! [1, 1, 3, 3, 3] <-- [1, 1, 3, 3, 3, 3]
+ cprime%c2(5,7) = cprime%c2(5,7) + 2.0_ki/3.0_ki * C(3) * coeffs%c2(5, 9)
+ ! [2, 3, 3, 3, 3] <-- [2, 2, 3, 3, 3, 3]
+ cprime%c2(6,4) = cprime%c2(6,4) + 1.0_ki/3.0_ki * C(2) * coeffs%c2(6, 9)
+ ! [2, 2, 3, 3, 3] <-- [2, 2, 3, 3, 3, 3]
+ cprime%c2(6,7) = cprime%c2(6,7) + 2.0_ki/3.0_ki * C(3) * coeffs%c2(6, 9)
+ ! [0, 0, 0, 0, 0] <-- [0, 0, 0, 0, 0, 0]
+ cprime%c1(1,5) = cprime%c1(1,5) + C(0) * coeffs%c1(1, 6)
+ ! [1, 1, 1, 1, 1] <-- [1, 1, 1, 1, 1, 1]
+ cprime%c1(2,5) = cprime%c1(2,5) + C(1) * coeffs%c1(2, 6)
+ ! [2, 2, 2, 2, 2] <-- [2, 2, 2, 2, 2, 2]
+ cprime%c1(3,5) = cprime%c1(3,5) + C(2) * coeffs%c1(3, 6)
+ ! [3, 3, 3, 3, 3] <-- [3, 3, 3, 3, 3, 3]
+ cprime%c1(4,5) = cprime%c1(4,5) + C(3) * coeffs%c1(4, 6)
+ ! [1, 2, 2, 2, 2] <-- [0, 1, 2, 2, 2, 2]
+ cprime%c2(4,4) = cprime%c2(4,4) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(1, 4)
+ ! [0, 2, 2, 2, 2] <-- [0, 1, 2, 2, 2, 2]
+ cprime%c2(2,4) = cprime%c2(2,4) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(1, 4)
+ ! [0, 1, 2, 2, 2] <-- [0, 1, 2, 2, 2, 2]
+ cprime%c3(1,3) = cprime%c3(1,3) + 2.0_ki/3.0_ki * C(2) * coeffs%c3(1, 4)
+ ! [1, 3, 3, 3, 3] <-- [0, 1, 3, 3, 3, 3]
+ cprime%c2(5,4) = cprime%c2(5,4) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(2, 4)
+ ! [0, 3, 3, 3, 3] <-- [0, 1, 3, 3, 3, 3]
+ cprime%c2(3,4) = cprime%c2(3,4) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(2, 4)
+ ! [0, 1, 3, 3, 3] <-- [0, 1, 3, 3, 3, 3]
+ cprime%c3(2,3) = cprime%c3(2,3) + 2.0_ki/3.0_ki * C(3) * coeffs%c3(2, 4)
+ ! [2, 3, 3, 3, 3] <-- [0, 2, 3, 3, 3, 3]
+ cprime%c2(6,4) = cprime%c2(6,4) + 1.0_ki/6.0_ki * C(0) * coeffs%c3(3, 4)
+ ! [0, 3, 3, 3, 3] <-- [0, 2, 3, 3, 3, 3]
+ cprime%c2(3,4) = cprime%c2(3,4) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(3, 4)
+ ! [0, 2, 3, 3, 3] <-- [0, 2, 3, 3, 3, 3]
+ cprime%c3(3,3) = cprime%c3(3,3) + 2.0_ki/3.0_ki * C(3) * coeffs%c3(3, 4)
+ ! [2, 3, 3, 3, 3] <-- [1, 2, 3, 3, 3, 3]
+ cprime%c2(6,4) = cprime%c2(6,4) + 1.0_ki/6.0_ki * C(1) * coeffs%c3(4, 4)
+ ! [1, 3, 3, 3, 3] <-- [1, 2, 3, 3, 3, 3]
+ cprime%c2(5,4) = cprime%c2(5,4) + 1.0_ki/6.0_ki * C(2) * coeffs%c3(4, 4)
+ ! [1, 2, 3, 3, 3] <-- [1, 2, 3, 3, 3, 3]
+ cprime%c3(4,3) = cprime%c3(4,3) + 2.0_ki/3.0_ki * C(3) * coeffs%c3(4, 4)
+ amp = amp - contract5_5(cprime, momenta, new_set)
+ end do
+end function contract6_6
+!****f* src/interface/tens_comb/contract_a_tensor_1
+! NAME
+!
+! Function contract_a_tensor_1
+!
+! USAGE
+!
+! ans = contract_a_tensor_1(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an A-type tensor
+! of rank 1 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_1)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_a_tensor_1(coeffs, momenta) result(res)
+ ! generated by: write_function_a_tensor_contract
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(1)
+ acc = momenta(1,0)
+ res = acc * coeffs%c1(1,1)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c1(2,1)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c1(3,1)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c1(4,1)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_a_tensor_1
+!****f* src/interface/tens_comb/contract_a_tensor_2
+! NAME
+!
+! Function contract_a_tensor_2
+!
+! USAGE
+!
+! ans = contract_a_tensor_2(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an A-type tensor
+! of rank 2 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_a_tensor_2(coeffs, momenta) result(res)
+ ! generated by: write_function_a_tensor_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(1)
+ acc = momenta(1,0)
+ res = acc * coeffs%c1(1,1)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c1(2,1)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c1(3,1)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c1(4,1)
+ case(2)
+ acc = momenta(1,0)*momenta(2,0)
+ res = acc * coeffs%c1(1,2)
+ acc = momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c1(2,2)
+ acc = momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c1(3,2)
+ acc = momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c1(4,2)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,1)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,1)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,1)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_a_tensor_2
+!****f* src/interface/tens_comb/contract_b_tensor_2
+! NAME
+!
+! Function contract_b_tensor_2
+!
+! USAGE
+!
+! ans = contract_b_tensor_2(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an B-type tensor
+! of rank 2 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_2)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_b_tensor_2(coeffs, momenta) result(res)
+ ! generated by: write_function_b_tensor_contract
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(0)
+ res = coeffs%c1(1,2)
+ res = res - coeffs%c1(2,2)
+ res = res - coeffs%c1(3,2)
+ res = res - coeffs%c1(4,2)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_b_tensor_2
+!****f* src/interface/tens_comb/contract_a_tensor_3
+! NAME
+!
+! Function contract_a_tensor_3
+!
+! USAGE
+!
+! ans = contract_a_tensor_3(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an A-type tensor
+! of rank 3 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_3)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_a_tensor_3(coeffs, momenta) result(res)
+ ! generated by: write_function_a_tensor_contract
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ real(ki) :: reg0
+ real(ki) :: reg1
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(1)
+ acc = momenta(1,0)
+ res = acc * coeffs%c1(1,1)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c1(2,1)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c1(3,1)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c1(4,1)
+ case(2)
+ acc = momenta(1,0)*momenta(2,0)
+ res = acc * coeffs%c1(1,2)
+ acc = momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c1(2,2)
+ acc = momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c1(3,2)
+ acc = momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c1(4,2)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,1)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,1)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,1)
+ case(3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = acc * coeffs%c2(1,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,2)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,2)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,2)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(1,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(2,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(3,1)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(4,1)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c1(1,3)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c1(2,3)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c1(3,3)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c1(4,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,3)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_a_tensor_3
+!****f* src/interface/tens_comb/contract_b_tensor_3
+! NAME
+!
+! Function contract_b_tensor_3
+!
+! USAGE
+!
+! ans = contract_b_tensor_3(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an B-type tensor
+! of rank 3 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_3)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_b_tensor_3(coeffs, momenta) result(res)
+ ! generated by: write_function_b_tensor_contract
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(0)
+ res = coeffs%c1(1,2)
+ res = res - coeffs%c1(2,2)
+ res = res - coeffs%c1(3,2)
+ res = res - coeffs%c1(4,2)
+ case(1)
+ acc = -momenta(1,0)
+ res = acc * coeffs%c2(1,2)
+ acc = -momenta(1,0)
+ res = res + acc * coeffs%c2(2,2)
+ acc = -momenta(1,0)
+ res = res + acc * coeffs%c2(3,2)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c2(4,2)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c2(5,2)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c2(6,2)
+ acc = 3*momenta(1,0)
+ res = res + acc * coeffs%c1(1,3)
+ acc = -3*momenta(1,1)
+ res = res + acc * coeffs%c1(2,3)
+ acc = -3*momenta(1,2)
+ res = res + acc * coeffs%c1(3,3)
+ acc = -3*momenta(1,3)
+ res = res + acc * coeffs%c1(4,3)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c2(1,3)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c2(2,3)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c2(3,3)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c2(4,3)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c2(5,3)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c2(6,3)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_b_tensor_3
+!****f* src/interface/tens_comb/contract_a_tensor_4
+! NAME
+!
+! Function contract_a_tensor_4
+!
+! USAGE
+!
+! ans = contract_a_tensor_4(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an A-type tensor
+! of rank 4 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_4)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_a_tensor_4(coeffs, momenta) result(res)
+ ! generated by: write_function_a_tensor_contract
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ real(ki) :: reg4
+ real(ki) :: reg5
+ real(ki) :: reg2
+ real(ki) :: reg3
+ real(ki) :: reg0
+ real(ki) :: reg1
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(1)
+ acc = momenta(1,0)
+ res = acc * coeffs%c1(1,1)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c1(2,1)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c1(3,1)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c1(4,1)
+ case(2)
+ acc = momenta(1,0)*momenta(2,0)
+ res = acc * coeffs%c1(1,2)
+ acc = momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c1(2,2)
+ acc = momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c1(3,2)
+ acc = momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c1(4,2)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,1)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,1)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,1)
+ case(3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = acc * coeffs%c2(1,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,2)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,2)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,2)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(1,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(2,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(3,1)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(4,1)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c1(1,3)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c1(2,3)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c1(3,3)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c1(4,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(1,4)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,4)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,4)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,4)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,4)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,4)
+ case(4)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = acc * coeffs%c3(1,3)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(2,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(3,3)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(2,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,0)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(3,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(4,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(5,3)
+ acc = momenta(2,2)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,2)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(6,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,2)
+ acc = acc + momenta(3,2)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(1,4)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(2,4)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(3,2)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(3,4)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(2,1)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(4,4)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(1,6)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(2,6)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(3,6)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,2)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(4,6)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,3)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(5,6)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(6,6)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg4 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 24.0_ki
+ res = res + acc * coeffs%c4(1,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(1,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(2,2)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(3,2)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg2
+ acc = acc * momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(1,5)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg2
+ acc = acc * momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(2,5)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg2
+ acc = acc * momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(3,5)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg2
+ acc = acc * momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(4,5)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg1 = acc * momenta(3,1)
+ acc = momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg2
+ acc = acc * momenta(1,1)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(5,5)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg2
+ acc = acc * momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(6,5)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)*momenta(4,0)
+ res = res + acc * coeffs%c1(1,4)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)*momenta(4,1)
+ res = res + acc * coeffs%c1(2,4)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,2)
+ res = res + acc * coeffs%c1(3,4)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ res = res + acc * coeffs%c1(4,4)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_a_tensor_4
+!****f* src/interface/tens_comb/contract_b_tensor_4
+! NAME
+!
+! Function contract_b_tensor_4
+!
+! USAGE
+!
+! ans = contract_b_tensor_4(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an B-type tensor
+! of rank 4 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_4)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_b_tensor_4(coeffs, momenta) result(res)
+ ! generated by: write_function_b_tensor_contract
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(0)
+ res = coeffs%c1(1,2)
+ res = res - coeffs%c1(2,2)
+ res = res - coeffs%c1(3,2)
+ res = res - coeffs%c1(4,2)
+ case(1)
+ acc = -momenta(1,0)
+ res = acc * coeffs%c2(1,2)
+ acc = -momenta(1,0)
+ res = res + acc * coeffs%c2(2,2)
+ acc = -momenta(1,0)
+ res = res + acc * coeffs%c2(3,2)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c2(4,2)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c2(5,2)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c2(6,2)
+ acc = 3*momenta(1,0)
+ res = res + acc * coeffs%c1(1,3)
+ acc = -3*momenta(1,1)
+ res = res + acc * coeffs%c1(2,3)
+ acc = -3*momenta(1,2)
+ res = res + acc * coeffs%c1(3,3)
+ acc = -3*momenta(1,3)
+ res = res + acc * coeffs%c1(4,3)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c2(1,4)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c2(2,4)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c2(3,4)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c2(4,4)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c2(5,4)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c2(6,4)
+ case(2)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = acc * coeffs%c3(1,3)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(2,3)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(3,3)
+ acc = -momenta(1,1)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(4,3)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,3)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,3)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,3)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,3)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,3)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(1,4)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(2,4)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(3,4)
+ acc = -momenta(1,2)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(4,4)
+ acc = 3*momenta(1,0)*momenta(2,1)
+ acc = acc + 3*momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,6)
+ acc = 3*momenta(1,0)*momenta(2,2)
+ acc = acc + 3*momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,6)
+ acc = 3*momenta(1,0)*momenta(2,3)
+ acc = acc + 3*momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,6)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,6)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,6)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,6)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(1,2)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(2,2)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(3,2)
+ acc = -momenta(1,1)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(4,2)
+ acc = momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c2(1,5)
+ acc = momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c2(2,5)
+ acc = momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c2(3,5)
+ acc = -momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c2(4,5)
+ acc = -momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c2(5,5)
+ acc = -momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c2(6,5)
+ acc = -momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c2(1,5)
+ acc = -momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c2(2,5)
+ acc = -momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c2(3,5)
+ acc = -momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c2(4,5)
+ acc = -momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c2(5,5)
+ acc = -momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c2(6,5)
+ acc = 6*momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c1(1,4)
+ acc = -6*momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c1(2,4)
+ acc = -6*momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c1(3,4)
+ acc = -6*momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c1(4,4)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_b_tensor_4
+!****f* src/interface/tens_comb/contract_c_tensor_4
+! NAME
+!
+! Function contract_c_tensor_4
+!
+! USAGE
+!
+! ans = contract_c_tensor_4(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an C-type tensor
+! of rank 4 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_4)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_c_tensor_4(coeffs, momenta) result(res)
+ ! generated by: write_function_c_tensor_contract
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(0)
+ res = -coeffs%c2(1,5)
+ res = res - coeffs%c2(2,5)
+ res = res - coeffs%c2(3,5)
+ res = res + coeffs%c2(4,5)
+ res = res + coeffs%c2(5,5)
+ res = res + coeffs%c2(6,5)
+ acc = 3
+ res = res + acc * coeffs%c1(1,4)
+ acc = 3
+ res = res + acc * coeffs%c1(2,4)
+ acc = 3
+ res = res + acc * coeffs%c1(3,4)
+ acc = 3
+ res = res + acc * coeffs%c1(4,4)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_c_tensor_4
+!****f* src/interface/tens_comb/contract_a_tensor_5
+! NAME
+!
+! Function contract_a_tensor_5
+!
+! USAGE
+!
+! ans = contract_a_tensor_5(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an A-type tensor
+! of rank 5 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_5)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_a_tensor_5(coeffs, momenta) result(res)
+ ! generated by: write_function_a_tensor_contract
+ implicit none
+ type(coeff_type_5), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ real(ki) :: reg6
+ real(ki) :: reg4
+ real(ki) :: reg5
+ real(ki) :: reg2
+ real(ki) :: reg3
+ real(ki) :: reg0
+ real(ki) :: reg1
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(1)
+ acc = momenta(1,0)
+ res = acc * coeffs%c1(1,1)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c1(2,1)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c1(3,1)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c1(4,1)
+ case(2)
+ acc = momenta(1,0)*momenta(2,0)
+ res = acc * coeffs%c1(1,2)
+ acc = momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c1(2,2)
+ acc = momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c1(3,2)
+ acc = momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c1(4,2)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,1)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,1)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,1)
+ case(3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = acc * coeffs%c2(1,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,2)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,2)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,2)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(1,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(2,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(3,1)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(4,1)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c1(1,3)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c1(2,3)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c1(3,3)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c1(4,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(1,5)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,5)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,5)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,5)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,5)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,5)
+ case(4)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = acc * coeffs%c3(1,4)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(2,4)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(3,4)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(4,4)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(2,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,0)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(3,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(4,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(5,3)
+ acc = momenta(2,2)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,2)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(6,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,2)
+ acc = acc + momenta(3,2)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(1,7)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(2,7)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(3,2)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(3,7)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(3,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(2,1)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(4,7)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(1,8)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(2,8)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)*momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(3,8)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,2)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(4,8)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,3)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(5,8)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 4.0_ki
+ res = res + acc * coeffs%c2(6,8)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg4 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 24.0_ki
+ res = res + acc * coeffs%c4(1,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(1,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(2,2)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(3,2)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 12.0_ki
+ res = res + acc * coeffs%c3(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg1 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg2
+ acc = acc * momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(1,6)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg2
+ acc = acc * momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(2,6)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg2
+ acc = acc * momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(3,6)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg2
+ acc = acc * momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(4,6)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg1 = acc * momenta(3,1)
+ acc = momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg2
+ acc = acc * momenta(1,1)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(5,6)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg2
+ acc = acc * momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c2(6,6)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)*momenta(4,0)
+ res = res + acc * coeffs%c1(1,4)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)*momenta(4,1)
+ res = res + acc * coeffs%c1(2,4)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,2)
+ res = res + acc * coeffs%c1(3,4)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)*momenta(4,3)
+ res = res + acc * coeffs%c1(4,4)
+ case(5)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg3
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)*momenta(4,0)
+ acc = acc + reg2
+ acc = acc * momenta(5,1)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = acc * coeffs%c2(1,9)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg3
+ acc = acc * momenta(4,0)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)*momenta(4,0)
+ acc = acc + reg2
+ acc = acc * momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(2,9)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(4,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg3
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)*momenta(4,0)
+ acc = acc + reg2
+ acc = acc * momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(3,9)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg3
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg3 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,2)*momenta(4,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)*momenta(4,1)
+ acc = acc + reg2
+ acc = acc * momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(4,9)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,1)
+ acc = momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg3
+ acc = acc * momenta(1,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,3)*momenta(4,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg2
+ acc = acc * momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(5,9)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(2,2)*momenta(3,3)*momenta(5,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(5,3)
+ acc = acc + reg3
+ acc = acc * momenta(1,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(5,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(5,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)*momenta(5,2)
+ acc = acc + reg2
+ acc = acc * momenta(4,3)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(6,9)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,2)
+ acc = acc + momenta(3,2)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(4,1)*momenta(5,2)
+ acc = acc + momenta(4,2)*momenta(5,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(3,1)*momenta(5,2)
+ acc = acc + momenta(3,2)*momenta(5,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc * momenta(4,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(1,10)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(4,1)*momenta(5,3)
+ acc = acc + momenta(4,3)*momenta(5,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(3,1)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc * momenta(4,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(2,10)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(3,2)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(4,2)*momenta(5,3)
+ acc = acc + momenta(4,3)*momenta(5,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc * momenta(4,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(3,10)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc * momenta(2,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(4,10)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg2 = acc * momenta(5,0)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(2,0)*momenta(3,1)
+ acc = acc + momenta(2,1)*momenta(3,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg4 = acc * momenta(5,1)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ reg5 = acc * momenta(5,0)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ reg6 = acc * momenta(5,1)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg5 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(5,1)
+ acc = acc + momenta(1,1)*momenta(5,0)
+ reg5 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg6 = acc * momenta(5,2)
+ acc = momenta(4,0)*momenta(5,1)
+ acc = acc + momenta(4,1)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg5 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ reg5 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,0)
+ reg6 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ reg5 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg6 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 60.0_ki
+ res = res + acc * coeffs%c4(1,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(3,0)*momenta(5,1)
+ acc = acc + momenta(3,1)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(4,0)*momenta(5,1)
+ acc = acc + momenta(4,1)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(1,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(5,0)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,1)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(5,1)
+ acc = acc + momenta(1,1)*momenta(5,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(2,3)
+ acc = momenta(2,0)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,0)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(5,2)
+ acc = acc + momenta(2,2)*momenta(5,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,0)
+ acc = acc * momenta(3,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(3,0)*momenta(4,2)
+ acc = acc + momenta(3,2)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(5,2)
+ acc = acc + momenta(1,2)*momenta(5,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(3,3)
+ acc = momenta(2,1)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,1)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(2,1)*momenta(5,2)
+ acc = acc + momenta(2,2)*momenta(5,1)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,1)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,1)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(3,1)*momenta(4,2)
+ acc = acc + momenta(3,2)*momenta(4,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(5,2)
+ acc = acc + momenta(1,2)*momenta(5,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(4,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg6 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg5 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(5,3)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg5 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg6 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,2)*momenta(3,3)
+ acc = acc + momenta(1,3)*momenta(3,2)
+ reg4 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ reg5 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(3,3)
+ acc = acc + momenta(1,3)*momenta(3,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(2,0)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg5 = acc * momenta(5,1)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg6 = acc * momenta(5,3)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,0)
+ acc = acc + reg3
+ reg2 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,1)
+ reg5 = acc * momenta(4,2)
+ acc = momenta(4,1)*momenta(5,3)
+ acc = acc + momenta(4,3)*momenta(5,1)
+ reg6 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 60.0_ki
+ res = res + acc * coeffs%c4(1,5)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,0)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg5 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg6 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg4 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg5 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(4,1)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg5 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg6 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(4,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg6 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ reg5 = acc * momenta(5,0)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ reg6 = acc * momenta(5,1)
+ acc = momenta(3,0)*momenta(4,1)
+ acc = acc + momenta(3,1)*momenta(4,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 60.0_ki
+ res = res + acc * coeffs%c4(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(5,2)
+ acc = acc + momenta(2,2)*momenta(5,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(3,0)*momenta(5,2)
+ acc = acc + momenta(3,2)*momenta(5,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc * momenta(2,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(1,6)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(5,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(3,0)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc * momenta(2,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(2,6)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg2 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(3,0)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(4,0)*momenta(5,3)
+ acc = acc + momenta(4,3)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(3,6)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg2 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(3,1)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(5,2)
+ acc = momenta(4,1)*momenta(5,3)
+ acc = acc + momenta(4,3)*momenta(5,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 20.0_ki
+ res = res + acc * coeffs%c3(4,6)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)*momenta(4,1)*momenta(5,0)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(1,4)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(5,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(5,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)*momenta(5,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,0)*momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(2,4)
+ acc = momenta(2,0)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,0)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(2,3)*momenta(4,0)*momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,0)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(3,3)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(3,4)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(5,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(5,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)*momenta(5,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,1)*momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(4,4)
+ acc = momenta(2,1)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,1)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(2,3)*momenta(4,1)*momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(5,4)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg2 = acc * momenta(4,3)
+ acc = momenta(2,3)*momenta(4,2)*momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(6,4)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(3,0)*momenta(5,2)
+ acc = acc + momenta(3,2)*momenta(5,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(2,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,0)*momenta(5,1)
+ acc = acc + momenta(3,1)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg5 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(1,5)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg4 = acc * momenta(3,1)
+ acc = momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(1,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg5
+ acc = acc * momenta(1,1)
+ acc = acc + reg3
+ acc = acc * momenta(5,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(2,5)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg2 = acc * momenta(5,0)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(2,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(5,2)
+ acc = acc + momenta(1,2)*momenta(5,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,0)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(2,2)*momenta(3,3)*momenta(5,2)
+ acc = acc + reg4
+ reg3 = acc * momenta(1,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(5,3)
+ acc = acc + reg5
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,0)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(3,5)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg2 = acc * momenta(5,1)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(5,2)
+ acc = acc + momenta(1,2)*momenta(5,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(5,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,1)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(2,2)*momenta(3,3)*momenta(5,2)
+ acc = acc + reg4
+ reg3 = acc * momenta(1,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(5,3)
+ acc = acc + reg5
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(4,5)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)*momenta(4,0)*momenta(5,0)
+ res = res + acc * coeffs%c1(1,5)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)*momenta(4,1)*momenta(5,1)
+ res = res + acc * coeffs%c1(2,5)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,2)*momenta(5,2)
+ res = res + acc * coeffs%c1(3,5)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)*momenta(4,3)*momenta(5,3)
+ res = res + acc * coeffs%c1(4,5)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg2 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg3
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg3 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,0)*momenta(4,1)
+ acc = acc + reg2
+ acc = acc * momenta(5,0)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(1,7)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg2
+ reg1 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg3
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(5,0)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)*momenta(5,2)
+ acc = acc + reg2
+ acc = acc * momenta(4,0)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(2,7)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,0)*momenta(4,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(5,0)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(3,3)*momenta(4,0)
+ acc = acc + reg3
+ acc = acc * momenta(5,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(2,0)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(2,3)*momenta(4,0)*momenta(5,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,0)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg2
+ acc = acc * momenta(1,0)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(3,7)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg3
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(5,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)*momenta(5,2)
+ acc = acc + reg2
+ acc = acc * momenta(4,1)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(4,7)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(5,1)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg3 = acc * momenta(3,1)
+ acc = momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg3
+ acc = acc * momenta(5,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(2,1)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,1)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(2,3)*momenta(4,1)*momenta(5,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg2
+ acc = acc * momenta(1,1)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(5,7)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(2,2)*momenta(3,3)*momenta(5,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ reg0 = acc * momenta(1,3)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(2,3)*momenta(4,2)*momenta(5,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,2)*momenta(4,3)*momenta(5,3)
+ acc = acc + reg2
+ acc = acc * momenta(1,2)
+ acc = acc + reg0
+ acc = acc / 10.0_ki
+ res = res + acc * coeffs%c2(6,7)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(3,1)*momenta(5,2)
+ acc = acc + momenta(3,2)*momenta(5,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,0)*momenta(5,1)
+ acc = acc + momenta(3,1)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(1,8)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,1)
+ acc = acc + momenta(1,1)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg4 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(4,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg5 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg5
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ acc = acc * momenta(5,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(2,8)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,0)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,0)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(4,0)
+ acc = momenta(3,2)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ reg4 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,3)*momenta(4,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg5 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg5
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(3,8)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc * momenta(4,3)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg3 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ acc = acc * momenta(3,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(2,1)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg4 = acc * momenta(3,1)
+ acc = momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(1,3)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(2,3)*momenta(3,1)*momenta(4,3)
+ acc = acc + reg5
+ acc = acc * momenta(1,1)
+ acc = acc + reg3
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(4,8)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,1)*momenta(4,0)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)*momenta(4,0)*momenta(5,1)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(1,10)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,2)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)*momenta(4,0)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)*momenta(4,0)*momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(2,10)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg2 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,3)*momenta(4,0)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,0)*momenta(4,0)*momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(3,10)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg2 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,2)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)*momenta(4,1)*momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(4,10)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg2 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,3)*momenta(4,1)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)*momenta(4,1)
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)*momenta(4,1)*momenta(5,3)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(5,10)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg2 = acc * momenta(5,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(5,3)
+ acc = acc + reg2
+ reg1 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)*momenta(5,2)
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)*momenta(4,3)*momenta(5,2)
+ acc = acc + reg0
+ acc = acc / 5.0_ki
+ res = res + acc * coeffs%c2(6,10)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg2 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,2)
+ acc = acc + momenta(1,2)*momenta(4,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg4 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,2)
+ acc = acc + momenta(3,2)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg4 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg5 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg5
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc * momenta(5,2)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(1,9)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,0)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,0)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(4,0)
+ acc = momenta(3,1)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,1)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,1)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg4 = acc * momenta(2,1)
+ acc = momenta(1,1)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg5 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(4,1)
+ acc = acc + reg5
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc * momenta(5,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(2,9)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ reg3 = acc * momenta(3,2)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,0)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(1,0)
+ acc = acc * momenta(2,0)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(5,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,0)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,0)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,0)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(3,9)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg2 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg3 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ reg2 = acc * momenta(3,1)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(2,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(4,2)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(5,3)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc * momenta(5,2)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,2)
+ acc = momenta(3,1)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,1)
+ acc = acc * momenta(1,2)
+ acc = acc * momenta(2,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg4
+ reg3 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg5 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc * momenta(4,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 30.0_ki
+ res = res + acc * coeffs%c3(4,9)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg2 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg3 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(4,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg3 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(3,2)
+ acc = momenta(1,1)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,1)
+ reg4 = acc * momenta(3,0)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg5 = acc * momenta(3,3)
+ acc = momenta(1,0)*momenta(4,3)
+ acc = acc + momenta(1,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(2,2)
+ acc = momenta(2,1)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,1)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg6 = acc * momenta(3,3)
+ acc = momenta(2,0)*momenta(4,3)
+ acc = acc + momenta(2,3)*momenta(4,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ reg0 = acc * momenta(5,1)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg3 = acc * momenta(4,2)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg4 = acc * momenta(4,3)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc * momenta(4,1)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc * momenta(5,0)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg4 = acc * momenta(4,2)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ reg5 = acc * momenta(2,2)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ acc = acc * momenta(1,2)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(5,3)
+ acc = momenta(2,0)*momenta(4,1)
+ acc = acc + momenta(2,1)*momenta(4,0)
+ reg5 = acc * momenta(1,3)
+ acc = momenta(1,0)*momenta(2,1)
+ acc = acc + momenta(1,1)*momenta(2,0)
+ reg6 = acc * momenta(4,3)
+ acc = momenta(1,0)*momenta(4,1)
+ acc = acc + momenta(1,1)*momenta(4,0)
+ acc = acc * momenta(2,3)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(5,2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc * momenta(3,1)
+ acc = momenta(1,2)*momenta(3,3)
+ acc = acc + momenta(1,3)*momenta(3,2)
+ reg4 = acc * momenta(5,0)
+ acc = momenta(1,2)*momenta(5,3)
+ acc = acc + momenta(1,3)*momenta(5,2)
+ reg5 = acc * momenta(3,0)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(1,0)
+ acc = acc + reg5
+ acc = acc + reg4
+ reg3 = acc * momenta(4,1)
+ acc = momenta(3,0)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,0)
+ reg5 = acc * momenta(4,2)
+ acc = momenta(4,0)*momenta(5,3)
+ acc = acc + momenta(4,3)*momenta(5,0)
+ reg6 = acc * momenta(3,2)
+ acc = momenta(3,0)*momenta(4,3)
+ acc = acc + momenta(3,3)*momenta(4,0)
+ acc = acc * momenta(5,2)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,1)
+ acc = acc + reg3
+ reg2 = acc * momenta(2,1)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg5 = acc * momenta(5,0)
+ acc = momenta(2,2)*momenta(5,3)
+ acc = acc + momenta(2,3)*momenta(5,2)
+ reg6 = acc * momenta(3,0)
+ acc = momenta(3,2)*momenta(5,3)
+ acc = acc + momenta(3,3)*momenta(5,2)
+ acc = acc * momenta(2,0)
+ acc = acc + reg6
+ acc = acc + reg5
+ acc = acc * momenta(1,1)
+ acc = acc * momenta(4,1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 60.0_ki
+ res = res + acc * coeffs%c4(1,4)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_a_tensor_5
+!****f* src/interface/tens_comb/contract_b_tensor_5
+! NAME
+!
+! Function contract_b_tensor_5
+!
+! USAGE
+!
+! ans = contract_b_tensor_5(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an B-type tensor
+! of rank 5 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_5)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_b_tensor_5(coeffs, momenta) result(res)
+ ! generated by: write_function_b_tensor_contract
+ implicit none
+ type(coeff_type_5), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ real(ki) :: reg0
+ real(ki) :: reg1
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(0)
+ res = coeffs%c1(1,2)
+ res = res - coeffs%c1(2,2)
+ res = res - coeffs%c1(3,2)
+ res = res - coeffs%c1(4,2)
+ case(1)
+ acc = -momenta(1,0)
+ res = acc * coeffs%c2(1,2)
+ acc = -momenta(1,0)
+ res = res + acc * coeffs%c2(2,2)
+ acc = -momenta(1,0)
+ res = res + acc * coeffs%c2(3,2)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c2(4,2)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c2(5,2)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c2(6,2)
+ acc = 3*momenta(1,0)
+ res = res + acc * coeffs%c1(1,3)
+ acc = -3*momenta(1,1)
+ res = res + acc * coeffs%c1(2,3)
+ acc = -3*momenta(1,2)
+ res = res + acc * coeffs%c1(3,3)
+ acc = -3*momenta(1,3)
+ res = res + acc * coeffs%c1(4,3)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c2(1,5)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c2(2,5)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c2(3,5)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c2(4,5)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c2(5,5)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c2(6,5)
+ case(2)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = acc * coeffs%c3(1,4)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(2,4)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(3,4)
+ acc = -momenta(1,1)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(4,4)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,3)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,3)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,3)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,3)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,3)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(1,7)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(2,7)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(3,7)
+ acc = -momenta(1,2)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(4,7)
+ acc = 3*momenta(1,0)*momenta(2,1)
+ acc = acc + 3*momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(1,8)
+ acc = 3*momenta(1,0)*momenta(2,2)
+ acc = acc + 3*momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(2,8)
+ acc = 3*momenta(1,0)*momenta(2,3)
+ acc = acc + 3*momenta(1,3)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(3,8)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(4,8)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(5,8)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c2(6,8)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(1,2)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(2,2)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(3,2)
+ acc = -momenta(1,1)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,1)
+ acc = acc / 2.0_ki
+ res = res + acc * coeffs%c3(4,2)
+ acc = momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c2(1,6)
+ acc = momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c2(2,6)
+ acc = momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c2(3,6)
+ acc = -momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c2(4,6)
+ acc = -momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c2(5,6)
+ acc = -momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c2(6,6)
+ acc = -momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c2(1,6)
+ acc = -momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c2(2,6)
+ acc = -momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c2(3,6)
+ acc = -momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c2(4,6)
+ acc = -momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c2(5,6)
+ acc = -momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c2(6,6)
+ acc = 6*momenta(1,0)*momenta(2,0)
+ res = res + acc * coeffs%c1(1,4)
+ acc = -6*momenta(1,1)*momenta(2,1)
+ res = res + acc * coeffs%c1(2,4)
+ acc = -6*momenta(1,2)*momenta(2,2)
+ res = res + acc * coeffs%c1(3,4)
+ acc = -6*momenta(1,3)*momenta(2,3)
+ res = res + acc * coeffs%c1(4,4)
+ case(3)
+ acc = 3*momenta(1,0)*momenta(2,1)
+ acc = acc + 3*momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = 3*momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = acc * coeffs%c2(1,9)
+ acc = 3*momenta(1,0)*momenta(2,2)
+ acc = acc + 3*momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = 3*momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,9)
+ acc = 3*momenta(2,0)*momenta(3,3)
+ acc = acc + 3*momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = 3*momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,9)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = -3*momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,9)
+ acc = -3*momenta(2,1)*momenta(3,3)
+ acc = acc - 3*momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = -3*momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,9)
+ acc = -3*momenta(2,2)*momenta(3,3)
+ acc = acc - 3*momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = -3*momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,9)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c2(1,9)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c2(2,9)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c2(3,9)
+ acc = -momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c2(4,9)
+ acc = -momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c2(5,9)
+ acc = -momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c2(6,9)
+ acc = 3*momenta(1,1)*momenta(2,2)
+ acc = acc + 3*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = 3*momenta(1,0)*momenta(2,1)
+ acc = acc + 3*momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = 3*momenta(1,0)*momenta(2,2)
+ acc = acc + 3*momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(1,10)
+ acc = 3*momenta(1,1)*momenta(2,3)
+ acc = acc + 3*momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = 3*momenta(1,0)*momenta(2,1)
+ acc = acc + 3*momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = 3*momenta(1,0)*momenta(2,3)
+ acc = acc + 3*momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(2,10)
+ acc = 3*momenta(1,2)*momenta(2,3)
+ acc = acc + 3*momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = 3*momenta(1,0)*momenta(2,3)
+ acc = acc + 3*momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = 3*momenta(1,0)*momenta(2,2)
+ acc = acc + 3*momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(3,10)
+ acc = -3*momenta(2,1)*momenta(3,2)
+ acc = acc - 3*momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = -3*momenta(1,1)*momenta(3,2)
+ acc = acc - 3*momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(4,10)
+ acc = -momenta(1,1)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c4(1,2)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(1,3)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(2,3)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(3,3)
+ acc = -3*momenta(2,1)*momenta(3,2)
+ acc = acc - 3*momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = -3*momenta(1,1)*momenta(3,2)
+ acc = acc - 3*momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(4,3)
+ acc = momenta(2,1)*momenta(3,2)
+ acc = acc + momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = momenta(1,1)*momenta(3,2)
+ acc = acc + momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c4(1,5)
+ acc = -momenta(1,1)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c4(1,3)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(1,6)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ reg1 = acc * momenta(3,3)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ acc = acc * momenta(3,1)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(2,6)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(3,6)
+ acc = -3*momenta(2,1)*momenta(3,2)
+ acc = acc - 3*momenta(2,2)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg1 = acc * momenta(3,3)
+ acc = -3*momenta(1,1)*momenta(3,2)
+ acc = acc - 3*momenta(1,2)*momenta(3,1)
+ acc = acc * momenta(2,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c3(4,6)
+ acc = -6*momenta(1,0)*momenta(2,1)
+ acc = acc - 6*momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = -6*momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(1,4)
+ acc = -6*momenta(1,0)*momenta(2,2)
+ acc = acc - 6*momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = -6*momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,4)
+ acc = -6*momenta(2,0)*momenta(3,3)
+ acc = acc - 6*momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = -6*momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,4)
+ acc = -6*momenta(1,1)*momenta(2,2)
+ acc = acc - 6*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = -6*momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,4)
+ acc = -6*momenta(2,1)*momenta(3,3)
+ acc = acc - 6*momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = -6*momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,4)
+ acc = -6*momenta(2,2)*momenta(3,3)
+ acc = acc - 6*momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = -6*momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,4)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = -momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(1,5)
+ acc = -momenta(2,0)*momenta(3,3)
+ acc = acc - momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = -momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(2,5)
+ acc = -momenta(2,0)*momenta(3,3)
+ acc = acc - momenta(2,3)*momenta(3,0)
+ reg0 = acc * momenta(1,3)
+ acc = -momenta(1,0)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(3,5)
+ acc = -momenta(2,1)*momenta(3,3)
+ acc = acc - momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = -momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(4,5)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = -momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(1,5)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,1)
+ acc = -momenta(1,1)*momenta(2,1)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(2,5)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,2)
+ acc = -momenta(1,2)*momenta(2,2)*momenta(3,0)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(3,5)
+ acc = -momenta(1,1)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = -momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(4,5)
+ acc = 10*momenta(1,0)*momenta(2,0)*momenta(3,0)
+ res = res + acc * coeffs%c1(1,5)
+ acc = -10*momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c1(2,5)
+ acc = -10*momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c1(3,5)
+ acc = -10*momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c1(4,5)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,1)
+ res = res + acc * coeffs%c2(1,7)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c2(2,7)
+ acc = momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c2(3,7)
+ acc = -momenta(1,2)*momenta(2,2)*momenta(3,2)
+ res = res + acc * coeffs%c2(4,7)
+ acc = -momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c2(5,7)
+ acc = -momenta(1,3)*momenta(2,3)*momenta(3,3)
+ res = res + acc * coeffs%c2(6,7)
+ acc = -3*momenta(1,0)*momenta(2,1)
+ acc = acc - 3*momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(1,7)
+ acc = -3*momenta(1,0)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,7)
+ acc = -3*momenta(1,0)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -3*momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,7)
+ acc = -3*momenta(1,1)*momenta(2,2)
+ acc = acc - 3*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = -3*momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,7)
+ acc = -3*momenta(1,1)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = -3*momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,7)
+ acc = -3*momenta(1,2)*momenta(2,3)
+ acc = acc - 3*momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = -3*momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,7)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(1,8)
+ acc = momenta(2,1)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,1)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,1)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(2,8)
+ acc = momenta(2,2)*momenta(3,3)
+ acc = acc + momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(3,8)
+ acc = -momenta(2,2)*momenta(3,3)
+ acc = acc - momenta(2,3)*momenta(3,2)
+ reg0 = acc * momenta(1,3)
+ acc = -momenta(1,2)*momenta(2,3)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(4,8)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(1,8)
+ acc = -momenta(1,0)*momenta(2,1)
+ acc = acc - momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(2,8)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(3,8)
+ acc = -momenta(1,1)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = -momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(4,8)
+ acc = 6*momenta(1,0)*momenta(2,1)
+ acc = acc + 6*momenta(1,1)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = 6*momenta(1,0)*momenta(2,0)*momenta(3,1)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(1,10)
+ acc = 6*momenta(1,0)*momenta(2,2)
+ acc = acc + 6*momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = 6*momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(2,10)
+ acc = 6*momenta(1,0)*momenta(2,3)
+ acc = acc + 6*momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = 6*momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(3,10)
+ acc = -6*momenta(1,1)*momenta(2,2)
+ acc = acc - 6*momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = -6*momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(4,10)
+ acc = -6*momenta(1,1)*momenta(2,3)
+ acc = acc - 6*momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = -6*momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(5,10)
+ acc = -6*momenta(1,2)*momenta(2,3)
+ acc = acc - 6*momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = -6*momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c2(6,10)
+ acc = momenta(1,1)*momenta(2,2)
+ acc = acc + momenta(1,2)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(1,9)
+ acc = momenta(1,1)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(2,9)
+ acc = momenta(1,2)*momenta(2,3)
+ acc = acc + momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(3,9)
+ acc = -momenta(1,2)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,2)
+ acc = -momenta(1,2)*momenta(2,2)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(4,9)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,2)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(1,9)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(2,9)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,0)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(3,9)
+ acc = -momenta(1,1)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,1)
+ reg0 = acc * momenta(3,1)
+ acc = -momenta(1,1)*momenta(2,1)*momenta(3,3)
+ acc = acc + reg0
+ acc = acc / 3.0_ki
+ res = res + acc * coeffs%c3(4,9)
+ acc = -momenta(1,2)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,2)
+ reg0 = acc * momenta(3,0)
+ acc = -momenta(1,0)*momenta(2,3)
+ acc = acc - momenta(1,3)*momenta(2,0)
+ reg1 = acc * momenta(3,2)
+ acc = -momenta(1,0)*momenta(2,2)
+ acc = acc - momenta(1,2)*momenta(2,0)
+ acc = acc * momenta(3,3)
+ acc = acc + reg1
+ acc = acc + reg0
+ acc = acc / 6.0_ki
+ res = res + acc * coeffs%c4(1,4)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_b_tensor_5
+!****f* src/interface/tens_comb/contract_c_tensor_5
+! NAME
+!
+! Function contract_c_tensor_5
+!
+! USAGE
+!
+! ans = contract_c_tensor_5(coeffs, momenta)
+!
+! DESCRIPTION
+!
+! Contracts the a set of coefficients with an C-type tensor
+! of rank 5 constructed from a given set of momenta.
+!
+! INPUTS
+!
+! * coeffs -- coefficients of type(coeff_type_5)
+! * momenta -- real array of dimension(:,3) containing the
+! momenta r_i of the loop propagators
+!
+! RETURN VALUE
+!
+! The result of the contraction which is a complex number
+!
+! SIDE EFFECTS
+!
+! None
+!
+! EXAMPLE
+!
+!
+!*****
+pure function contract_c_tensor_5(coeffs, momenta) result(res)
+ ! generated by: write_function_c_tensor_contract
+ implicit none
+ type(coeff_type_5), intent(in) :: coeffs
+ real(ki), dimension(:,0:), intent(in), optional :: momenta
+ complex(ki) :: res
+ integer :: rk
+ real(ki) :: acc
+ if (present(momenta)) then
+ rk = size(momenta, 1)
+ else
+ rk = 0
+ end if
+ select case(rk)
+ case(0)
+ res = -coeffs%c2(1,6)
+ res = res - coeffs%c2(2,6)
+ res = res - coeffs%c2(3,6)
+ res = res + coeffs%c2(4,6)
+ res = res + coeffs%c2(5,6)
+ res = res + coeffs%c2(6,6)
+ acc = 3
+ res = res + acc * coeffs%c1(1,4)
+ acc = 3
+ res = res + acc * coeffs%c1(2,4)
+ acc = 3
+ res = res + acc * coeffs%c1(3,4)
+ acc = 3
+ res = res + acc * coeffs%c1(4,4)
+ case(1)
+ acc = -3*momenta(1,0)
+ res = acc * coeffs%c2(1,9)
+ acc = -3*momenta(1,0)
+ res = res + acc * coeffs%c2(2,9)
+ acc = -3*momenta(1,0)
+ res = res + acc * coeffs%c2(3,9)
+ acc = 3*momenta(1,1)
+ res = res + acc * coeffs%c2(4,9)
+ acc = 3*momenta(1,1)
+ res = res + acc * coeffs%c2(5,9)
+ acc = 3*momenta(1,2)
+ res = res + acc * coeffs%c2(6,9)
+ acc = 3*momenta(1,0)
+ res = res + acc * coeffs%c2(1,4)
+ acc = 3*momenta(1,0)
+ res = res + acc * coeffs%c2(2,4)
+ acc = 3*momenta(1,0)
+ res = res + acc * coeffs%c2(3,4)
+ acc = 3*momenta(1,1)
+ res = res + acc * coeffs%c2(4,4)
+ acc = 3*momenta(1,1)
+ res = res + acc * coeffs%c2(5,4)
+ acc = 3*momenta(1,2)
+ res = res + acc * coeffs%c2(6,4)
+ acc = momenta(1,0)
+ res = res + acc * coeffs%c3(1,5)
+ acc = momenta(1,0)
+ res = res + acc * coeffs%c3(2,5)
+ acc = momenta(1,0)
+ res = res + acc * coeffs%c3(3,5)
+ acc = momenta(1,1)
+ res = res + acc * coeffs%c3(4,5)
+ acc = 15*momenta(1,0)
+ res = res + acc * coeffs%c1(1,5)
+ acc = 15*momenta(1,1)
+ res = res + acc * coeffs%c1(2,5)
+ acc = 15*momenta(1,2)
+ res = res + acc * coeffs%c1(3,5)
+ acc = 15*momenta(1,3)
+ res = res + acc * coeffs%c1(4,5)
+ acc = -3*momenta(1,1)
+ res = res + acc * coeffs%c2(1,7)
+ acc = -3*momenta(1,2)
+ res = res + acc * coeffs%c2(2,7)
+ acc = -3*momenta(1,3)
+ res = res + acc * coeffs%c2(3,7)
+ acc = 3*momenta(1,2)
+ res = res + acc * coeffs%c2(4,7)
+ acc = 3*momenta(1,3)
+ res = res + acc * coeffs%c2(5,7)
+ acc = 3*momenta(1,3)
+ res = res + acc * coeffs%c2(6,7)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c3(1,8)
+ acc = -momenta(1,1)
+ res = res + acc * coeffs%c3(2,8)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c3(3,8)
+ acc = momenta(1,2)
+ res = res + acc * coeffs%c3(4,8)
+ acc = 3*momenta(1,1)
+ res = res + acc * coeffs%c2(1,10)
+ acc = 3*momenta(1,2)
+ res = res + acc * coeffs%c2(2,10)
+ acc = 3*momenta(1,3)
+ res = res + acc * coeffs%c2(3,10)
+ acc = 3*momenta(1,2)
+ res = res + acc * coeffs%c2(4,10)
+ acc = 3*momenta(1,3)
+ res = res + acc * coeffs%c2(5,10)
+ acc = 3*momenta(1,3)
+ res = res + acc * coeffs%c2(6,10)
+ acc = -momenta(1,2)
+ res = res + acc * coeffs%c3(1,9)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c3(2,9)
+ acc = -momenta(1,3)
+ res = res + acc * coeffs%c3(3,9)
+ acc = momenta(1,3)
+ res = res + acc * coeffs%c3(4,9)
+ case default
+ res = 0.0_ki
+ end select
+end function contract_c_tensor_5
+end module tens_comb
Index: 95/branches/golem95_without_olo_cmake/src/interface/gd0.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/gd0.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/gd0.f90 (revision 119)
@@ -0,0 +1,584 @@
+!
+!****f* src/interface/gd0i
+! NAME
+!
+! Function gd0i
+!
+! USAGE
+!
+! complex = gd0i(idt,s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the LoopTools D0i function.
+! The first argument is a character of length <= 6
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * idt -- a character of length <= 6, the type of form factors
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * s4 -- a real (type ki), p4^2
+! * s -- a real (type ki), (p1+p2)^2
+! * t -- a real (type ki), (p2+p3)^2
+! * m1 -- a real (type ki), mass^2 of propagator 4
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * m3 -- a real (type ki), mass^2 of propagator 2
+! * m4 -- a real (type ki), mass^2 of propagator 3
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_4p (src/form_factor/form_factor_4p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * tool_lt_to_golem, only : extract (src/interface/tool_lt_to_golem.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gd0i(idt,s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_4p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use tool_lt_to_golem, only : extract
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ character (len=*), intent (in) :: idt
+ real(ki), intent (in) :: s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gd0i
+ !
+ integer, dimension(6) :: tab
+ integer :: n1,n2
+ integer, dimension(4) :: temp
+ integer :: j1,j2,j3,j4
+ type(form_factor) :: ff
+ ! real(ki) :: lmu2
+ real(ki) :: mu2store
+ character (len=6) :: idt_temp
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(4)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = t-m2-m4
+ s_mat(1,4) = s1-m2-m1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ idt_temp = idt ! on complete la chaine entrante par des blancs
+ call extract(idt_temp,tab)
+ n1= count(tab/=-1)
+ n2= count(tab/=-1 .and. tab/=0)
+ !
+ temp = -2
+ temp(1:n1) = pack(tab,tab/=-1)
+ !
+ select case(n1)
+ !
+ case(1)
+ !
+ j1 = temp(1)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = a40(b_null)
+ !
+ case(1)
+ !
+ ff = a41(j1,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = b42(b_null)
+ !
+ case(2)
+ !
+ ff = a42(j1,j2,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ !
+ select case(n2)
+ !
+ case(1)
+ !
+ ff = b43(j3,b_null)
+ !
+ case(3)
+ !
+ ff = a43(j1,j2,j3,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ j4 = temp(4)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = c44(b_null)
+ !
+ case(2)
+ !
+ ff = b44(j3,j4,b_null)
+ !
+ case(4)
+ !
+ ff = a44(j1,j2,j3,j4,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n1 is not correct %d0'
+ tab_erreur_par(2)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ ! lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! gd0i = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ gd0i = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gd0i = ff%b + lmu2*ff%a
+ gd0i = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gd0i = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0i (gd0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ end function gd0i
+!
+!
+!****f* src/interface/gd0
+! NAME
+!
+! Function gd0
+!
+! USAGE
+!
+! complex = gd0(s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the scalar LoopTools D0 function.
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * s4 -- a real (type ki), p4^2
+! * s -- a real (type ki), (p1+p2)^2
+! * t -- a real (type ki), (p2+p3)^2
+! * m1 -- a real (type ki), mass^2 of propagator 4
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * m3 -- a real (type ki), mass^2 of propagator 2
+! * m4 -- a real (type ki), mass^2 of propagator 3
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_4p (src/form_factor/form_factor_4p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+!*****
+function gd0(s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_4p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gd0
+ !
+ type(form_factor) :: ff
+ ! real(ki) :: lmu2
+ real(ki) :: mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(4)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = t-m2-m4
+ s_mat(1,4) = s1-m2-m1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ ff = a40(b_null)
+ !
+ ! lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! gd0 = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ gd0 = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gd0 = ff%b + lmu2*ff%a
+ gd0 = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gd0 = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0 (gd0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+end function gd0
+!
+!****f* src/interface/gd0c
+! NAME
+!
+! Function gd0c
+!
+! USAGE
+!
+! complex = gd0c(s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the scalar LoopTools D0 function.
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a complex (type ki), p1^2
+! * s2 -- a complex (type ki), p2^2
+! * s3 -- a complex (type ki), p3^2
+! * s4 -- a complex (type ki), p4^2
+! * s -- a complex (type ki), (p1+p2)^2
+! * t -- a complex (type ki), (p2+p3)^2
+! * m1 -- a complex (type ki), mass^2 of propagator 4
+! * m2 -- a complex (type ki), mass^2 of propagator 1
+! * m3 -- a complex (type ki), mass^2 of propagator 2
+! * m4 -- a complex (type ki), mass^2 of propagator 3
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_4p (src/form_factor/form_factor_4p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+!*****
+function gd0c(s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_4p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ complex(ki), intent (in) :: s1,s2,s3,s4,s,t,m1,m2,m3,m4
+ real(ki), intent (in) :: mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gd0c
+ !
+ type(form_factor) :: ff
+ ! real(ki) :: lmu2
+ real(ki) :: mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(4)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = t-m2-m4
+ s_mat(1,4) = s1-m2-m1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ ff = a40(b_null)
+ !
+ ! lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! gd0c = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ gd0c = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gd0c = ff%b + lmu2*ff%a
+ gd0c = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gd0c = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gd0c (gd0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+end function gd0c
Index: 95/branches/golem95_without_olo_cmake/src/interface/ge0.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/ge0.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/ge0.f90 (revision 119)
@@ -0,0 +1,516 @@
+!
+!****f* src/interface/ge0i
+! NAME
+!
+! Function ge0i
+!
+! USAGE
+!
+! complex = ge0i(idt,s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the LoopTools E0i function.
+! The first argument is a character of length <= 7
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * idt -- a character of length <= 7, the type of form factors
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * s4 -- a real (type ki), p4^2
+! * s5 -- a real (type ki), p5^2
+! * s12 -- a real (type ki), (p1+p2)^2
+! * s23 -- a real (type ki), (p2+p3)^2
+! * s34 -- a real (type ki), (p3+p4)^2
+! * s45 -- a real (type ki), (p4+p5)^2
+! * s51 -- a real (type ki), (p5+p1)^2
+! * m1 -- a real (type ki), mass^2 of propagator 5
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * m3 -- a real (type ki), mass^2 of propagator 2
+! * m4 -- a real (type ki), mass^2 of propagator 3
+! * m5 -- a real (type ki), mass^2 of propagator 4
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_5p (src/form_factor/form_factor_5p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * tool_lt_to_golem, only : extract (src/interface/tool_lt_to_golem.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function ge0i(idt,s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_5p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use tool_lt_to_golem, only : extract
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ character (len=*), intent (in) :: idt
+ real(ki), intent (in) :: s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: ge0i
+ !
+ integer, dimension(7) :: tab
+ integer :: n1,n2
+ integer, dimension(5) :: temp
+ integer :: j1,j2,j3,j4,j5
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ character (len=7) :: idt_temp
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(5)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s23-m2-m4
+ s_mat(1,4) = s51-m2-m5
+ s_mat(1,5) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s34-m3-m5
+ s_mat(2,5) = s12-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m5
+ s_mat(3,5) = s45-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m5
+ s_mat(4,5) = s5-m1-m5
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ idt_temp = idt ! on complete la chaine entrante par des blancs
+ call extract(idt_temp,tab)
+ n1= count(tab/=-1)
+ n2= count(tab/=-1 .and. tab/=0)
+ !
+ temp = -2
+ temp(1:n1) = pack(tab,tab/=-1)
+ !
+ select case(n1)
+ !
+ case(1)
+ !
+ j1 = temp(1)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = a50(b_null)
+ !
+ case(1)
+ !
+ ff = a51(j1,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = b52(b_null)
+ !
+ case(2)
+ !
+ ff = a52(j1,j2,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ !
+ select case(n2)
+ !
+ case(1)
+ !
+ ff = b53(j3,b_null)
+ !
+ case(3)
+ !
+ ff = a53(j1,j2,j3,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ j4 = temp(4)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = c54(b_null)
+ !
+ case(2)
+ !
+ ff = b54(j3,j4,b_null)
+ !
+ case(4)
+ !
+ ff = a54(j1,j2,j3,j4,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(5)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ j4 = temp(4)
+ j5 = temp(5)
+ !
+ select case(n2)
+ !
+ case(1)
+ !
+ ff = c55(j5,b_null)
+ !
+ case(3)
+ !
+ ff = b55(j3,j4,j5,b_null)
+ !
+ case(5)
+ !
+ ff = a55(j1,j2,j3,j4,j5,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n1 is not correct %d0'
+ tab_erreur_par(2)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! mu2_scale_par contained in basis integrals
+ !ge0i = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ge0i = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! ge0i = ff%b + lmu2*ff%a
+ ge0i = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ ge0i = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0i (ge0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ end function ge0i
+!
+!****f* src/interface/ge0
+! NAME
+!
+! Function ge0
+!
+! USAGE
+!
+! complex = ge0(s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the scalar E0 function.
+! The last two arguments are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * s4 -- a real (type ki), p4^2
+! * s5 -- a real (type ki), p5^2
+! * s12 -- a real (type ki), (p1+p2)^2
+! * s23 -- a real (type ki), (p2+p3)^2
+! * s34 -- a real (type ki), (p3+p4)^2
+! * s45 -- a real (type ki), (p4+p5)^2
+! * s51 -- a real (type ki), (p5+p1)^2
+! * m1 -- a real (type ki), mass^2 of propagator 5
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * m3 -- a real (type ki), mass^2 of propagator 2
+! * m4 -- a real (type ki), mass^2 of propagator 3
+! * m5 -- a real (type ki), mass^2 of propagator 4
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_5p (src/form_factor/form_factor_5p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function ge0(s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_5p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: ge0
+ !
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(5)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s23-m2-m4
+ s_mat(1,4) = s51-m2-m5
+ s_mat(1,5) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s34-m3-m5
+ s_mat(2,5) = s12-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m5
+ s_mat(3,5) = s45-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m5
+ s_mat(4,5) = s5-m1-m5
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ !
+ ff = a50(b_null)
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! ge0 = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ ge0 = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! ge0 = ff%b + lmu2*ff%a
+ ge0 = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ ge0 = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge0 (ge0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ !
+end function ge0
Index: 95/branches/golem95_without_olo_cmake/src/interface/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/Makefile.am (revision 119)
@@ -0,0 +1,26 @@
+noinst_LTLIBRARIES=libgolem95_interface.la
+
+AM_FCFLAGS= \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/form_factor \
+ -I$(top_builddir)/src/integrals/one_point \
+ -I$(top_builddir)/src/integrals/two_point \
+ -I$(top_builddir)/src/integrals/three_point \
+ -I$(top_builddir)/src/integrals/four_point \
+ -I$(top_builddir)/src/numerical
+
+libgolem95_interface_la_SOURCES= \
+ tool_lt_to_golem.f90 tensor_integrals.f90 \
+ gb0.f90 gc0.f90 gd0.f90 ge0.f90 gf0.f90
+
+libgolem95_interface_la_FCFLAGS=$(AM_FCFLAGS)
+nodist_pkginclude_HEADERS= tool_lt_to_golem.mod tensor_integrals.mod
+if COMPILE_TENSREC
+libgolem95_interface_la_SOURCES+=tens_rec.f90 tens_comb.f90
+nodist_pkginclude_HEADERS+=tens_rec.mod tens_comb.mod
+endif
+
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/interface/gf0.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/gf0.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/gf0.f90 (revision 119)
@@ -0,0 +1,462 @@
+!
+!****f* src/interface/gf0i
+! NAME
+!
+! Function gf0i
+!
+! USAGE
+!
+! complex = gf0i(idt,s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the LoopTools F0i function.
+! The first argument is a character of length <= 8
+! There are two arguments more which are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * idt -- a character of length <= 8, the type of form factors
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * s4 -- a real (type ki), p4^2
+! * s5 -- a real (type ki), p5^2
+! * s6 -- a real (type ki), p6^2
+! * s12 -- a real (type ki), (p1+p2)^2
+! * s23 -- a real (type ki), (p2+p3)^2
+! * s34 -- a real (type ki), (p3+p4)^2
+! * s45 -- a real (type ki), (p4+p5)^2
+! * s56 -- a real (type ki), (p5+p6)^2
+! * s61 -- a real (type ki), (p6+p1)^2
+! * s123 -- a real (type ki), (p1+p2+p3)^2
+! * s234 -- a real (type ki), (p2+p3+p4)^2
+! * s345 -- a real (type ki), (p3+p4+p5)^2
+! * m1 -- a real (type ki), mass of propagator 6
+! * m2 -- a real (type ki), mass of propagator 1
+! * m3 -- a real (type ki), mass of propagator 2
+! * m4 -- a real (type ki), mass of propagator 3
+! * m5 -- a real (type ki), mass of propagator 4
+! * m6 -- a real (type ki), mass of propagator 5
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_6p (src/form_factor/form_factor_6p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * tool_lt_to_golem, only : extract (src/interface/tool_lt_to_golem.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gf0i(idt,s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_6p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use tool_lt_to_golem, only : extract
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ character (len=*), intent (in) :: idt
+ real(ki), intent (in) :: s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s234,s345,s123,m1,m2,m3,m4,m5,m6,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gf0i
+ !
+ integer, dimension(8) :: tab
+ integer :: n1,n2
+ integer, dimension(6) :: temp
+ integer :: j1,j2,j3,j4,j5,j6
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ character (len=8) :: idt_temp
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(6)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s23-m2-m4
+ s_mat(1,4) = s123-m2-m5
+ s_mat(1,5) = s61-m2-m6
+ s_mat(1,6) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s34-m3-m5
+ s_mat(2,5) = s234-m3-m6
+ s_mat(2,6) = s12-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m5
+ s_mat(3,5) = s45-m4-m6
+ s_mat(3,6) = s345-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m5
+ s_mat(4,5) = s5-m5-m6
+ s_mat(4,6) = s56-m5-m1
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = -2._ki*m6
+ s_mat(5,6) = s6-m6-m1
+ !
+ s_mat(6,1) = s_mat(1,6)
+ s_mat(6,2) = s_mat(2,6)
+ s_mat(6,3) = s_mat(3,6)
+ s_mat(6,4) = s_mat(4,6)
+ s_mat(6,5) = s_mat(5,6)
+ s_mat(6,6) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ idt_temp = idt ! on complete la chaine entrante par des blancs
+ call extract(idt_temp,tab)
+ n1= count(tab/=-1)
+ n2= count(tab/=-1 .and. tab/=0)
+ !
+ temp = -2
+ temp(1:n1) = pack(tab,tab/=-1)
+ !
+ select case(n1)
+ !
+ case(1)
+ !
+ j1 = temp(1)
+ !
+ select case(n2)
+ !
+ case(0)
+ !
+ ff = a60(b_null)
+ !
+ case(1)
+ !
+ ff = a61(j1,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gf0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n2 %d0'
+ tab_erreur_par(2)%arg_int = n2
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'is not compatible with n1 %d0'
+ tab_erreur_par(3)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ !
+ ff = a62(j1,j2,b_null)
+ !
+ case(3)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ !
+ ff = a63(j1,j2,j3,b_null)
+ !
+ case(4)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ j4 = temp(4)
+ !
+ ff = a64(j1,j2,j3,j4,b_null)
+ !
+ case(5)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ j4 = temp(4)
+ j5 = temp(5)
+ !
+ ff = a65(j1,j2,j3,j4,j5,b_null)
+ !
+ case(6)
+ !
+ j1 = temp(1)
+ j2 = temp(2)
+ j3 = temp(3)
+ j4 = temp(4)
+ j5 = temp(5)
+ j6 = temp(6)
+ !
+ ff = a66(j1,j2,j3,j4,j5,j6,b_null)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gf0i (lt_to_golem.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The value of n1 is not correct %d0'
+ tab_erreur_par(2)%arg_int = n1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! gf0i = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ gf0i = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gf0i = ff%b + lmu2*ff%a
+ gf0i = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gf0i = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gf0i (gf0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ end function gf0i
+!
+!
+!****f* src/interface/gf0
+! NAME
+!
+! Function gf0
+!
+! USAGE
+!
+! complex = gf0(s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,eps_flag)
+!
+! DESCRIPTION
+!
+! This function is the scalar F0 function.
+! The last two arguments are the renormalisation
+! scale squared and a flag which selects the coefficient of
+! the Laurent series in epsilon
+!
+! INPUTS
+!
+! * s1 -- a real (type ki), p1^2
+! * s2 -- a real (type ki), p2^2
+! * s3 -- a real (type ki), p3^2
+! * s4 -- a real (type ki), p4^2
+! * s5 -- a real (type ki), p5^2
+! * s6 -- a real (type ki), p6^2
+! * s12 -- a real (type ki), (p1+p2)^2
+! * s23 -- a real (type ki), (p2+p3)^2
+! * s34 -- a real (type ki), (p3+p4)^2
+! * s45 -- a real (type ki), (p4+p5)^2
+! * s56 -- a real (type ki), (p5+p6)^2
+! * s61 -- a real (type ki), (p6+p1)^2
+! * s123 -- a real (type ki), (p1+p2+p3)^2
+! * s234 -- a real (type ki), (p2+p3+p4)^2
+! * s345 -- a real (type ki), (p3+p4+p5)^2
+! * m1 -- a real (type ki), mass^2 of propagator 6
+! * m2 -- a real (type ki), mass^2 of propagator 1
+! * m3 -- a real (type ki), mass^2 of propagator 2
+! * m4 -- a real (type ki), mass^2 of propagator 3
+! * m5 -- a real (type ki), mass^2 of propagator 4
+! * m6 -- a real (type ki), mass^2 of propagator 5
+! * mu2 -- a real (type ki), renormalisation scale squared
+! * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! It returns a complex (type ki) corresponding
+! to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+! the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+! imaginary part of the constant term (eps_flag=0).
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/matrice_s.f90)
+! * form_factor_type, only: form_factor (src/module/form_factor_type.f90)
+! * form_factor_6p (src/form_factor/form_factor_6p.f90)
+! * cache, only: allocate_cache, clear_cache (src/module/cache.f90)
+! * constante, only : b_null (src/module/constante.f90)
+! * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/sortie_erreur.f90)
+!
+!
+! EXAMPLE
+!
+!
+!
+!*****
+function gf0(s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,eps_flag)
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_6p ! module containing the four-point form factors (export all)
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: b_null
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s234,s345,s123,m1,m2,m3,m4,m5,m6,mu2
+ integer, intent(in) :: eps_flag
+ complex(ki) :: gf0
+ !
+ type(form_factor) :: ff
+ real(ki) :: lmu2,mu2store
+ !
+ mu2store=mu2_scale_par
+ mu2_scale_par=mu2
+ !
+ call initgolem95(6)
+ !
+ !
+ s_mat(1,1) = -2._ki*m2
+ s_mat(1,2) = s2-m2-m3
+ s_mat(1,3) = s23-m2-m4
+ s_mat(1,4) = s123-m2-m5
+ s_mat(1,5) = s61-m2-m6
+ s_mat(1,6) = s1-m1-m2
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m3
+ s_mat(2,3) = s3-m3-m4
+ s_mat(2,4) = s34-m3-m5
+ s_mat(2,5) = s234-m3-m6
+ s_mat(2,6) = s12-m3-m1
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m4
+ s_mat(3,4) = s4-m4-m5
+ s_mat(3,5) = s45-m4-m6
+ s_mat(3,6) = s345-m4-m1
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m5
+ s_mat(4,5) = s5-m5-m6
+ s_mat(4,6) = s56-m5-m1
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = -2._ki*m6
+ s_mat(5,6) = s6-m6-m1
+ !
+ s_mat(6,1) = s_mat(1,6)
+ s_mat(6,2) = s_mat(2,6)
+ s_mat(6,3) = s_mat(3,6)
+ s_mat(6,4) = s_mat(4,6)
+ s_mat(6,5) = s_mat(5,6)
+ s_mat(6,6) = -2._ki*m1
+ !
+ call preparesmatrix()
+ !
+ !
+ ff = a60(b_null)
+ !
+ !
+ lmu2 = log(mu2)
+ !
+ if (eps_flag == 0) then
+ !
+ ! expanded scale already contained in basis integrals
+ ! gf0 = ff%c + lmu2*ff%b + lmu2**2*ff%a/2._ki
+ gf0 = ff%c
+ !
+ else if (eps_flag == -1) then
+ !
+ ! gf0 = ff%b + lmu2*ff%a
+ gf0 = ff%b
+ !
+ else if (eps_flag == -2) then
+ !
+ gf0 = ff%a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gf0 (gf0.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'eps_flag should be -2, -1 or 0 but is %d0'
+ tab_erreur_par(2)%arg_int = eps_flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ mu2_scale_par=mu2store
+ !
+ call exitgolem95()
+ !
+ !
+ end function gf0
+
Index: 95/branches/golem95_without_olo_cmake/src/interface/tool_lt_to_golem.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/tool_lt_to_golem.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/tool_lt_to_golem.f90 (revision 119)
@@ -0,0 +1,93 @@
+!
+!****h* src/interface/tool_lt_to_golem
+! NAME
+!
+! Module tool_lt_to_golem
+!
+! USAGE
+!
+! use tool_lt_to_golem
+!
+! DESCRIPTION
+!
+! This module contains one function to build the interface between LoopTools
+! and Golem
+!
+! OUTPUT
+!
+! This module exports one function:
+! * extract -- extract the numbers contained in a string
+!
+! USES
+!
+!
+!
+!*****
+module tool_lt_to_golem
+ !
+ implicit none
+ !
+ private
+ !
+ public :: extract
+ !
+ contains
+ !
+ !****f* src/interface/tool_lt_to_golem/extract
+ ! NAME
+ !
+ ! Subroutine extract
+ !
+ ! USAGE
+ !
+ ! call extract(chaine,tab_int)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine takes a string of characters, extracts the numbers and puts them into an array
+ !
+ ! INPUTS
+ !
+ ! * chaine -- a character of unknown length
+ ! * tab_int -- an integer array of rank 1 whose extend is length(chaine),
+ ! it is filled with -1
+ !
+ ! SIDE EFFECTS
+ !
+ ! no side effect
+ !
+ ! RETURN VALUE
+ !
+ ! it returns an integer array of rank 1
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine extract(chaine,tab_int)
+ !
+ character (len=*), intent (in) :: chaine
+ integer, dimension(len(chaine)) :: tab_int
+ !
+ integer :: i
+ character (len=10) :: chiffre = '0123456789'
+ character (len=1) :: c
+ !
+ tab_int = -1
+ !
+ do i=1, len(chaine)
+ !
+ c = chaine(i:i+1)
+ !
+ if (verify(c,chiffre) == 0) then
+ !
+ tab_int(i) = iachar(c) - 48
+ !
+ end if
+ !
+ end do
+ !
+ end subroutine extract
+ !
+end module tool_lt_to_golem
Index: 95/branches/golem95_without_olo_cmake/src/interface/tens_rec.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/tens_rec.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/tens_rec.f90 (revision 119)
@@ -0,0 +1,6177 @@
+!****h* src/interface/tens_rec
+! NAME
+!
+! Module tens_rec
+!
+! USAGE
+!
+! use tens_rec
+!
+! DESCRIPTION
+!
+! This module offers the possibility of reconstructing the tensor
+! coefficients that have to be contracted with tensor integrals in
+! order to reproduce a diagram, which has been specified by a set
+! of denominators and a numerator N(q, mu^2). This module is typically
+! used in connection with the module tens_comb.
+!
+! Please, note that this module is generated by a script and should not
+! be modified manually. In order to make changes to this module rerun
+! the Python script
+!
+! tool/tens_rec/tens.py
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+module tens_rec
+use precision_golem, only: ki
+implicit none
+private :: ki
+real(ki), dimension(0:3), parameter, private :: null_vec = &
+ & (/0.0_ki,0.0_ki,0.0_ki,0.0_ki/)
+real(ki), dimension(1,1), parameter, private :: mat1_1 = &
+& reshape((/&
+&1.0_ki/3.0_ki/),&
+& (/1,1/), order=(/2,1/))
+real(ki), dimension(1,1), parameter, private :: q1_1 = &
+& reshape((/&
+&3.0_ki/),&
+& (/1,1/), order=(/2,1/))
+real(ki), dimension(2,2), parameter, private :: mat2_1 = &
+& reshape((/&
+&5.0_ki/6.0_ki,-3.0_ki/10.0_ki,-1.0_ki/6.0_ki,1.0_ki/10.0_ki/),&
+& (/2,2/), order=(/2,1/))
+real(ki), dimension(2,1), parameter, private :: q2_1 = &
+& reshape((/&
+&3.0_ki,5.0_ki/),&
+& (/2,1/), order=(/2,1/))
+real(ki), dimension(1,1), parameter, private :: mat2_2 = &
+& reshape((/&
+&1.0_ki/9.0_ki/),&
+& (/1,1/), order=(/2,1/))
+real(ki), dimension(1,2), parameter, private :: q2_2 = &
+& reshape((/&
+&3.0_ki,3.0_ki/),&
+& (/1,2/), order=(/2,1/))
+real(ki), dimension(3,3), parameter, private :: mat3_1 = &
+& reshape((/&
+&35.0_ki/24.0_ki,-21.0_ki/20.0_ki,15.0_ki/56.0_ki,-1.0_ki/2.0_ki,1.0_ki/2.0_ki, &
+&-1.0_ki/7.0_ki,1.0_ki/24.0_ki,-1.0_ki/20.0_ki,1.0_ki/56.0_ki/),&
+& (/3,3/), order=(/2,1/))
+real(ki), dimension(3,1), parameter, private :: q3_1 = &
+& reshape((/&
+&3.0_ki,5.0_ki,7.0_ki/),&
+& (/3,1/), order=(/2,1/))
+real(ki), dimension(3,3), parameter, private :: mat3_2 = &
+& reshape((/&
+&4.0_ki/9.0_ki,-1.0_ki/10.0_ki,-1.0_ki/10.0_ki,-1.0_ki/18.0_ki,1.0_ki/30.0_ki, &
+&0.0_ki,-1.0_ki/18.0_ki,0.0_ki,1.0_ki/30.0_ki/),&
+& (/3,3/), order=(/2,1/))
+real(ki), dimension(3,2), parameter, private :: q3_2 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki/),&
+& (/3,2/), order=(/2,1/))
+real(ki), dimension(1,1), parameter, private :: mat3_3 = &
+& reshape((/&
+&1.0_ki/27.0_ki/),&
+& (/1,1/), order=(/2,1/))
+real(ki), dimension(1,3), parameter, private :: q3_3 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki/),&
+& (/1,3/), order=(/2,1/))
+real(ki), dimension(4,4), parameter, private :: mat4_1 = &
+& reshape((/&
+&385.0_ki/192.0_ki,-77.0_ki/40.0_ki,165.0_ki/224.0_ki,-35.0_ki/704.0_ki, &
+&-167.0_ki/192.0_ki,131.0_ki/120.0_ki,-103.0_ki/224.0_ki,71.0_ki/2112.0_ki, &
+&23.0_ki/192.0_ki,-7.0_ki/40.0_ki,19.0_ki/224.0_ki,-5.0_ki/704.0_ki, &
+&-1.0_ki/192.0_ki,1.0_ki/120.0_ki,-1.0_ki/224.0_ki,1.0_ki/2112.0_ki/),&
+& (/4,4/), order=(/2,1/))
+real(ki), dimension(4,1), parameter, private :: q4_1 = &
+& reshape((/&
+&3.0_ki,5.0_ki,7.0_ki,11.0_ki/),&
+& (/4,1/), order=(/2,1/))
+real(ki), dimension(6,6), parameter, private :: mat4_2 = &
+& reshape((/&
+&10.0_ki/9.0_ki,-1.0_ki/2.0_ki,5.0_ki/56.0_ki,-1.0_ki/2.0_ki,9.0_ki/100.0_ki, &
+&5.0_ki/56.0_ki,-1.0_ki/4.0_ki,13.0_ki/60.0_ki,-1.0_ki/21.0_ki,1.0_ki/20.0_ki, &
+&-3.0_ki/100.0_ki,0.0_ki,1.0_ki/72.0_ki,-1.0_ki/60.0_ki,1.0_ki/168.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,-1.0_ki/4.0_ki,1.0_ki/20.0_ki,0.0_ki,13.0_ki/60.0_ki, &
+&-3.0_ki/100.0_ki,-1.0_ki/21.0_ki,1.0_ki/36.0_ki,-1.0_ki/60.0_ki,0.0_ki, &
+&-1.0_ki/60.0_ki,1.0_ki/100.0_ki,0.0_ki,1.0_ki/72.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/60.0_ki,0.0_ki,1.0_ki/168.0_ki/),&
+& (/6,6/), order=(/2,1/))
+real(ki), dimension(6,2), parameter, private :: q4_2 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,7.0_ki,5.0_ki,3.0_ki,5.0_ki,5.0_ki,7.0_ki, &
+&3.0_ki/),&
+& (/6,2/), order=(/2,1/))
+real(ki), dimension(4,4), parameter, private :: mat4_3 = &
+& reshape((/&
+&11.0_ki/54.0_ki,-1.0_ki/30.0_ki,-1.0_ki/30.0_ki,-1.0_ki/30.0_ki, &
+&-1.0_ki/54.0_ki,1.0_ki/90.0_ki,0.0_ki,0.0_ki,-1.0_ki/54.0_ki,0.0_ki, &
+&1.0_ki/90.0_ki,0.0_ki,-1.0_ki/54.0_ki,0.0_ki,0.0_ki,1.0_ki/90.0_ki/),&
+& (/4,4/), order=(/2,1/))
+real(ki), dimension(4,3), parameter, private :: q4_3 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,5.0_ki,3.0_ki,5.0_ki,3.0_ki, &
+&3.0_ki/),&
+& (/4,3/), order=(/2,1/))
+real(ki), dimension(1,1), parameter, private :: mat4_4 = &
+& reshape((/&
+&1.0_ki/81.0_ki/),&
+& (/1,1/), order=(/2,1/))
+real(ki), dimension(1,4), parameter, private :: q4_4 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,3.0_ki/),&
+& (/1,4/), order=(/2,1/))
+real(ki), dimension(5,5), parameter, private :: mat5_1 = &
+& reshape((/&
+&1001.0_ki/384.0_ki,-1001.0_ki/320.0_ki,715.0_ki/448.0_ki,-455.0_ki/1408.0_ki, &
+&77.0_ki/832.0_ki,-213.0_ki/160.0_ki,967.0_ki/480.0_ki,-47.0_ki/42.0_ki, &
+&257.0_ki/1056.0_ki,-443.0_ki/6240.0_ki,233.0_ki/960.0_ki,-101.0_ki/240.0_ki, &
+&25.0_ki/96.0_ki,-133.0_ki/2112.0_ki,59.0_ki/3120.0_ki,-3.0_ki/160.0_ki, &
+&17.0_ki/480.0_ki,-1.0_ki/42.0_ki,7.0_ki/1056.0_ki,-1.0_ki/480.0_ki, &
+&1.0_ki/1920.0_ki,-1.0_ki/960.0_ki,1.0_ki/1344.0_ki,-1.0_ki/4224.0_ki, &
+&1.0_ki/12480.0_ki/),&
+& (/5,5/), order=(/2,1/))
+real(ki), dimension(5,1), parameter, private :: q5_1 = &
+& reshape((/&
+&3.0_ki,5.0_ki,7.0_ki,11.0_ki,13.0_ki/),&
+& (/5,1/), order=(/2,1/))
+real(ki), dimension(10,10), parameter, private :: mat5_2 = &
+& reshape((/&
+&605.0_ki/288.0_ki,-65.0_ki/48.0_ki,85.0_ki/224.0_ki,-35.0_ki/2112.0_ki, &
+&-65.0_ki/48.0_ki,27.0_ki/50.0_ki,-9.0_ki/112.0_ki,85.0_ki/224.0_ki, &
+&-9.0_ki/112.0_ki,-35.0_ki/2112.0_ki,-371.0_ki/576.0_ki,487.0_ki/720.0_ki, &
+&-151.0_ki/672.0_ki,71.0_ki/6336.0_ki,11.0_ki/40.0_ki,-9.0_ki/40.0_ki, &
+&3.0_ki/70.0_ki,-5.0_ki/112.0_ki,3.0_ki/112.0_ki,0.0_ki,35.0_ki/576.0_ki, &
+&-1.0_ki/12.0_ki,25.0_ki/672.0_ki,-5.0_ki/2112.0_ki,-1.0_ki/80.0_ki, &
+&3.0_ki/200.0_ki,-3.0_ki/560.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/576.0_ki, &
+&1.0_ki/360.0_ki,-1.0_ki/672.0_ki,1.0_ki/6336.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,-371.0_ki/576.0_ki,11.0_ki/40.0_ki,-5.0_ki/112.0_ki,0.0_ki, &
+&487.0_ki/720.0_ki,-9.0_ki/40.0_ki,3.0_ki/112.0_ki,-151.0_ki/672.0_ki, &
+&3.0_ki/70.0_ki,71.0_ki/6336.0_ki,5.0_ki/36.0_ki,-7.0_ki/60.0_ki, &
+&1.0_ki/42.0_ki,0.0_ki,-7.0_ki/60.0_ki,9.0_ki/100.0_ki,-1.0_ki/70.0_ki, &
+&1.0_ki/42.0_ki,-1.0_ki/70.0_ki,0.0_ki,-1.0_ki/144.0_ki,1.0_ki/120.0_ki, &
+&-1.0_ki/336.0_ki,0.0_ki,1.0_ki/240.0_ki,-1.0_ki/200.0_ki,1.0_ki/560.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,35.0_ki/576.0_ki,-1.0_ki/80.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/12.0_ki,3.0_ki/200.0_ki,0.0_ki,25.0_ki/672.0_ki,-3.0_ki/560.0_ki, &
+&-5.0_ki/2112.0_ki,-1.0_ki/144.0_ki,1.0_ki/240.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/120.0_ki,-1.0_ki/200.0_ki,0.0_ki,-1.0_ki/336.0_ki,1.0_ki/560.0_ki, &
+&0.0_ki,-1.0_ki/576.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/672.0_ki,0.0_ki,1.0_ki/6336.0_ki/),&
+& (/10,10/), order=(/2,1/))
+real(ki), dimension(10,2), parameter, private :: q5_2 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,7.0_ki,3.0_ki,11.0_ki,5.0_ki,3.0_ki,5.0_ki, &
+&5.0_ki,5.0_ki,7.0_ki,7.0_ki,3.0_ki,7.0_ki,5.0_ki,11.0_ki,3.0_ki/),&
+& (/10,2/), order=(/2,1/))
+real(ki), dimension(10,10), parameter, private :: mat5_3 = &
+& reshape((/&
+&143.0_ki/216.0_ki,-13.0_ki/60.0_ki,5.0_ki/168.0_ki,-13.0_ki/60.0_ki, &
+&3.0_ki/100.0_ki,5.0_ki/168.0_ki,-13.0_ki/60.0_ki,3.0_ki/100.0_ki, &
+&3.0_ki/100.0_ki,5.0_ki/168.0_ki,-1.0_ki/9.0_ki,4.0_ki/45.0_ki,-1.0_ki/63.0_ki, &
+&1.0_ki/60.0_ki,-1.0_ki/100.0_ki,0.0_ki,1.0_ki/60.0_ki,-1.0_ki/100.0_ki,0.0_ki, &
+&0.0_ki,1.0_ki/216.0_ki,-1.0_ki/180.0_ki,1.0_ki/504.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/9.0_ki,1.0_ki/60.0_ki,0.0_ki, &
+&4.0_ki/45.0_ki,-1.0_ki/100.0_ki,-1.0_ki/63.0_ki,1.0_ki/60.0_ki,0.0_ki, &
+&-1.0_ki/100.0_ki,0.0_ki,1.0_ki/108.0_ki,-1.0_ki/180.0_ki,0.0_ki, &
+&-1.0_ki/180.0_ki,1.0_ki/300.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/216.0_ki,0.0_ki,0.0_ki,-1.0_ki/180.0_ki,0.0_ki,1.0_ki/504.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,-1.0_ki/9.0_ki,1.0_ki/60.0_ki,0.0_ki,1.0_ki/60.0_ki, &
+&0.0_ki,0.0_ki,4.0_ki/45.0_ki,-1.0_ki/100.0_ki,-1.0_ki/100.0_ki, &
+&-1.0_ki/63.0_ki,1.0_ki/108.0_ki,-1.0_ki/180.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/180.0_ki,1.0_ki/300.0_ki,0.0_ki,0.0_ki,1.0_ki/108.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/180.0_ki,0.0_ki,0.0_ki,-1.0_ki/180.0_ki,0.0_ki,1.0_ki/300.0_ki,0.0_ki, &
+&1.0_ki/216.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/180.0_ki,0.0_ki, &
+&0.0_ki,1.0_ki/504.0_ki/),&
+& (/10,10/), order=(/2,1/))
+real(ki), dimension(10,3), parameter, private :: q5_3 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,7.0_ki,3.0_ki,5.0_ki, &
+&3.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki,7.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,5.0_ki, &
+&3.0_ki,5.0_ki,5.0_ki,5.0_ki,3.0_ki,7.0_ki,3.0_ki,3.0_ki/),&
+& (/10,3/), order=(/2,1/))
+real(ki), dimension(5,5), parameter, private :: mat5_4 = &
+& reshape((/&
+&7.0_ki/81.0_ki,-1.0_ki/90.0_ki,-1.0_ki/90.0_ki,-1.0_ki/90.0_ki, &
+&-1.0_ki/90.0_ki,-1.0_ki/162.0_ki,1.0_ki/270.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/162.0_ki,0.0_ki,1.0_ki/270.0_ki,0.0_ki,0.0_ki,-1.0_ki/162.0_ki,0.0_ki, &
+&0.0_ki,1.0_ki/270.0_ki,0.0_ki,-1.0_ki/162.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/270.0_ki/),&
+& (/5,5/), order=(/2,1/))
+real(ki), dimension(5,4), parameter, private :: q5_4 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,5.0_ki, &
+&3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,3.0_ki/),&
+& (/5,4/), order=(/2,1/))
+real(ki), dimension(6,6), parameter, private :: mat6_1 = &
+& reshape((/&
+&2431.0_ki/768.0_ki,-17017.0_ki/3840.0_ki,2431.0_ki/896.0_ki, &
+&-7735.0_ki/8448.0_ki,1309.0_ki/3328.0_ki,-143.0_ki/6528.0_ki, &
+&-48457.0_ki/26880.0_ki,35881.0_ki/11520.0_ki,-3959.0_ki/1920.0_ki, &
+&18841.0_ki/25344.0_ki,-16217.0_ki/49920.0_ki,12673.0_ki/685440.0_ki, &
+&5239.0_ki/13440.0_ki,-489.0_ki/640.0_ki,3727.0_ki/6720.0_ki, &
+&-925.0_ki/4224.0_ki,2449.0_ki/24960.0_ki,-659.0_ki/114240.0_ki, &
+&-77.0_ki/1920.0_ki,491.0_ki/5760.0_ki,-149.0_ki/2240.0_ki,371.0_ki/12672.0_ki, &
+&-113.0_ki/8320.0_ki,41.0_ki/48960.0_ki,53.0_ki/26880.0_ki,-17.0_ki/3840.0_ki, &
+&7.0_ki/1920.0_ki,-5.0_ki/2816.0_ki,43.0_ki/49920.0_ki,-13.0_ki/228480.0_ki, &
+&-1.0_ki/26880.0_ki,1.0_ki/11520.0_ki,-1.0_ki/13440.0_ki,1.0_ki/25344.0_ki, &
+&-1.0_ki/49920.0_ki,1.0_ki/685440.0_ki/),&
+& (/6,6/), order=(/2,1/))
+real(ki), dimension(6,1), parameter, private :: q6_1 = &
+& reshape((/&
+&3.0_ki,5.0_ki,7.0_ki,11.0_ki,13.0_ki,17.0_ki/),&
+& (/6,1/), order=(/2,1/))
+real(ki), dimension(15,15), parameter, private :: mat6_2 = &
+& reshape((/&
+&1981.0_ki/576.0_ki,-1085.0_ki/384.0_ki,205.0_ki/192.0_ki,-35.0_ki/264.0_ki, &
+&77.0_ki/2496.0_ki,-1085.0_ki/384.0_ki,651.0_ki/400.0_ki,-27.0_ki/64.0_ki, &
+&21.0_ki/1408.0_ki,205.0_ki/192.0_ki,-27.0_ki/64.0_ki,225.0_ki/3136.0_ki, &
+&-35.0_ki/264.0_ki,21.0_ki/1408.0_ki,77.0_ki/2496.0_ki,-1231.0_ki/960.0_ki, &
+&9127.0_ki/5760.0_ki,-2791.0_ki/4032.0_ki,1241.0_ki/12672.0_ki, &
+&-443.0_ki/18720.0_ki,1501.0_ki/1920.0_ki,-79.0_ki/100.0_ki,549.0_ki/2240.0_ki, &
+&-71.0_ki/7040.0_ki,-95.0_ki/448.0_ki,81.0_ki/448.0_ki,-15.0_ki/392.0_ki, &
+&35.0_ki/4224.0_ki,-7.0_ki/1408.0_ki,0.0_ki,961.0_ki/5760.0_ki, &
+&-373.0_ki/1440.0_ki,283.0_ki/2016.0_ki,-311.0_ki/12672.0_ki,59.0_ki/9360.0_ki, &
+&-43.0_ki/640.0_ki,9.0_ki/100.0_ki,-87.0_ki/2240.0_ki,3.0_ki/1408.0_ki, &
+&5.0_ki/448.0_ki,-3.0_ki/224.0_ki,15.0_ki/3136.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-17.0_ki/1920.0_ki,23.0_ki/1440.0_ki,-41.0_ki/4032.0_ki,31.0_ki/12672.0_ki, &
+&-1.0_ki/1440.0_ki,1.0_ki/640.0_ki,-1.0_ki/400.0_ki,3.0_ki/2240.0_ki, &
+&-1.0_ki/7040.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/5760.0_ki, &
+&-1.0_ki/2880.0_ki,1.0_ki/4032.0_ki,-1.0_ki/12672.0_ki,1.0_ki/37440.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1231.0_ki/960.0_ki,1501.0_ki/1920.0_ki,-95.0_ki/448.0_ki,35.0_ki/4224.0_ki, &
+&0.0_ki,9127.0_ki/5760.0_ki,-79.0_ki/100.0_ki,81.0_ki/448.0_ki, &
+&-7.0_ki/1408.0_ki,-2791.0_ki/4032.0_ki,549.0_ki/2240.0_ki,-15.0_ki/392.0_ki, &
+&1241.0_ki/12672.0_ki,-71.0_ki/7040.0_ki,-443.0_ki/18720.0_ki, &
+&215.0_ki/576.0_ki,-2221.0_ki/5760.0_ki,167.0_ki/1344.0_ki,-71.0_ki/12672.0_ki, &
+&0.0_ki,-2221.0_ki/5760.0_ki,221.0_ki/600.0_ki,-33.0_ki/320.0_ki, &
+&71.0_ki/21120.0_ki,167.0_ki/1344.0_ki,-33.0_ki/320.0_ki,1.0_ki/49.0_ki, &
+&-71.0_ki/12672.0_ki,71.0_ki/21120.0_ki,0.0_ki,-13.0_ki/384.0_ki, &
+&11.0_ki/240.0_ki,-9.0_ki/448.0_ki,5.0_ki/4224.0_ki,0.0_ki,11.0_ki/384.0_ki, &
+&-3.0_ki/80.0_ki,1.0_ki/64.0_ki,-1.0_ki/1408.0_ki,-1.0_ki/168.0_ki, &
+&1.0_ki/140.0_ki,-1.0_ki/392.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/1152.0_ki, &
+&-1.0_ki/720.0_ki,1.0_ki/1344.0_ki,-1.0_ki/12672.0_ki,0.0_ki,-1.0_ki/1920.0_ki, &
+&1.0_ki/1200.0_ki,-1.0_ki/2240.0_ki,1.0_ki/21120.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,961.0_ki/5760.0_ki,-43.0_ki/640.0_ki,5.0_ki/448.0_ki, &
+&0.0_ki,0.0_ki,-373.0_ki/1440.0_ki,9.0_ki/100.0_ki,-3.0_ki/224.0_ki,0.0_ki, &
+&283.0_ki/2016.0_ki,-87.0_ki/2240.0_ki,15.0_ki/3136.0_ki,-311.0_ki/12672.0_ki, &
+&3.0_ki/1408.0_ki,59.0_ki/9360.0_ki,-13.0_ki/384.0_ki,11.0_ki/384.0_ki, &
+&-1.0_ki/168.0_ki,0.0_ki,0.0_ki,11.0_ki/240.0_ki,-3.0_ki/80.0_ki, &
+&1.0_ki/140.0_ki,0.0_ki,-9.0_ki/448.0_ki,1.0_ki/64.0_ki,-1.0_ki/392.0_ki, &
+&5.0_ki/4224.0_ki,-1.0_ki/1408.0_ki,0.0_ki,1.0_ki/576.0_ki,-1.0_ki/480.0_ki, &
+&1.0_ki/1344.0_ki,0.0_ki,0.0_ki,-1.0_ki/480.0_ki,1.0_ki/400.0_ki, &
+&-1.0_ki/1120.0_ki,0.0_ki,1.0_ki/1344.0_ki,-1.0_ki/1120.0_ki,1.0_ki/3136.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,-17.0_ki/1920.0_ki,1.0_ki/640.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&23.0_ki/1440.0_ki,-1.0_ki/400.0_ki,0.0_ki,0.0_ki,-41.0_ki/4032.0_ki, &
+&3.0_ki/2240.0_ki,0.0_ki,31.0_ki/12672.0_ki,-1.0_ki/7040.0_ki, &
+&-1.0_ki/1440.0_ki,1.0_ki/1152.0_ki,-1.0_ki/1920.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/720.0_ki,1.0_ki/1200.0_ki,0.0_ki,0.0_ki,1.0_ki/1344.0_ki, &
+&-1.0_ki/2240.0_ki,0.0_ki,-1.0_ki/12672.0_ki,1.0_ki/21120.0_ki,0.0_ki, &
+&1.0_ki/5760.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/2880.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,1.0_ki/4032.0_ki,0.0_ki,0.0_ki,-1.0_ki/12672.0_ki,0.0_ki, &
+&1.0_ki/37440.0_ki/),&
+& (/15,15/), order=(/2,1/))
+real(ki), dimension(15,2), parameter, private :: q6_2 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,7.0_ki,3.0_ki,11.0_ki,3.0_ki,13.0_ki, &
+&5.0_ki,3.0_ki,5.0_ki,5.0_ki,5.0_ki,7.0_ki,5.0_ki,11.0_ki,7.0_ki,3.0_ki,7.0_ki, &
+&5.0_ki,7.0_ki,7.0_ki,11.0_ki,3.0_ki,11.0_ki,5.0_ki,13.0_ki,3.0_ki/),&
+& (/15,2/), order=(/2,1/))
+real(ki), dimension(20,20), parameter, private :: mat6_3 = &
+& reshape((/&
+&2755.0_ki/1728.0_ki,-55.0_ki/72.0_ki,115.0_ki/672.0_ki,-35.0_ki/6336.0_ki, &
+&-55.0_ki/72.0_ki,9.0_ki/40.0_ki,-3.0_ki/112.0_ki,115.0_ki/672.0_ki, &
+&-3.0_ki/112.0_ki,-35.0_ki/6336.0_ki,-55.0_ki/72.0_ki,9.0_ki/40.0_ki, &
+&-3.0_ki/112.0_ki,9.0_ki/40.0_ki,-27.0_ki/1000.0_ki,-3.0_ki/112.0_ki, &
+&115.0_ki/672.0_ki,-3.0_ki/112.0_ki,-3.0_ki/112.0_ki,-35.0_ki/6336.0_ki, &
+&-647.0_ki/1728.0_ki,383.0_ki/1080.0_ki,-199.0_ki/2016.0_ki,71.0_ki/19008.0_ki, &
+&7.0_ki/60.0_ki,-9.0_ki/100.0_ki,1.0_ki/70.0_ki,-5.0_ki/336.0_ki, &
+&1.0_ki/112.0_ki,0.0_ki,7.0_ki/60.0_ki,-9.0_ki/100.0_ki,1.0_ki/70.0_ki, &
+&-3.0_ki/200.0_ki,9.0_ki/1000.0_ki,0.0_ki,-5.0_ki/336.0_ki,1.0_ki/112.0_ki, &
+&0.0_ki,0.0_ki,47.0_ki/1728.0_ki,-13.0_ki/360.0_ki,31.0_ki/2016.0_ki, &
+&-5.0_ki/6336.0_ki,-1.0_ki/240.0_ki,1.0_ki/200.0_ki,-1.0_ki/560.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,-1.0_ki/240.0_ki,1.0_ki/200.0_ki,-1.0_ki/560.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/1728.0_ki,1.0_ki/1080.0_ki, &
+&-1.0_ki/2016.0_ki,1.0_ki/19008.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-647.0_ki/1728.0_ki,7.0_ki/60.0_ki,-5.0_ki/336.0_ki,0.0_ki,383.0_ki/1080.0_ki, &
+&-9.0_ki/100.0_ki,1.0_ki/112.0_ki,-199.0_ki/2016.0_ki,1.0_ki/70.0_ki, &
+&71.0_ki/19008.0_ki,7.0_ki/60.0_ki,-3.0_ki/200.0_ki,0.0_ki,-9.0_ki/100.0_ki, &
+&9.0_ki/1000.0_ki,1.0_ki/70.0_ki,-5.0_ki/336.0_ki,0.0_ki,1.0_ki/112.0_ki, &
+&0.0_ki,13.0_ki/216.0_ki,-17.0_ki/360.0_ki,1.0_ki/126.0_ki,0.0_ki, &
+&-17.0_ki/360.0_ki,7.0_ki/200.0_ki,-1.0_ki/210.0_ki,1.0_ki/126.0_ki, &
+&-1.0_ki/210.0_ki,0.0_ki,-1.0_ki/120.0_ki,1.0_ki/200.0_ki,0.0_ki, &
+&1.0_ki/200.0_ki,-3.0_ki/1000.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/432.0_ki,1.0_ki/360.0_ki,-1.0_ki/1008.0_ki,0.0_ki,1.0_ki/720.0_ki, &
+&-1.0_ki/600.0_ki,1.0_ki/1680.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,47.0_ki/1728.0_ki, &
+&-1.0_ki/240.0_ki,0.0_ki,0.0_ki,-13.0_ki/360.0_ki,1.0_ki/200.0_ki,0.0_ki, &
+&31.0_ki/2016.0_ki,-1.0_ki/560.0_ki,-5.0_ki/6336.0_ki,-1.0_ki/240.0_ki,0.0_ki, &
+&0.0_ki,1.0_ki/200.0_ki,0.0_ki,-1.0_ki/560.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/432.0_ki,1.0_ki/720.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki, &
+&-1.0_ki/600.0_ki,0.0_ki,-1.0_ki/1008.0_ki,1.0_ki/1680.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/1728.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/1080.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/2016.0_ki,0.0_ki,1.0_ki/19008.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-647.0_ki/1728.0_ki,7.0_ki/60.0_ki, &
+&-5.0_ki/336.0_ki,0.0_ki,7.0_ki/60.0_ki,-3.0_ki/200.0_ki,0.0_ki, &
+&-5.0_ki/336.0_ki,0.0_ki,0.0_ki,383.0_ki/1080.0_ki,-9.0_ki/100.0_ki, &
+&1.0_ki/112.0_ki,-9.0_ki/100.0_ki,9.0_ki/1000.0_ki,1.0_ki/112.0_ki, &
+&-199.0_ki/2016.0_ki,1.0_ki/70.0_ki,1.0_ki/70.0_ki,71.0_ki/19008.0_ki, &
+&13.0_ki/216.0_ki,-17.0_ki/360.0_ki,1.0_ki/126.0_ki,0.0_ki,-1.0_ki/120.0_ki, &
+&1.0_ki/200.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-17.0_ki/360.0_ki,7.0_ki/200.0_ki, &
+&-1.0_ki/210.0_ki,1.0_ki/200.0_ki,-3.0_ki/1000.0_ki,0.0_ki,1.0_ki/126.0_ki, &
+&-1.0_ki/210.0_ki,0.0_ki,0.0_ki,-1.0_ki/432.0_ki,1.0_ki/360.0_ki, &
+&-1.0_ki/1008.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/720.0_ki,-1.0_ki/600.0_ki,1.0_ki/1680.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,13.0_ki/216.0_ki,-1.0_ki/120.0_ki,0.0_ki,0.0_ki, &
+&-17.0_ki/360.0_ki,1.0_ki/200.0_ki,0.0_ki,1.0_ki/126.0_ki,0.0_ki,0.0_ki, &
+&-17.0_ki/360.0_ki,1.0_ki/200.0_ki,0.0_ki,7.0_ki/200.0_ki,-3.0_ki/1000.0_ki, &
+&-1.0_ki/210.0_ki,1.0_ki/126.0_ki,0.0_ki,-1.0_ki/210.0_ki,0.0_ki, &
+&-1.0_ki/216.0_ki,1.0_ki/360.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki, &
+&-1.0_ki/600.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki,-1.0_ki/600.0_ki, &
+&0.0_ki,-1.0_ki/600.0_ki,1.0_ki/1000.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/432.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/1008.0_ki,0.0_ki,0.0_ki,1.0_ki/720.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/600.0_ki,0.0_ki,1.0_ki/1680.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&47.0_ki/1728.0_ki,-1.0_ki/240.0_ki,0.0_ki,0.0_ki,-1.0_ki/240.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,-13.0_ki/360.0_ki,1.0_ki/200.0_ki,0.0_ki, &
+&1.0_ki/200.0_ki,0.0_ki,0.0_ki,31.0_ki/2016.0_ki,-1.0_ki/560.0_ki, &
+&-1.0_ki/560.0_ki,-5.0_ki/6336.0_ki,-1.0_ki/432.0_ki,1.0_ki/720.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki, &
+&-1.0_ki/600.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/1008.0_ki, &
+&1.0_ki/1680.0_ki,0.0_ki,0.0_ki,-1.0_ki/432.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/720.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/360.0_ki,0.0_ki, &
+&0.0_ki,-1.0_ki/600.0_ki,0.0_ki,0.0_ki,-1.0_ki/1008.0_ki,0.0_ki, &
+&1.0_ki/1680.0_ki,0.0_ki,-1.0_ki/1728.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/1080.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,-1.0_ki/2016.0_ki,0.0_ki,0.0_ki,1.0_ki/19008.0_ki/),&
+& (/20,20/), order=(/2,1/))
+real(ki), dimension(20,3), parameter, private :: q6_3 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,7.0_ki,3.0_ki,3.0_ki, &
+&11.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki,5.0_ki,7.0_ki,3.0_ki, &
+&7.0_ki,3.0_ki,3.0_ki,7.0_ki,5.0_ki,3.0_ki,11.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki, &
+&5.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki,7.0_ki,5.0_ki,5.0_ki,3.0_ki,5.0_ki,5.0_ki, &
+&5.0_ki,5.0_ki,7.0_ki,3.0_ki,7.0_ki,3.0_ki,3.0_ki,7.0_ki,3.0_ki,5.0_ki,7.0_ki, &
+&5.0_ki,3.0_ki,11.0_ki,3.0_ki,3.0_ki/),&
+& (/20,3/), order=(/2,1/))
+real(ki), dimension(15,15), parameter, private :: mat6_4 = &
+& reshape((/&
+&28.0_ki/81.0_ki,-4.0_ki/45.0_ki,5.0_ki/504.0_ki,-4.0_ki/45.0_ki, &
+&1.0_ki/100.0_ki,5.0_ki/504.0_ki,-4.0_ki/45.0_ki,1.0_ki/100.0_ki, &
+&1.0_ki/100.0_ki,5.0_ki/504.0_ki,-4.0_ki/45.0_ki,1.0_ki/100.0_ki, &
+&1.0_ki/100.0_ki,1.0_ki/100.0_ki,5.0_ki/504.0_ki,-5.0_ki/108.0_ki, &
+&19.0_ki/540.0_ki,-1.0_ki/189.0_ki,1.0_ki/180.0_ki,-1.0_ki/300.0_ki,0.0_ki, &
+&1.0_ki/180.0_ki,-1.0_ki/300.0_ki,0.0_ki,0.0_ki,1.0_ki/180.0_ki, &
+&-1.0_ki/300.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/648.0_ki,-1.0_ki/540.0_ki, &
+&1.0_ki/1512.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,-5.0_ki/108.0_ki,1.0_ki/180.0_ki,0.0_ki, &
+&19.0_ki/540.0_ki,-1.0_ki/300.0_ki,-1.0_ki/189.0_ki,1.0_ki/180.0_ki,0.0_ki, &
+&-1.0_ki/300.0_ki,0.0_ki,1.0_ki/180.0_ki,0.0_ki,-1.0_ki/300.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/324.0_ki,-1.0_ki/540.0_ki,0.0_ki,-1.0_ki/540.0_ki,1.0_ki/900.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/648.0_ki,0.0_ki,0.0_ki,-1.0_ki/540.0_ki,0.0_ki,1.0_ki/1512.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-5.0_ki/108.0_ki, &
+&1.0_ki/180.0_ki,0.0_ki,1.0_ki/180.0_ki,0.0_ki,0.0_ki,19.0_ki/540.0_ki, &
+&-1.0_ki/300.0_ki,-1.0_ki/300.0_ki,-1.0_ki/189.0_ki,1.0_ki/180.0_ki,0.0_ki, &
+&0.0_ki,-1.0_ki/300.0_ki,0.0_ki,1.0_ki/324.0_ki,-1.0_ki/540.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,-1.0_ki/540.0_ki,1.0_ki/900.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,1.0_ki/324.0_ki,0.0_ki,0.0_ki,-1.0_ki/540.0_ki,0.0_ki, &
+&0.0_ki,-1.0_ki/540.0_ki,0.0_ki,1.0_ki/900.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,1.0_ki/648.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/540.0_ki,0.0_ki,0.0_ki,1.0_ki/1512.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&0.0_ki,-5.0_ki/108.0_ki,1.0_ki/180.0_ki,0.0_ki,1.0_ki/180.0_ki,0.0_ki,0.0_ki, &
+&1.0_ki/180.0_ki,0.0_ki,0.0_ki,0.0_ki,19.0_ki/540.0_ki,-1.0_ki/300.0_ki, &
+&-1.0_ki/300.0_ki,-1.0_ki/300.0_ki,-1.0_ki/189.0_ki,1.0_ki/324.0_ki, &
+&-1.0_ki/540.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/540.0_ki,1.0_ki/900.0_ki,0.0_ki,0.0_ki,0.0_ki,1.0_ki/324.0_ki,0.0_ki, &
+&0.0_ki,-1.0_ki/540.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/540.0_ki,0.0_ki,1.0_ki/900.0_ki,0.0_ki,0.0_ki,1.0_ki/324.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/540.0_ki,0.0_ki,0.0_ki,0.0_ki, &
+&-1.0_ki/540.0_ki,0.0_ki,0.0_ki,1.0_ki/900.0_ki,0.0_ki,1.0_ki/648.0_ki,0.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,0.0_ki,-1.0_ki/540.0_ki, &
+&0.0_ki,0.0_ki,0.0_ki,1.0_ki/1512.0_ki/),&
+& (/15,15/), order=(/2,1/))
+real(ki), dimension(15,4), parameter, private :: q6_4 = &
+& reshape((/&
+&3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,3.0_ki, &
+&7.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki,3.0_ki, &
+&7.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,5.0_ki,3.0_ki, &
+&5.0_ki,5.0_ki,3.0_ki,3.0_ki,7.0_ki,3.0_ki,3.0_ki,5.0_ki,3.0_ki,3.0_ki,3.0_ki, &
+&5.0_ki,3.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki,5.0_ki,3.0_ki,5.0_ki,5.0_ki,3.0_ki, &
+&3.0_ki,7.0_ki,3.0_ki,3.0_ki,3.0_ki/),&
+& (/15,4/), order=(/2,1/))
+!****t* src/interface/tens_rec/coeff_type_1
+!
+! NAME
+!
+! Type coeff_type_1
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank 1.
+!
+! ENTRIES
+!
+! * c0, ..., c1 -- coefficients of terms with 0,...,1
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+type coeff_type_1
+ complex(ki) :: c0
+ complex(ki), dimension(4,1) :: c1
+end type coeff_type_1
+!****t* src/interface/tens_rec/coeff_type_2
+!
+! NAME
+!
+! Type coeff_type_2
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank 2.
+!
+! ENTRIES
+!
+! * c0, ..., c2 -- coefficients of terms with 0,...,2
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+type coeff_type_2
+ complex(ki) :: c0
+ complex(ki), dimension(4,2) :: c1
+ complex(ki), dimension(6,1) :: c2
+end type coeff_type_2
+!****t* src/interface/tens_rec/coeff_type_3
+!
+! NAME
+!
+! Type coeff_type_3
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank 3.
+!
+! ENTRIES
+!
+! * c0, ..., c3 -- coefficients of terms with 0,...,3
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+type coeff_type_3
+ complex(ki) :: c0
+ complex(ki), dimension(4,3) :: c1
+ complex(ki), dimension(6,3) :: c2
+ complex(ki), dimension(4,1) :: c3
+end type coeff_type_3
+!****t* src/interface/tens_rec/coeff_type_4
+!
+! NAME
+!
+! Type coeff_type_4
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank 4.
+!
+! ENTRIES
+!
+! * c0, ..., c4 -- coefficients of terms with 0,...,4
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+type coeff_type_4
+ complex(ki) :: c0
+ complex(ki), dimension(4,4) :: c1
+ complex(ki), dimension(6,6) :: c2
+ complex(ki), dimension(4,4) :: c3
+ complex(ki), dimension(1,1) :: c4
+end type coeff_type_4
+!****t* src/interface/tens_rec/coeff_type_5
+!
+! NAME
+!
+! Type coeff_type_5
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank 5.
+!
+! ENTRIES
+!
+! * c0, ..., c4 -- coefficients of terms with 0,...,4
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+type coeff_type_5
+ complex(ki) :: c0
+ complex(ki), dimension(4,5) :: c1
+ complex(ki), dimension(6,10) :: c2
+ complex(ki), dimension(4,10) :: c3
+ complex(ki), dimension(1,5) :: c4
+end type coeff_type_5
+!****t* src/interface/tens_rec/coeff_type_6
+!
+! NAME
+!
+! Type coeff_type_6
+!
+! DESCRIPTION
+!
+! Holds the coefficients of a mixed rank tensor integral with maximum
+! tensor rank 6.
+!
+! ENTRIES
+!
+! * c0, ..., c4 -- coefficients of terms with 0,...,4
+! first index selects non-zero components of q
+! second index selects a specific monomial
+!
+!*****
+type coeff_type_6
+ complex(ki) :: c0
+ complex(ki), dimension(4,6) :: c1
+ complex(ki), dimension(6,15) :: c2
+ complex(ki), dimension(4,20) :: c3
+ complex(ki), dimension(1,15) :: c4
+end type coeff_type_6
+interface print_coeffs
+ module procedure print_coeffs_1
+ module procedure print_coeffs_2
+ module procedure print_coeffs_3
+ module procedure print_coeffs_4
+ module procedure print_coeffs_5
+ module procedure print_coeffs_6
+end interface
+contains
+!****f* src/interface/tens_rec/solve1_1
+! NAME
+!
+! Subroutine solve1_1
+!
+! USAGE
+!
+! call solve1_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q1_1.
+! The matrix mat1_1 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_1 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve1_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(1), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_1), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_3), intent(in), optional :: coeffs2
+ complex(ki), dimension(1) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,1
+ Q(indices(1)) = q1_1(i,1)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval1(Q, coeffs, 0) &
+ & - tenseval3(Q, coeffs2, 1)
+ end do
+ else
+ do i=1,1
+ Q(indices(1)) = q1_1(i,1)
+ xnum(i) = numeval(Q, mu2) - tenseval1(Q, coeffs, 0)
+ end do
+ end if
+ coeffs%c1(idx,:) = matmul(mat1_1,xnum)
+end subroutine solve1_1
+!****f* src/interface/tens_rec/tenseval1_1
+! NAME
+!
+! Function tenseval1_1
+!
+! USAGE
+!
+! result = tenseval1_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval1_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval1_1
+ real(ki) :: q0
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(1)*q0
+ tenseval1_1 = acc
+end function tenseval1_1
+!****f* src/interface/tens_rec/ctenseval1_1
+! NAME
+!
+! Function ctenseval1_1
+!
+! USAGE
+!
+! result = ctenseval1_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval1_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval1_1
+ complex(ki) :: q0
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(1)*q0
+ ctenseval1_1 = acc
+end function ctenseval1_1
+!****f* src/interface/tens_rec/solve1
+! NAME
+!
+! Subroutine solve1
+!
+! USAGE
+!
+! call solve1(numeval, mu2, coeffs, coeffs2)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank 1
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type coeff_type_1 used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve1(numeval, mu2, coeffs, coeffs2)
+ ! generated by: write_subroutine_glob_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), intent(in) :: mu2
+ type(coeff_type_1), intent(inout) :: coeffs
+ type(coeff_type_3), intent(in), optional :: coeffs2
+ if (present(coeffs2)) then
+ coeffs%c0 = numeval(null_vec, mu2) - coeffs2%c0
+ call solve1_1(numeval, (/0/), mu2, coeffs, 1, coeffs2)
+ call solve1_1(numeval, (/1/), mu2, coeffs, 2, coeffs2)
+ call solve1_1(numeval, (/2/), mu2, coeffs, 3, coeffs2)
+ call solve1_1(numeval, (/3/), mu2, coeffs, 4, coeffs2)
+ else
+ coeffs%c0 = numeval((/0.0_ki,0.0_ki,0.0_ki,0.0_ki/), mu2)
+ call solve1_1(numeval, (/0/), mu2, coeffs, 1)
+ call solve1_1(numeval, (/1/), mu2, coeffs, 2)
+ call solve1_1(numeval, (/2/), mu2, coeffs, 3)
+ call solve1_1(numeval, (/3/), mu2, coeffs, 4)
+ end if
+end subroutine solve1
+!****f* src/interface/tens_rec/tenseval1
+! NAME
+!
+! Function tenseval1
+!
+! USAGE
+!
+! result = tenseval1(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_1
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval1(Q, coeffs, max_k)
+ ! generated by: write_function_glob_recon
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_1), intent(in) :: coeffs
+ integer, intent(in), optional :: max_k
+ complex(ki) :: tenseval1
+ integer :: maxk
+ if (present(max_k)) then
+ maxk = max_k
+ else
+ maxk = 1
+ end if
+ tenseval1 = coeffs%c0
+ if (1 .le. maxk) then
+ tenseval1 = tenseval1 + tenseval1_1(Q, (/0/), coeffs%c1(1,:))
+ tenseval1 = tenseval1 + tenseval1_1(Q, (/1/), coeffs%c1(2,:))
+ tenseval1 = tenseval1 + tenseval1_1(Q, (/2/), coeffs%c1(3,:))
+ tenseval1 = tenseval1 + tenseval1_1(Q, (/3/), coeffs%c1(4,:))
+ end if
+end function tenseval1
+!****f* src/interface/tens_rec/ctenseval1
+! NAME
+!
+! Function ctenseval1
+!
+! USAGE
+!
+! result = ctenseval1(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_1
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval1(Q, coeffs)
+ ! generated by: write_function_glob_recon_complex
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_1), intent(in) :: coeffs
+ complex(ki) :: ctenseval1
+ ctenseval1 = coeffs%c0
+ ctenseval1 = ctenseval1 + ctenseval1_1(Q, (/0/), coeffs%c1(1,:))
+ ctenseval1 = ctenseval1 + ctenseval1_1(Q, (/1/), coeffs%c1(2,:))
+ ctenseval1 = ctenseval1 + ctenseval1_1(Q, (/2/), coeffs%c1(3,:))
+ ctenseval1 = ctenseval1 + ctenseval1_1(Q, (/3/), coeffs%c1(4,:))
+end function ctenseval1
+!****f* src/interface/tens_rec/print_coeffs_1
+! NAME
+!
+! Subroutine print_coeffs_1
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank 1
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type coeff_type_1
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine print_coeffs_1(coeffs, unit)
+ ! generated by: write_print_coeffs
+ implicit none
+ type(coeff_type_1), intent(in) :: coeffs
+ integer, intent(in), optional :: unit
+ integer :: ch
+ if (present(unit)) then
+ ch = unit
+ else
+ ch = 6
+ end if
+ write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(1,1), ')*q(0)'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(2,1), ')*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(3,1), ')*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(4,1), ')*q(3)'
+end subroutine print_coeffs_1
+!****f* src/interface/tens_rec/reconstruct1
+! NAME
+!
+! Subroutine reconstruct1
+!
+! USAGE
+!
+! call reconstruct1(numeval, cm0)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank 1,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! In the given case the rank is too low in order to allow for mu2 pieces.
+!
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type coeff_type_1, representing the
+! numerator
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0.
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine reconstruct1(numeval, cm0)
+ ! generated by: write_subroutine_reconstruct_dummy
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ type(coeff_type_1), intent(out) :: cm0
+ call solve1(numeval, 0.0_ki, cm0)
+end subroutine reconstruct1
+!****f* src/interface/tens_rec/solve2_1
+! NAME
+!
+! Subroutine solve2_1
+!
+! USAGE
+!
+! call solve2_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q2_1.
+! The matrix mat2_1 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_2 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve2_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(1), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_2), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_4), intent(in), optional :: coeffs2
+ complex(ki), dimension(2) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,2
+ Q(indices(1)) = q2_1(i,1)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval2(Q, coeffs, 0) &
+ & - tenseval4(Q, coeffs2, 1)
+ end do
+ else
+ do i=1,2
+ Q(indices(1)) = q2_1(i,1)
+ xnum(i) = numeval(Q, mu2) - tenseval2(Q, coeffs, 0)
+ end do
+ end if
+ coeffs%c1(idx,:) = matmul(mat2_1,xnum)
+end subroutine solve2_1
+!****f* src/interface/tens_rec/tenseval2_1
+! NAME
+!
+! Function tenseval2_1
+!
+! USAGE
+!
+! result = tenseval2_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(2) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval2_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(2), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval2_1
+ real(ki) :: q0
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(1) + coeffs(2)*q0
+ acc = acc*q0
+ tenseval2_1 = acc
+end function tenseval2_1
+!****f* src/interface/tens_rec/ctenseval2_1
+! NAME
+!
+! Function ctenseval2_1
+!
+! USAGE
+!
+! result = ctenseval2_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(2) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval2_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(2), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval2_1
+ complex(ki) :: q0
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(1) + coeffs(2)*q0
+ acc = acc*q0
+ ctenseval2_1 = acc
+end function ctenseval2_1
+!****f* src/interface/tens_rec/solve2_2
+! NAME
+!
+! Subroutine solve2_2
+!
+! USAGE
+!
+! call solve2_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q2_2.
+! The matrix mat2_2 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_2 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve2_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(2), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_2), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_4), intent(in), optional :: coeffs2
+ complex(ki), dimension(1) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,1
+ Q(indices(1)) = q2_2(i,1)
+ Q(indices(2)) = q2_2(i,2)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval2(Q, coeffs, 1) &
+ & - tenseval4(Q, coeffs2, 2)
+ end do
+ else
+ do i=1,1
+ Q(indices(1)) = q2_2(i,1)
+ Q(indices(2)) = q2_2(i,2)
+ xnum(i) = numeval(Q, mu2) - tenseval2(Q, coeffs, 1)
+ end do
+ end if
+ coeffs%c2(idx,:) = matmul(mat2_2,xnum)
+end subroutine solve2_2
+!****f* src/interface/tens_rec/tenseval2_2
+! NAME
+!
+! Function tenseval2_2
+!
+! USAGE
+!
+! result = tenseval2_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval2_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval2_2
+ real(ki) :: q0
+ real(ki) :: q1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(1)*q0*q1
+ tenseval2_2 = acc
+end function tenseval2_2
+!****f* src/interface/tens_rec/ctenseval2_2
+! NAME
+!
+! Function ctenseval2_2
+!
+! USAGE
+!
+! result = ctenseval2_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval2_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval2_2
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(1)*q0*q1
+ ctenseval2_2 = acc
+end function ctenseval2_2
+!****f* src/interface/tens_rec/solve2
+! NAME
+!
+! Subroutine solve2
+!
+! USAGE
+!
+! call solve2(numeval, mu2, coeffs, coeffs2)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank 2
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type coeff_type_2 used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve2(numeval, mu2, coeffs, coeffs2)
+ ! generated by: write_subroutine_glob_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), intent(in) :: mu2
+ type(coeff_type_2), intent(inout) :: coeffs
+ type(coeff_type_4), intent(in), optional :: coeffs2
+ if (present(coeffs2)) then
+ coeffs%c0 = numeval(null_vec, mu2) - coeffs2%c0
+ call solve2_1(numeval, (/0/), mu2, coeffs, 1, coeffs2)
+ call solve2_1(numeval, (/1/), mu2, coeffs, 2, coeffs2)
+ call solve2_1(numeval, (/2/), mu2, coeffs, 3, coeffs2)
+ call solve2_1(numeval, (/3/), mu2, coeffs, 4, coeffs2)
+ call solve2_2(numeval, (/0,1/), mu2, coeffs, 1, coeffs2)
+ call solve2_2(numeval, (/0,2/), mu2, coeffs, 2, coeffs2)
+ call solve2_2(numeval, (/0,3/), mu2, coeffs, 3, coeffs2)
+ call solve2_2(numeval, (/1,2/), mu2, coeffs, 4, coeffs2)
+ call solve2_2(numeval, (/1,3/), mu2, coeffs, 5, coeffs2)
+ call solve2_2(numeval, (/2,3/), mu2, coeffs, 6, coeffs2)
+ else
+ coeffs%c0 = numeval((/0.0_ki,0.0_ki,0.0_ki,0.0_ki/), mu2)
+ call solve2_1(numeval, (/0/), mu2, coeffs, 1)
+ call solve2_1(numeval, (/1/), mu2, coeffs, 2)
+ call solve2_1(numeval, (/2/), mu2, coeffs, 3)
+ call solve2_1(numeval, (/3/), mu2, coeffs, 4)
+ call solve2_2(numeval, (/0,1/), mu2, coeffs, 1)
+ call solve2_2(numeval, (/0,2/), mu2, coeffs, 2)
+ call solve2_2(numeval, (/0,3/), mu2, coeffs, 3)
+ call solve2_2(numeval, (/1,2/), mu2, coeffs, 4)
+ call solve2_2(numeval, (/1,3/), mu2, coeffs, 5)
+ call solve2_2(numeval, (/2,3/), mu2, coeffs, 6)
+ end if
+end subroutine solve2
+!****f* src/interface/tens_rec/tenseval2
+! NAME
+!
+! Function tenseval2
+!
+! USAGE
+!
+! result = tenseval2(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_2
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval2(Q, coeffs, max_k)
+ ! generated by: write_function_glob_recon
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_2), intent(in) :: coeffs
+ integer, intent(in), optional :: max_k
+ complex(ki) :: tenseval2
+ integer :: maxk
+ if (present(max_k)) then
+ maxk = max_k
+ else
+ maxk = 2
+ end if
+ tenseval2 = coeffs%c0
+ if (1 .le. maxk) then
+ tenseval2 = tenseval2 + tenseval2_1(Q, (/0/), coeffs%c1(1,:))
+ tenseval2 = tenseval2 + tenseval2_1(Q, (/1/), coeffs%c1(2,:))
+ tenseval2 = tenseval2 + tenseval2_1(Q, (/2/), coeffs%c1(3,:))
+ tenseval2 = tenseval2 + tenseval2_1(Q, (/3/), coeffs%c1(4,:))
+ end if
+ if (2 .le. maxk) then
+ tenseval2 = tenseval2 + tenseval2_2(Q, (/0,1/), coeffs%c2(1,:))
+ tenseval2 = tenseval2 + tenseval2_2(Q, (/0,2/), coeffs%c2(2,:))
+ tenseval2 = tenseval2 + tenseval2_2(Q, (/0,3/), coeffs%c2(3,:))
+ tenseval2 = tenseval2 + tenseval2_2(Q, (/1,2/), coeffs%c2(4,:))
+ tenseval2 = tenseval2 + tenseval2_2(Q, (/1,3/), coeffs%c2(5,:))
+ tenseval2 = tenseval2 + tenseval2_2(Q, (/2,3/), coeffs%c2(6,:))
+ end if
+end function tenseval2
+!****f* src/interface/tens_rec/ctenseval2
+! NAME
+!
+! Function ctenseval2
+!
+! USAGE
+!
+! result = ctenseval2(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_2
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval2(Q, coeffs)
+ ! generated by: write_function_glob_recon_complex
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_2), intent(in) :: coeffs
+ complex(ki) :: ctenseval2
+ ctenseval2 = coeffs%c0
+ ctenseval2 = ctenseval2 + ctenseval2_1(Q, (/0/), coeffs%c1(1,:))
+ ctenseval2 = ctenseval2 + ctenseval2_1(Q, (/1/), coeffs%c1(2,:))
+ ctenseval2 = ctenseval2 + ctenseval2_1(Q, (/2/), coeffs%c1(3,:))
+ ctenseval2 = ctenseval2 + ctenseval2_1(Q, (/3/), coeffs%c1(4,:))
+ ctenseval2 = ctenseval2 + ctenseval2_2(Q, (/0,1/), coeffs%c2(1,:))
+ ctenseval2 = ctenseval2 + ctenseval2_2(Q, (/0,2/), coeffs%c2(2,:))
+ ctenseval2 = ctenseval2 + ctenseval2_2(Q, (/0,3/), coeffs%c2(3,:))
+ ctenseval2 = ctenseval2 + ctenseval2_2(Q, (/1,2/), coeffs%c2(4,:))
+ ctenseval2 = ctenseval2 + ctenseval2_2(Q, (/1,3/), coeffs%c2(5,:))
+ ctenseval2 = ctenseval2 + ctenseval2_2(Q, (/2,3/), coeffs%c2(6,:))
+end function ctenseval2
+!****f* src/interface/tens_rec/print_coeffs_2
+! NAME
+!
+! Subroutine print_coeffs_2
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank 2
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type coeff_type_2
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine print_coeffs_2(coeffs, unit)
+ ! generated by: write_print_coeffs
+ implicit none
+ type(coeff_type_2), intent(in) :: coeffs
+ integer, intent(in), optional :: unit
+ integer :: ch
+ if (present(unit)) then
+ ch = unit
+ else
+ ch = 6
+ end if
+ write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(1,1), ')*q(0)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,2), ')*q(0)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(2,1), ')*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,2), ')*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(3,1), ')*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,2), ')*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(4,1), ')*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,2), ')*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(1,1), ')*q(0)*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(2,1), ')*q(0)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(3,1), ')*q(0)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(4,1), ')*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(5,1), ')*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(6,1), ')*q(2)*q(3)'
+end subroutine print_coeffs_2
+!****f* src/interface/tens_rec/reconstruct2
+! NAME
+!
+! Subroutine reconstruct2
+!
+! USAGE
+!
+! call reconstruct2(numeval, cm0, cm1, cm2)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank 2,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type coeff_type_2, representing the
+! numerator at mu2=0
+! * cm1 -- coefficients of type complex(ki), representing the
+! tensor in front of mu2 [optional]
+! * cm2 -- coefficients of type complex(ki), representing the
+! tensor in front of mu2^2 [optional]
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+! only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+! is at most linear in mu2.
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine reconstruct2(numeval, cm0, cm1, cm2)
+ ! generated by: write_subroutine_reconstruct
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ type(coeff_type_2), intent(out) :: cm0
+ complex(ki), intent(out), optional :: cm1
+ complex(ki), intent(out), optional :: cm2
+ complex(ki) :: ca, cb
+ call solve2(numeval, 0.0_ki, cm0)
+ if (present(cm1)) then
+ if (present(cm2)) then
+ ca = numeval(null_vec, +1.0_ki) - cm0%c0
+ cb = numeval(null_vec, -1.0_ki) - cm0%c0
+ cm1= 0.5_ki * (ca - cb)
+ cm2= 0.5_ki * (ca + cb)
+ else
+ cm1 = numeval(null_vec, +1.0_ki) - cm0%c0
+ end if
+ end if
+end subroutine reconstruct2
+!****f* src/interface/tens_rec/solve3_1
+! NAME
+!
+! Subroutine solve3_1
+!
+! USAGE
+!
+! call solve3_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q3_1.
+! The matrix mat3_1 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_3 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve3_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(1), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_3), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_5), intent(in), optional :: coeffs2
+ complex(ki), dimension(3) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,3
+ Q(indices(1)) = q3_1(i,1)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval3(Q, coeffs, 0) &
+ & - tenseval5(Q, coeffs2, 1)
+ end do
+ else
+ do i=1,3
+ Q(indices(1)) = q3_1(i,1)
+ xnum(i) = numeval(Q, mu2) - tenseval3(Q, coeffs, 0)
+ end do
+ end if
+ coeffs%c1(idx,:) = matmul(mat3_1,xnum)
+end subroutine solve3_1
+!****f* src/interface/tens_rec/tenseval3_1
+! NAME
+!
+! Function tenseval3_1
+!
+! USAGE
+!
+! result = tenseval3_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(3) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval3_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(3), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval3_1
+ real(ki) :: q0
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(2) + coeffs(3)*q0
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ tenseval3_1 = acc
+end function tenseval3_1
+!****f* src/interface/tens_rec/ctenseval3_1
+! NAME
+!
+! Function ctenseval3_1
+!
+! USAGE
+!
+! result = ctenseval3_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(3) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval3_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(3), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval3_1
+ complex(ki) :: q0
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(2) + coeffs(3)*q0
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ ctenseval3_1 = acc
+end function ctenseval3_1
+!****f* src/interface/tens_rec/solve3_2
+! NAME
+!
+! Subroutine solve3_2
+!
+! USAGE
+!
+! call solve3_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q3_2.
+! The matrix mat3_2 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_3 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve3_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(2), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_3), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_5), intent(in), optional :: coeffs2
+ complex(ki), dimension(3) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,3
+ Q(indices(1)) = q3_2(i,1)
+ Q(indices(2)) = q3_2(i,2)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval3(Q, coeffs, 1) &
+ & - tenseval5(Q, coeffs2, 2)
+ end do
+ else
+ do i=1,3
+ Q(indices(1)) = q3_2(i,1)
+ Q(indices(2)) = q3_2(i,2)
+ xnum(i) = numeval(Q, mu2) - tenseval3(Q, coeffs, 1)
+ end do
+ end if
+ coeffs%c2(idx,:) = matmul(mat3_2,xnum)
+end subroutine solve3_2
+!****f* src/interface/tens_rec/tenseval3_2
+! NAME
+!
+! Function tenseval3_2
+!
+! USAGE
+!
+! result = tenseval3_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(3) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval3_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(3), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval3_2
+ real(ki) :: q0
+ real(ki) :: q1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(2)*q1 + coeffs(3)*q0 + coeffs(1)
+ acc = acc*q0*q1
+ tenseval3_2 = acc
+end function tenseval3_2
+!****f* src/interface/tens_rec/ctenseval3_2
+! NAME
+!
+! Function ctenseval3_2
+!
+! USAGE
+!
+! result = ctenseval3_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(3) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval3_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(3), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval3_2
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(2)*q1 + coeffs(3)*q0 + coeffs(1)
+ acc = acc*q0*q1
+ ctenseval3_2 = acc
+end function ctenseval3_2
+!****f* src/interface/tens_rec/solve3_3
+! NAME
+!
+! Subroutine solve3_3
+!
+! USAGE
+!
+! call solve3_3(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q3_3.
+! The matrix mat3_3 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_3 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve3_3(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(3), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_3), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_5), intent(in), optional :: coeffs2
+ complex(ki), dimension(1) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,1
+ Q(indices(1)) = q3_3(i,1)
+ Q(indices(2)) = q3_3(i,2)
+ Q(indices(3)) = q3_3(i,3)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval3(Q, coeffs, 2) &
+ & - tenseval5(Q, coeffs2, 3)
+ end do
+ else
+ do i=1,1
+ Q(indices(1)) = q3_3(i,1)
+ Q(indices(2)) = q3_3(i,2)
+ Q(indices(3)) = q3_3(i,3)
+ xnum(i) = numeval(Q, mu2) - tenseval3(Q, coeffs, 2)
+ end do
+ end if
+ coeffs%c3(idx,:) = matmul(mat3_3,xnum)
+end subroutine solve3_3
+!****f* src/interface/tens_rec/tenseval3_3
+! NAME
+!
+! Function tenseval3_3
+!
+! USAGE
+!
+! result = tenseval3_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval3_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval3_3
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(1)*q0*q1*q2
+ tenseval3_3 = acc
+end function tenseval3_3
+!****f* src/interface/tens_rec/ctenseval3_3
+! NAME
+!
+! Function ctenseval3_3
+!
+! USAGE
+!
+! result = ctenseval3_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval3_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval3_3
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(1)*q0*q1*q2
+ ctenseval3_3 = acc
+end function ctenseval3_3
+!****f* src/interface/tens_rec/solve3
+! NAME
+!
+! Subroutine solve3
+!
+! USAGE
+!
+! call solve3(numeval, mu2, coeffs, coeffs2)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank 3
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type coeff_type_3 used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve3(numeval, mu2, coeffs, coeffs2)
+ ! generated by: write_subroutine_glob_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), intent(in) :: mu2
+ type(coeff_type_3), intent(inout) :: coeffs
+ type(coeff_type_5), intent(in), optional :: coeffs2
+ if (present(coeffs2)) then
+ coeffs%c0 = numeval(null_vec, mu2) - coeffs2%c0
+ call solve3_1(numeval, (/0/), mu2, coeffs, 1, coeffs2)
+ call solve3_1(numeval, (/1/), mu2, coeffs, 2, coeffs2)
+ call solve3_1(numeval, (/2/), mu2, coeffs, 3, coeffs2)
+ call solve3_1(numeval, (/3/), mu2, coeffs, 4, coeffs2)
+ call solve3_2(numeval, (/0,1/), mu2, coeffs, 1, coeffs2)
+ call solve3_2(numeval, (/0,2/), mu2, coeffs, 2, coeffs2)
+ call solve3_2(numeval, (/0,3/), mu2, coeffs, 3, coeffs2)
+ call solve3_2(numeval, (/1,2/), mu2, coeffs, 4, coeffs2)
+ call solve3_2(numeval, (/1,3/), mu2, coeffs, 5, coeffs2)
+ call solve3_2(numeval, (/2,3/), mu2, coeffs, 6, coeffs2)
+ call solve3_3(numeval, (/0,1,2/), mu2, coeffs, 1, coeffs2)
+ call solve3_3(numeval, (/0,1,3/), mu2, coeffs, 2, coeffs2)
+ call solve3_3(numeval, (/0,2,3/), mu2, coeffs, 3, coeffs2)
+ call solve3_3(numeval, (/1,2,3/), mu2, coeffs, 4, coeffs2)
+ else
+ coeffs%c0 = numeval((/0.0_ki,0.0_ki,0.0_ki,0.0_ki/), mu2)
+ call solve3_1(numeval, (/0/), mu2, coeffs, 1)
+ call solve3_1(numeval, (/1/), mu2, coeffs, 2)
+ call solve3_1(numeval, (/2/), mu2, coeffs, 3)
+ call solve3_1(numeval, (/3/), mu2, coeffs, 4)
+ call solve3_2(numeval, (/0,1/), mu2, coeffs, 1)
+ call solve3_2(numeval, (/0,2/), mu2, coeffs, 2)
+ call solve3_2(numeval, (/0,3/), mu2, coeffs, 3)
+ call solve3_2(numeval, (/1,2/), mu2, coeffs, 4)
+ call solve3_2(numeval, (/1,3/), mu2, coeffs, 5)
+ call solve3_2(numeval, (/2,3/), mu2, coeffs, 6)
+ call solve3_3(numeval, (/0,1,2/), mu2, coeffs, 1)
+ call solve3_3(numeval, (/0,1,3/), mu2, coeffs, 2)
+ call solve3_3(numeval, (/0,2,3/), mu2, coeffs, 3)
+ call solve3_3(numeval, (/1,2,3/), mu2, coeffs, 4)
+ end if
+end subroutine solve3
+!****f* src/interface/tens_rec/tenseval3
+! NAME
+!
+! Function tenseval3
+!
+! USAGE
+!
+! result = tenseval3(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_3
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval3(Q, coeffs, max_k)
+ ! generated by: write_function_glob_recon
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_3), intent(in) :: coeffs
+ integer, intent(in), optional :: max_k
+ complex(ki) :: tenseval3
+ integer :: maxk
+ if (present(max_k)) then
+ maxk = max_k
+ else
+ maxk = 3
+ end if
+ tenseval3 = coeffs%c0
+ if (1 .le. maxk) then
+ tenseval3 = tenseval3 + tenseval3_1(Q, (/0/), coeffs%c1(1,:))
+ tenseval3 = tenseval3 + tenseval3_1(Q, (/1/), coeffs%c1(2,:))
+ tenseval3 = tenseval3 + tenseval3_1(Q, (/2/), coeffs%c1(3,:))
+ tenseval3 = tenseval3 + tenseval3_1(Q, (/3/), coeffs%c1(4,:))
+ end if
+ if (2 .le. maxk) then
+ tenseval3 = tenseval3 + tenseval3_2(Q, (/0,1/), coeffs%c2(1,:))
+ tenseval3 = tenseval3 + tenseval3_2(Q, (/0,2/), coeffs%c2(2,:))
+ tenseval3 = tenseval3 + tenseval3_2(Q, (/0,3/), coeffs%c2(3,:))
+ tenseval3 = tenseval3 + tenseval3_2(Q, (/1,2/), coeffs%c2(4,:))
+ tenseval3 = tenseval3 + tenseval3_2(Q, (/1,3/), coeffs%c2(5,:))
+ tenseval3 = tenseval3 + tenseval3_2(Q, (/2,3/), coeffs%c2(6,:))
+ end if
+ if (3 .le. maxk) then
+ tenseval3 = tenseval3 + tenseval3_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ tenseval3 = tenseval3 + tenseval3_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ tenseval3 = tenseval3 + tenseval3_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ tenseval3 = tenseval3 + tenseval3_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ end if
+end function tenseval3
+!****f* src/interface/tens_rec/ctenseval3
+! NAME
+!
+! Function ctenseval3
+!
+! USAGE
+!
+! result = ctenseval3(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_3
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval3(Q, coeffs)
+ ! generated by: write_function_glob_recon_complex
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_3), intent(in) :: coeffs
+ complex(ki) :: ctenseval3
+ ctenseval3 = coeffs%c0
+ ctenseval3 = ctenseval3 + ctenseval3_1(Q, (/0/), coeffs%c1(1,:))
+ ctenseval3 = ctenseval3 + ctenseval3_1(Q, (/1/), coeffs%c1(2,:))
+ ctenseval3 = ctenseval3 + ctenseval3_1(Q, (/2/), coeffs%c1(3,:))
+ ctenseval3 = ctenseval3 + ctenseval3_1(Q, (/3/), coeffs%c1(4,:))
+ ctenseval3 = ctenseval3 + ctenseval3_2(Q, (/0,1/), coeffs%c2(1,:))
+ ctenseval3 = ctenseval3 + ctenseval3_2(Q, (/0,2/), coeffs%c2(2,:))
+ ctenseval3 = ctenseval3 + ctenseval3_2(Q, (/0,3/), coeffs%c2(3,:))
+ ctenseval3 = ctenseval3 + ctenseval3_2(Q, (/1,2/), coeffs%c2(4,:))
+ ctenseval3 = ctenseval3 + ctenseval3_2(Q, (/1,3/), coeffs%c2(5,:))
+ ctenseval3 = ctenseval3 + ctenseval3_2(Q, (/2,3/), coeffs%c2(6,:))
+ ctenseval3 = ctenseval3 + ctenseval3_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ ctenseval3 = ctenseval3 + ctenseval3_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ ctenseval3 = ctenseval3 + ctenseval3_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ ctenseval3 = ctenseval3 + ctenseval3_3(Q, (/1,2,3/), coeffs%c3(4,:))
+end function ctenseval3
+!****f* src/interface/tens_rec/print_coeffs_3
+! NAME
+!
+! Subroutine print_coeffs_3
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank 3
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type coeff_type_3
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine print_coeffs_3(coeffs, unit)
+ ! generated by: write_print_coeffs
+ implicit none
+ type(coeff_type_3), intent(in) :: coeffs
+ integer, intent(in), optional :: unit
+ integer :: ch
+ if (present(unit)) then
+ ch = unit
+ else
+ ch = 6
+ end if
+ write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(1,1), ')*q(0)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,2), ')*q(0)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,3), ')*q(0)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(2,1), ')*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,2), ')*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,3), ')*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(3,1), ')*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,2), ')*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,3), ')*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(4,1), ')*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,2), ')*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,3), ')*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(1,1), ')*q(0)*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,2), ')*q(0)*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,3), ')*q(0)^2*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(2,1), ')*q(0)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,2), ')*q(0)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,3), ')*q(0)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(3,1), ')*q(0)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,2), ')*q(0)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,3), ')*q(0)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(4,1), ')*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,2), ')*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,3), ')*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(5,1), ')*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,2), ')*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,3), ')*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(6,1), ')*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,2), ')*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,3), ')*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(1,1), ')*q(0)*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(2,1), ')*q(0)*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(3,1), ')*q(0)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(4,1), ')*q(1)*q(2)*q(3)'
+end subroutine print_coeffs_3
+!****f* src/interface/tens_rec/reconstruct3
+! NAME
+!
+! Subroutine reconstruct3
+!
+! USAGE
+!
+! call reconstruct3(numeval, cm0, cm1, cm2)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank 3,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type coeff_type_3, representing the
+! numerator at mu2=0
+! * cm1 -- coefficients of type type(coeff_type_1), representing the
+! tensor in front of mu2 [optional]
+! * cm2 -- coefficients of type type(coeff_type_1), representing the
+! tensor in front of mu2^2 [optional]
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+! only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+! is at most linear in mu2.
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine reconstruct3(numeval, cm0, cm1, cm2)
+ ! generated by: write_subroutine_reconstruct
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ type(coeff_type_3), intent(out) :: cm0
+ type(coeff_type_1), intent(out), optional :: cm1
+ type(coeff_type_1), intent(out), optional :: cm2
+ type(coeff_type_1) :: ca, cb
+ call solve3(numeval, 0.0_ki, cm0)
+ if (present(cm1)) then
+ if (present(cm2)) then
+ call solve1(numeval, +1.0_ki, ca, cm0)
+ call solve1(numeval, -1.0_ki, cb, cm0)
+ cm1%c0= 0.5_ki * (ca%c0 - cb%c0)
+ cm2%c0= 0.5_ki * (ca%c0 + cb%c0)
+ cm1%c1 = 0.5_ki * (ca%c1 - cb%c1)
+ cm2%c1 = 0.5_ki * (ca%c1 + cb%c1)
+ else
+ call solve1(numeval, +1.0_ki, cm1, cm0)
+ end if
+ end if
+end subroutine reconstruct3
+!****f* src/interface/tens_rec/solve4_1
+! NAME
+!
+! Subroutine solve4_1
+!
+! USAGE
+!
+! call solve4_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q4_1.
+! The matrix mat4_1 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_4 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve4_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(1), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_4), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_6), intent(in), optional :: coeffs2
+ complex(ki), dimension(4) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,4
+ Q(indices(1)) = q4_1(i,1)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval4(Q, coeffs, 0) &
+ & - tenseval6(Q, coeffs2, 1)
+ end do
+ else
+ do i=1,4
+ Q(indices(1)) = q4_1(i,1)
+ xnum(i) = numeval(Q, mu2) - tenseval4(Q, coeffs, 0)
+ end do
+ end if
+ coeffs%c1(idx,:) = matmul(mat4_1,xnum)
+end subroutine solve4_1
+!****f* src/interface/tens_rec/tenseval4_1
+! NAME
+!
+! Function tenseval4_1
+!
+! USAGE
+!
+! result = tenseval4_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(4) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval4_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(4), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval4_1
+ real(ki) :: q0
+ complex(ki) :: reg2
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(3) + coeffs(4)*q0
+ reg2 = acc*q0
+ acc = coeffs(2)
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ tenseval4_1 = acc
+end function tenseval4_1
+!****f* src/interface/tens_rec/ctenseval4_1
+! NAME
+!
+! Function ctenseval4_1
+!
+! USAGE
+!
+! result = ctenseval4_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(4) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval4_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(4), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval4_1
+ complex(ki) :: q0
+ complex(ki) :: reg2
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(3) + coeffs(4)*q0
+ reg2 = acc*q0
+ acc = coeffs(2)
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ ctenseval4_1 = acc
+end function ctenseval4_1
+!****f* src/interface/tens_rec/solve4_2
+! NAME
+!
+! Subroutine solve4_2
+!
+! USAGE
+!
+! call solve4_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q4_2.
+! The matrix mat4_2 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_4 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve4_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(2), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_4), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_6), intent(in), optional :: coeffs2
+ complex(ki), dimension(6) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,6
+ Q(indices(1)) = q4_2(i,1)
+ Q(indices(2)) = q4_2(i,2)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval4(Q, coeffs, 1) &
+ & - tenseval6(Q, coeffs2, 2)
+ end do
+ else
+ do i=1,6
+ Q(indices(1)) = q4_2(i,1)
+ Q(indices(2)) = q4_2(i,2)
+ xnum(i) = numeval(Q, mu2) - tenseval4(Q, coeffs, 1)
+ end do
+ end if
+ coeffs%c2(idx,:) = matmul(mat4_2,xnum)
+end subroutine solve4_2
+!****f* src/interface/tens_rec/tenseval4_2
+! NAME
+!
+! Function tenseval4_2
+!
+! USAGE
+!
+! result = tenseval4_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(6) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval4_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(6), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval4_2
+ real(ki) :: q0
+ real(ki) :: q1
+ complex(ki) :: reg2
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(3)*q1 + coeffs(5)*q0 + coeffs(2)
+ reg1 = acc*q1
+ acc = coeffs(6)*q0 + coeffs(4)
+ reg2 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1
+ tenseval4_2 = acc
+end function tenseval4_2
+!****f* src/interface/tens_rec/ctenseval4_2
+! NAME
+!
+! Function ctenseval4_2
+!
+! USAGE
+!
+! result = ctenseval4_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(6) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval4_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(6), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval4_2
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: reg2
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(3)*q1 + coeffs(5)*q0 + coeffs(2)
+ reg1 = acc*q1
+ acc = coeffs(6)*q0 + coeffs(4)
+ reg2 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1
+ ctenseval4_2 = acc
+end function ctenseval4_2
+!****f* src/interface/tens_rec/solve4_3
+! NAME
+!
+! Subroutine solve4_3
+!
+! USAGE
+!
+! call solve4_3(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q4_3.
+! The matrix mat4_3 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_4 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve4_3(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(3), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_4), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_6), intent(in), optional :: coeffs2
+ complex(ki), dimension(4) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ if (present(coeffs2)) then
+ do i=1,4
+ Q(indices(1)) = q4_3(i,1)
+ Q(indices(2)) = q4_3(i,2)
+ Q(indices(3)) = q4_3(i,3)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval4(Q, coeffs, 2) &
+ & - tenseval6(Q, coeffs2, 3)
+ end do
+ else
+ do i=1,4
+ Q(indices(1)) = q4_3(i,1)
+ Q(indices(2)) = q4_3(i,2)
+ Q(indices(3)) = q4_3(i,3)
+ xnum(i) = numeval(Q, mu2) - tenseval4(Q, coeffs, 2)
+ end do
+ end if
+ coeffs%c3(idx,:) = matmul(mat4_3,xnum)
+end subroutine solve4_3
+!****f* src/interface/tens_rec/tenseval4_3
+! NAME
+!
+! Function tenseval4_3
+!
+! USAGE
+!
+! result = tenseval4_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(4) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval4_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(4), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval4_3
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(4)*q0 + coeffs(3)*q1 + coeffs(1) + coeffs(2)*q2
+ acc = acc*q0*q1*q2
+ tenseval4_3 = acc
+end function tenseval4_3
+!****f* src/interface/tens_rec/ctenseval4_3
+! NAME
+!
+! Function ctenseval4_3
+!
+! USAGE
+!
+! result = ctenseval4_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(4) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval4_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(4), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval4_3
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(4)*q0 + coeffs(3)*q1 + coeffs(1) + coeffs(2)*q2
+ acc = acc*q0*q1*q2
+ ctenseval4_3 = acc
+end function ctenseval4_3
+!****f* src/interface/tens_rec/solve4_4
+! NAME
+!
+! Subroutine solve4_4
+!
+! USAGE
+!
+! call solve4_4(numeval, indices, mu2, coeffs, idx, coeffs2)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q4_4.
+! The matrix mat4_4 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_4 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve4_4(numeval, indices, mu2, coeffs, idx, coeffs2)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(4), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_4), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ type(coeff_type_6), intent(in), optional :: coeffs2
+ complex(ki), dimension(1) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ if (present(coeffs2)) then
+ do i=1,1
+ Q(indices(1)) = q4_4(i,1)
+ Q(indices(2)) = q4_4(i,2)
+ Q(indices(3)) = q4_4(i,3)
+ Q(indices(4)) = q4_4(i,4)
+ xnum(i) = numeval(Q, mu2) &
+ & - tenseval4(Q, coeffs, 3) &
+ & - tenseval6(Q, coeffs2, 4)
+ end do
+ else
+ do i=1,1
+ Q(indices(1)) = q4_4(i,1)
+ Q(indices(2)) = q4_4(i,2)
+ Q(indices(3)) = q4_4(i,3)
+ Q(indices(4)) = q4_4(i,4)
+ xnum(i) = numeval(Q, mu2) - tenseval4(Q, coeffs, 3)
+ end do
+ end if
+ coeffs%c4(idx,:) = matmul(mat4_4,xnum)
+end subroutine solve4_4
+!****f* src/interface/tens_rec/tenseval4_4
+! NAME
+!
+! Function tenseval4_4
+!
+! USAGE
+!
+! result = tenseval4_4(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 4 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(4): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 4 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval4_4(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(4), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval4_4
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ real(ki) :: q3
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ q3 = Q(indices(4))
+ acc = coeffs(1)*q0*q1*q2*q3
+ tenseval4_4 = acc
+end function tenseval4_4
+!****f* src/interface/tens_rec/ctenseval4_4
+! NAME
+!
+! Function ctenseval4_4
+!
+! USAGE
+!
+! result = ctenseval4_4(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 4 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(4): the set of non-zero indices.
+! * coeffs -- an array of dimension(1) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 4 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval4_4(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(4), intent(in) :: indices
+ complex(ki), dimension(1), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval4_4
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: q3
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ q3 = Q(indices(4))
+ acc = coeffs(1)*q0*q1*q2*q3
+ ctenseval4_4 = acc
+end function ctenseval4_4
+!****f* src/interface/tens_rec/solve4
+! NAME
+!
+! Subroutine solve4
+!
+! USAGE
+!
+! call solve4(numeval, mu2, coeffs, coeffs2)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank 4
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type coeff_type_4 used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve4(numeval, mu2, coeffs, coeffs2)
+ ! generated by: write_subroutine_glob_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), intent(in) :: mu2
+ type(coeff_type_4), intent(inout) :: coeffs
+ type(coeff_type_6), intent(in), optional :: coeffs2
+ if (present(coeffs2)) then
+ coeffs%c0 = numeval(null_vec, mu2) - coeffs2%c0
+ call solve4_1(numeval, (/0/), mu2, coeffs, 1, coeffs2)
+ call solve4_1(numeval, (/1/), mu2, coeffs, 2, coeffs2)
+ call solve4_1(numeval, (/2/), mu2, coeffs, 3, coeffs2)
+ call solve4_1(numeval, (/3/), mu2, coeffs, 4, coeffs2)
+ call solve4_2(numeval, (/0,1/), mu2, coeffs, 1, coeffs2)
+ call solve4_2(numeval, (/0,2/), mu2, coeffs, 2, coeffs2)
+ call solve4_2(numeval, (/0,3/), mu2, coeffs, 3, coeffs2)
+ call solve4_2(numeval, (/1,2/), mu2, coeffs, 4, coeffs2)
+ call solve4_2(numeval, (/1,3/), mu2, coeffs, 5, coeffs2)
+ call solve4_2(numeval, (/2,3/), mu2, coeffs, 6, coeffs2)
+ call solve4_3(numeval, (/0,1,2/), mu2, coeffs, 1, coeffs2)
+ call solve4_3(numeval, (/0,1,3/), mu2, coeffs, 2, coeffs2)
+ call solve4_3(numeval, (/0,2,3/), mu2, coeffs, 3, coeffs2)
+ call solve4_3(numeval, (/1,2,3/), mu2, coeffs, 4, coeffs2)
+ call solve4_4(numeval, (/0,1,2,3/), mu2, coeffs, 1, coeffs2)
+ else
+ coeffs%c0 = numeval((/0.0_ki,0.0_ki,0.0_ki,0.0_ki/), mu2)
+ call solve4_1(numeval, (/0/), mu2, coeffs, 1)
+ call solve4_1(numeval, (/1/), mu2, coeffs, 2)
+ call solve4_1(numeval, (/2/), mu2, coeffs, 3)
+ call solve4_1(numeval, (/3/), mu2, coeffs, 4)
+ call solve4_2(numeval, (/0,1/), mu2, coeffs, 1)
+ call solve4_2(numeval, (/0,2/), mu2, coeffs, 2)
+ call solve4_2(numeval, (/0,3/), mu2, coeffs, 3)
+ call solve4_2(numeval, (/1,2/), mu2, coeffs, 4)
+ call solve4_2(numeval, (/1,3/), mu2, coeffs, 5)
+ call solve4_2(numeval, (/2,3/), mu2, coeffs, 6)
+ call solve4_3(numeval, (/0,1,2/), mu2, coeffs, 1)
+ call solve4_3(numeval, (/0,1,3/), mu2, coeffs, 2)
+ call solve4_3(numeval, (/0,2,3/), mu2, coeffs, 3)
+ call solve4_3(numeval, (/1,2,3/), mu2, coeffs, 4)
+ call solve4_4(numeval, (/0,1,2,3/), mu2, coeffs, 1)
+ end if
+end subroutine solve4
+!****f* src/interface/tens_rec/tenseval4
+! NAME
+!
+! Function tenseval4
+!
+! USAGE
+!
+! result = tenseval4(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_4
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval4(Q, coeffs, max_k)
+ ! generated by: write_function_glob_recon
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_4), intent(in) :: coeffs
+ integer, intent(in), optional :: max_k
+ complex(ki) :: tenseval4
+ integer :: maxk
+ if (present(max_k)) then
+ maxk = max_k
+ else
+ maxk = 4
+ end if
+ tenseval4 = coeffs%c0
+ if (1 .le. maxk) then
+ tenseval4 = tenseval4 + tenseval4_1(Q, (/0/), coeffs%c1(1,:))
+ tenseval4 = tenseval4 + tenseval4_1(Q, (/1/), coeffs%c1(2,:))
+ tenseval4 = tenseval4 + tenseval4_1(Q, (/2/), coeffs%c1(3,:))
+ tenseval4 = tenseval4 + tenseval4_1(Q, (/3/), coeffs%c1(4,:))
+ end if
+ if (2 .le. maxk) then
+ tenseval4 = tenseval4 + tenseval4_2(Q, (/0,1/), coeffs%c2(1,:))
+ tenseval4 = tenseval4 + tenseval4_2(Q, (/0,2/), coeffs%c2(2,:))
+ tenseval4 = tenseval4 + tenseval4_2(Q, (/0,3/), coeffs%c2(3,:))
+ tenseval4 = tenseval4 + tenseval4_2(Q, (/1,2/), coeffs%c2(4,:))
+ tenseval4 = tenseval4 + tenseval4_2(Q, (/1,3/), coeffs%c2(5,:))
+ tenseval4 = tenseval4 + tenseval4_2(Q, (/2,3/), coeffs%c2(6,:))
+ end if
+ if (3 .le. maxk) then
+ tenseval4 = tenseval4 + tenseval4_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ tenseval4 = tenseval4 + tenseval4_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ tenseval4 = tenseval4 + tenseval4_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ tenseval4 = tenseval4 + tenseval4_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ end if
+ if (4 .le. maxk) then
+ tenseval4 = tenseval4 + tenseval4_4(Q, (/0,1,2,3/), coeffs%c4(1,:))
+ end if
+end function tenseval4
+!****f* src/interface/tens_rec/ctenseval4
+! NAME
+!
+! Function ctenseval4
+!
+! USAGE
+!
+! result = ctenseval4(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_4
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval4(Q, coeffs)
+ ! generated by: write_function_glob_recon_complex
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_4), intent(in) :: coeffs
+ complex(ki) :: ctenseval4
+ ctenseval4 = coeffs%c0
+ ctenseval4 = ctenseval4 + ctenseval4_1(Q, (/0/), coeffs%c1(1,:))
+ ctenseval4 = ctenseval4 + ctenseval4_1(Q, (/1/), coeffs%c1(2,:))
+ ctenseval4 = ctenseval4 + ctenseval4_1(Q, (/2/), coeffs%c1(3,:))
+ ctenseval4 = ctenseval4 + ctenseval4_1(Q, (/3/), coeffs%c1(4,:))
+ ctenseval4 = ctenseval4 + ctenseval4_2(Q, (/0,1/), coeffs%c2(1,:))
+ ctenseval4 = ctenseval4 + ctenseval4_2(Q, (/0,2/), coeffs%c2(2,:))
+ ctenseval4 = ctenseval4 + ctenseval4_2(Q, (/0,3/), coeffs%c2(3,:))
+ ctenseval4 = ctenseval4 + ctenseval4_2(Q, (/1,2/), coeffs%c2(4,:))
+ ctenseval4 = ctenseval4 + ctenseval4_2(Q, (/1,3/), coeffs%c2(5,:))
+ ctenseval4 = ctenseval4 + ctenseval4_2(Q, (/2,3/), coeffs%c2(6,:))
+ ctenseval4 = ctenseval4 + ctenseval4_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ ctenseval4 = ctenseval4 + ctenseval4_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ ctenseval4 = ctenseval4 + ctenseval4_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ ctenseval4 = ctenseval4 + ctenseval4_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ ctenseval4 = ctenseval4 + ctenseval4_4(Q, (/0,1,2,3/), coeffs%c4(1,:))
+end function ctenseval4
+!****f* src/interface/tens_rec/print_coeffs_4
+! NAME
+!
+! Subroutine print_coeffs_4
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank 4
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type coeff_type_4
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine print_coeffs_4(coeffs, unit)
+ ! generated by: write_print_coeffs
+ implicit none
+ type(coeff_type_4), intent(in) :: coeffs
+ integer, intent(in), optional :: unit
+ integer :: ch
+ if (present(unit)) then
+ ch = unit
+ else
+ ch = 6
+ end if
+ write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(1,1), ')*q(0)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,2), ')*q(0)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,3), ')*q(0)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,4), ')*q(0)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(2,1), ')*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,2), ')*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,3), ')*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,4), ')*q(1)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(3,1), ')*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,2), ')*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,3), ')*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,4), ')*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(4,1), ')*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,2), ')*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,3), ')*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,4), ')*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(1,1), ')*q(0)*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,2), ')*q(0)*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,3), ')*q(0)*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,4), ')*q(0)^2*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,5), ')*q(0)^2*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,6), ')*q(0)^3*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(2,1), ')*q(0)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,2), ')*q(0)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,3), ')*q(0)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,4), ')*q(0)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,5), ')*q(0)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,6), ')*q(0)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(3,1), ')*q(0)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,2), ')*q(0)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,3), ')*q(0)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,4), ')*q(0)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,5), ')*q(0)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,6), ')*q(0)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(4,1), ')*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,2), ')*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,3), ')*q(1)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,4), ')*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,5), ')*q(1)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,6), ')*q(1)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(5,1), ')*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,2), ')*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,3), ')*q(1)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,4), ')*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,5), ')*q(1)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,6), ')*q(1)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(6,1), ')*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,2), ')*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,3), ')*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,4), ')*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,5), ')*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,6), ')*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(1,1), ')*q(0)*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,2), ')*q(0)*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,3), ')*q(0)*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,4), ')*q(0)^2*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(2,1), ')*q(0)*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,2), ')*q(0)*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,3), ')*q(0)*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,4), ')*q(0)^2*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(3,1), ')*q(0)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,2), ')*q(0)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,3), ')*q(0)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,4), ')*q(0)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(4,1), ')*q(1)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,2), ')*q(1)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,3), ')*q(1)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,4), ')*q(1)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A21)') ' + (', coeffs%c4(1,1), ')*q(0)*q(1)*q(2)*q(3)'
+end subroutine print_coeffs_4
+!****f* src/interface/tens_rec/reconstruct4
+! NAME
+!
+! Subroutine reconstruct4
+!
+! USAGE
+!
+! call reconstruct4(numeval, cm0, cm1, cm2)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank 4,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type coeff_type_4, representing the
+! numerator at mu2=0
+! * cm1 -- coefficients of type type(coeff_type_2), representing the
+! tensor in front of mu2 [optional]
+! * cm2 -- coefficients of type type(coeff_type_2), representing the
+! tensor in front of mu2^2 [optional]
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+! only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+! is at most linear in mu2.
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine reconstruct4(numeval, cm0, cm1, cm2)
+ ! generated by: write_subroutine_reconstruct
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ type(coeff_type_4), intent(out) :: cm0
+ type(coeff_type_2), intent(out), optional :: cm1
+ type(coeff_type_2), intent(out), optional :: cm2
+ type(coeff_type_2) :: ca, cb
+ call solve4(numeval, 0.0_ki, cm0)
+ if (present(cm1)) then
+ if (present(cm2)) then
+ call solve2(numeval, +1.0_ki, ca, cm0)
+ call solve2(numeval, -1.0_ki, cb, cm0)
+ cm1%c0= 0.5_ki * (ca%c0 - cb%c0)
+ cm2%c0= 0.5_ki * (ca%c0 + cb%c0)
+ cm1%c1 = 0.5_ki * (ca%c1 - cb%c1)
+ cm2%c1 = 0.5_ki * (ca%c1 + cb%c1)
+ cm1%c2 = 0.5_ki * (ca%c2 - cb%c2)
+ cm2%c2 = 0.5_ki * (ca%c2 + cb%c2)
+ else
+ call solve2(numeval, +1.0_ki, cm1, cm0)
+ end if
+ end if
+end subroutine reconstruct4
+!****f* src/interface/tens_rec/solve5_1
+! NAME
+!
+! Subroutine solve5_1
+!
+! USAGE
+!
+! call solve5_1(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q5_1.
+! The matrix mat5_1 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_5 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve5_1(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(1), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_5), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(5) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ do i=1,5
+ Q(indices(1)) = q5_1(i,1)
+ xnum(i) = numeval(Q, mu2) - tenseval5(Q, coeffs, 0)
+ end do
+ coeffs%c1(idx,:) = matmul(mat5_1,xnum)
+end subroutine solve5_1
+!****f* src/interface/tens_rec/tenseval5_1
+! NAME
+!
+! Function tenseval5_1
+!
+! USAGE
+!
+! result = tenseval5_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(5) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval5_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(5), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval5_1
+ real(ki) :: q0
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(4) + coeffs(5)*q0
+ reg3 = acc*q0
+ acc = coeffs(3)
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(2)
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ tenseval5_1 = acc
+end function tenseval5_1
+!****f* src/interface/tens_rec/ctenseval5_1
+! NAME
+!
+! Function ctenseval5_1
+!
+! USAGE
+!
+! result = ctenseval5_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(5) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval5_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(5), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval5_1
+ complex(ki) :: q0
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(4) + coeffs(5)*q0
+ reg3 = acc*q0
+ acc = coeffs(3)
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(2)
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ ctenseval5_1 = acc
+end function ctenseval5_1
+!****f* src/interface/tens_rec/solve5_2
+! NAME
+!
+! Subroutine solve5_2
+!
+! USAGE
+!
+! call solve5_2(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q5_2.
+! The matrix mat5_2 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_5 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve5_2(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(2), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_5), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(10) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ do i=1,10
+ Q(indices(1)) = q5_2(i,1)
+ Q(indices(2)) = q5_2(i,2)
+ xnum(i) = numeval(Q, mu2) - tenseval5(Q, coeffs, 1)
+ end do
+ coeffs%c2(idx,:) = matmul(mat5_2,xnum)
+end subroutine solve5_2
+!****f* src/interface/tens_rec/tenseval5_2
+! NAME
+!
+! Function tenseval5_2
+!
+! USAGE
+!
+! result = tenseval5_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(10) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval5_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(10), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval5_2
+ real(ki) :: q0
+ real(ki) :: q1
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(7)*q1 + coeffs(9)*q0 + coeffs(6)
+ reg2 = acc*q0
+ acc = coeffs(4)*q1 + coeffs(3)
+ reg3 = acc*q1
+ acc = coeffs(2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc*q1
+ acc = coeffs(10)*q0 + coeffs(8)
+ reg3 = acc*q0
+ acc = coeffs(5)
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1
+ tenseval5_2 = acc
+end function tenseval5_2
+!****f* src/interface/tens_rec/ctenseval5_2
+! NAME
+!
+! Function ctenseval5_2
+!
+! USAGE
+!
+! result = ctenseval5_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(10) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval5_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(10), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval5_2
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(7)*q1 + coeffs(9)*q0 + coeffs(6)
+ reg2 = acc*q0
+ acc = coeffs(4)*q1 + coeffs(3)
+ reg3 = acc*q1
+ acc = coeffs(2)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc*q1
+ acc = coeffs(10)*q0 + coeffs(8)
+ reg3 = acc*q0
+ acc = coeffs(5)
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1
+ ctenseval5_2 = acc
+end function ctenseval5_2
+!****f* src/interface/tens_rec/solve5_3
+! NAME
+!
+! Subroutine solve5_3
+!
+! USAGE
+!
+! call solve5_3(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q5_3.
+! The matrix mat5_3 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_5 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve5_3(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(3), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_5), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(10) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ do i=1,10
+ Q(indices(1)) = q5_3(i,1)
+ Q(indices(2)) = q5_3(i,2)
+ Q(indices(3)) = q5_3(i,3)
+ xnum(i) = numeval(Q, mu2) - tenseval5(Q, coeffs, 2)
+ end do
+ coeffs%c3(idx,:) = matmul(mat5_3,xnum)
+end subroutine solve5_3
+!****f* src/interface/tens_rec/tenseval5_3
+! NAME
+!
+! Function tenseval5_3
+!
+! USAGE
+!
+! result = tenseval5_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(10) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval5_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(10), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval5_3
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(10)*q0 + coeffs(9)*q1 + coeffs(7) + coeffs(8)*q2
+ reg1 = acc*q0
+ acc = coeffs(6)*q1 + coeffs(4) + coeffs(5)*q2
+ reg2 = acc*q1
+ acc = coeffs(2) + coeffs(3)*q2
+ reg3 = acc*q2
+ acc = coeffs(1)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1*q2
+ tenseval5_3 = acc
+end function tenseval5_3
+!****f* src/interface/tens_rec/ctenseval5_3
+! NAME
+!
+! Function ctenseval5_3
+!
+! USAGE
+!
+! result = ctenseval5_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(10) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval5_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(10), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval5_3
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(10)*q0 + coeffs(9)*q1 + coeffs(7) + coeffs(8)*q2
+ reg1 = acc*q0
+ acc = coeffs(6)*q1 + coeffs(4) + coeffs(5)*q2
+ reg2 = acc*q1
+ acc = coeffs(2) + coeffs(3)*q2
+ reg3 = acc*q2
+ acc = coeffs(1)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1*q2
+ ctenseval5_3 = acc
+end function ctenseval5_3
+!****f* src/interface/tens_rec/solve5_4
+! NAME
+!
+! Subroutine solve5_4
+!
+! USAGE
+!
+! call solve5_4(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q5_4.
+! The matrix mat5_4 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_5 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve5_4(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(4), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_5), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(5) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ do i=1,5
+ Q(indices(1)) = q5_4(i,1)
+ Q(indices(2)) = q5_4(i,2)
+ Q(indices(3)) = q5_4(i,3)
+ Q(indices(4)) = q5_4(i,4)
+ xnum(i) = numeval(Q, mu2) - tenseval5(Q, coeffs, 3)
+ end do
+ coeffs%c4(idx,:) = matmul(mat5_4,xnum)
+end subroutine solve5_4
+!****f* src/interface/tens_rec/tenseval5_4
+! NAME
+!
+! Function tenseval5_4
+!
+! USAGE
+!
+! result = tenseval5_4(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 4 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(4): the set of non-zero indices.
+! * coeffs -- an array of dimension(5) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 4 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval5_4(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(4), intent(in) :: indices
+ complex(ki), dimension(5), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval5_4
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ real(ki) :: q3
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ q3 = Q(indices(4))
+ acc = coeffs(2)*q3 + coeffs(1) + coeffs(5)*q0 + coeffs(3)*q2 + coeffs(4)*q1
+ acc = acc*q0*q1*q2*q3
+ tenseval5_4 = acc
+end function tenseval5_4
+!****f* src/interface/tens_rec/ctenseval5_4
+! NAME
+!
+! Function ctenseval5_4
+!
+! USAGE
+!
+! result = ctenseval5_4(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 4 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(4): the set of non-zero indices.
+! * coeffs -- an array of dimension(5) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 4 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval5_4(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(4), intent(in) :: indices
+ complex(ki), dimension(5), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval5_4
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: q3
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ q3 = Q(indices(4))
+ acc = coeffs(2)*q3 + coeffs(1) + coeffs(5)*q0 + coeffs(3)*q2 + coeffs(4)*q1
+ acc = acc*q0*q1*q2*q3
+ ctenseval5_4 = acc
+end function ctenseval5_4
+!****f* src/interface/tens_rec/solve5
+! NAME
+!
+! Subroutine solve5
+!
+! USAGE
+!
+! call solve5(numeval, mu2, coeffs)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank 5
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type coeff_type_5 used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve5(numeval, mu2, coeffs)
+ ! generated by: write_subroutine_glob_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), intent(in) :: mu2
+ type(coeff_type_5), intent(inout) :: coeffs
+ coeffs%c0 = numeval((/0.0_ki,0.0_ki,0.0_ki,0.0_ki/), mu2)
+ call solve5_1(numeval, (/0/), mu2, coeffs, 1)
+ call solve5_1(numeval, (/1/), mu2, coeffs, 2)
+ call solve5_1(numeval, (/2/), mu2, coeffs, 3)
+ call solve5_1(numeval, (/3/), mu2, coeffs, 4)
+ call solve5_2(numeval, (/0,1/), mu2, coeffs, 1)
+ call solve5_2(numeval, (/0,2/), mu2, coeffs, 2)
+ call solve5_2(numeval, (/0,3/), mu2, coeffs, 3)
+ call solve5_2(numeval, (/1,2/), mu2, coeffs, 4)
+ call solve5_2(numeval, (/1,3/), mu2, coeffs, 5)
+ call solve5_2(numeval, (/2,3/), mu2, coeffs, 6)
+ call solve5_3(numeval, (/0,1,2/), mu2, coeffs, 1)
+ call solve5_3(numeval, (/0,1,3/), mu2, coeffs, 2)
+ call solve5_3(numeval, (/0,2,3/), mu2, coeffs, 3)
+ call solve5_3(numeval, (/1,2,3/), mu2, coeffs, 4)
+ call solve5_4(numeval, (/0,1,2,3/), mu2, coeffs, 1)
+end subroutine solve5
+!****f* src/interface/tens_rec/tenseval5
+! NAME
+!
+! Function tenseval5
+!
+! USAGE
+!
+! result = tenseval5(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_5
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval5(Q, coeffs, max_k)
+ ! generated by: write_function_glob_recon
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_5), intent(in) :: coeffs
+ integer, intent(in), optional :: max_k
+ complex(ki) :: tenseval5
+ integer :: maxk
+ if (present(max_k)) then
+ maxk = max_k
+ else
+ maxk = 4
+ end if
+ tenseval5 = coeffs%c0
+ if (1 .le. maxk) then
+ tenseval5 = tenseval5 + tenseval5_1(Q, (/0/), coeffs%c1(1,:))
+ tenseval5 = tenseval5 + tenseval5_1(Q, (/1/), coeffs%c1(2,:))
+ tenseval5 = tenseval5 + tenseval5_1(Q, (/2/), coeffs%c1(3,:))
+ tenseval5 = tenseval5 + tenseval5_1(Q, (/3/), coeffs%c1(4,:))
+ end if
+ if (2 .le. maxk) then
+ tenseval5 = tenseval5 + tenseval5_2(Q, (/0,1/), coeffs%c2(1,:))
+ tenseval5 = tenseval5 + tenseval5_2(Q, (/0,2/), coeffs%c2(2,:))
+ tenseval5 = tenseval5 + tenseval5_2(Q, (/0,3/), coeffs%c2(3,:))
+ tenseval5 = tenseval5 + tenseval5_2(Q, (/1,2/), coeffs%c2(4,:))
+ tenseval5 = tenseval5 + tenseval5_2(Q, (/1,3/), coeffs%c2(5,:))
+ tenseval5 = tenseval5 + tenseval5_2(Q, (/2,3/), coeffs%c2(6,:))
+ end if
+ if (3 .le. maxk) then
+ tenseval5 = tenseval5 + tenseval5_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ tenseval5 = tenseval5 + tenseval5_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ tenseval5 = tenseval5 + tenseval5_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ tenseval5 = tenseval5 + tenseval5_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ end if
+ if (4 .le. maxk) then
+ tenseval5 = tenseval5 + tenseval5_4(Q, (/0,1,2,3/), coeffs%c4(1,:))
+ end if
+end function tenseval5
+!****f* src/interface/tens_rec/ctenseval5
+! NAME
+!
+! Function ctenseval5
+!
+! USAGE
+!
+! result = ctenseval5(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_5
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval5(Q, coeffs)
+ ! generated by: write_function_glob_recon_complex
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_5), intent(in) :: coeffs
+ complex(ki) :: ctenseval5
+ ctenseval5 = coeffs%c0
+ ctenseval5 = ctenseval5 + ctenseval5_1(Q, (/0/), coeffs%c1(1,:))
+ ctenseval5 = ctenseval5 + ctenseval5_1(Q, (/1/), coeffs%c1(2,:))
+ ctenseval5 = ctenseval5 + ctenseval5_1(Q, (/2/), coeffs%c1(3,:))
+ ctenseval5 = ctenseval5 + ctenseval5_1(Q, (/3/), coeffs%c1(4,:))
+ ctenseval5 = ctenseval5 + ctenseval5_2(Q, (/0,1/), coeffs%c2(1,:))
+ ctenseval5 = ctenseval5 + ctenseval5_2(Q, (/0,2/), coeffs%c2(2,:))
+ ctenseval5 = ctenseval5 + ctenseval5_2(Q, (/0,3/), coeffs%c2(3,:))
+ ctenseval5 = ctenseval5 + ctenseval5_2(Q, (/1,2/), coeffs%c2(4,:))
+ ctenseval5 = ctenseval5 + ctenseval5_2(Q, (/1,3/), coeffs%c2(5,:))
+ ctenseval5 = ctenseval5 + ctenseval5_2(Q, (/2,3/), coeffs%c2(6,:))
+ ctenseval5 = ctenseval5 + ctenseval5_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ ctenseval5 = ctenseval5 + ctenseval5_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ ctenseval5 = ctenseval5 + ctenseval5_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ ctenseval5 = ctenseval5 + ctenseval5_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ ctenseval5 = ctenseval5 + ctenseval5_4(Q, (/0,1,2,3/), coeffs%c4(1,:))
+end function ctenseval5
+!****f* src/interface/tens_rec/print_coeffs_5
+! NAME
+!
+! Subroutine print_coeffs_5
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank 5
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type coeff_type_5
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine print_coeffs_5(coeffs, unit)
+ ! generated by: write_print_coeffs
+ implicit none
+ type(coeff_type_5), intent(in) :: coeffs
+ integer, intent(in), optional :: unit
+ integer :: ch
+ if (present(unit)) then
+ ch = unit
+ else
+ ch = 6
+ end if
+ write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(1,1), ')*q(0)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,2), ')*q(0)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,3), ')*q(0)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,4), ')*q(0)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,5), ')*q(0)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(2,1), ')*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,2), ')*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,3), ')*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,4), ')*q(1)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,5), ')*q(1)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(3,1), ')*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,2), ')*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,3), ')*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,4), ')*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,5), ')*q(2)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(4,1), ')*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,2), ')*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,3), ')*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,4), ')*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,5), ')*q(3)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(1,1), ')*q(0)*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,2), ')*q(0)*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,3), ')*q(0)*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,4), ')*q(0)*q(1)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,5), ')*q(0)^2*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,6), ')*q(0)^2*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,7), ')*q(0)^2*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,8), ')*q(0)^3*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,9), ')*q(0)^3*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,10), ')*q(0)^4*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(2,1), ')*q(0)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,2), ')*q(0)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,3), ')*q(0)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,4), ')*q(0)*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,5), ')*q(0)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,6), ')*q(0)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,7), ')*q(0)^2*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,8), ')*q(0)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,9), ')*q(0)^3*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,10), ')*q(0)^4*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(3,1), ')*q(0)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,2), ')*q(0)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,3), ')*q(0)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,4), ')*q(0)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,5), ')*q(0)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,6), ')*q(0)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,7), ')*q(0)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,8), ')*q(0)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,9), ')*q(0)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,10), ')*q(0)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(4,1), ')*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,2), ')*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,3), ')*q(1)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,4), ')*q(1)*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,5), ')*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,6), ')*q(1)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,7), ')*q(1)^2*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,8), ')*q(1)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,9), ')*q(1)^3*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,10), ')*q(1)^4*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(5,1), ')*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,2), ')*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,3), ')*q(1)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,4), ')*q(1)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,5), ')*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,6), ')*q(1)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,7), ')*q(1)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,8), ')*q(1)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,9), ')*q(1)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,10), ')*q(1)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(6,1), ')*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,2), ')*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,3), ')*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,4), ')*q(2)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,5), ')*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,6), ')*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,7), ')*q(2)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,8), ')*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,9), ')*q(2)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,10), ')*q(2)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(1,1), ')*q(0)*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,2), ')*q(0)*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,3), ')*q(0)*q(1)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,4), ')*q(0)*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,5), ')*q(0)*q(1)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,6), ')*q(0)*q(1)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,7), ')*q(0)^2*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,8), ')*q(0)^2*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,9), ')*q(0)^2*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,10), ')*q(0)^3*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(2,1), ')*q(0)*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,2), ')*q(0)*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,3), ')*q(0)*q(1)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,4), ')*q(0)*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,5), ')*q(0)*q(1)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,6), ')*q(0)*q(1)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,7), ')*q(0)^2*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,8), ')*q(0)^2*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,9), ')*q(0)^2*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,10), ')*q(0)^3*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(3,1), ')*q(0)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,2), ')*q(0)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,3), ')*q(0)*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,4), ')*q(0)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,5), ')*q(0)*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,6), ')*q(0)*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,7), ')*q(0)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,8), ')*q(0)^2*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,9), ')*q(0)^2*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,10), ')*q(0)^3*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(4,1), ')*q(1)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,2), ')*q(1)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,3), ')*q(1)*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,4), ')*q(1)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,5), ')*q(1)*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,6), ')*q(1)*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,7), ')*q(1)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,8), ')*q(1)^2*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,9), ')*q(1)^2*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,10), ')*q(1)^3*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A21)') ' + (', coeffs%c4(1,1), ')*q(0)*q(1)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,2), ')*q(0)*q(1)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,3), ')*q(0)*q(1)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,4), ')*q(0)*q(1)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,5), ')*q(0)^2*q(1)*q(2)*q(3)'
+end subroutine print_coeffs_5
+!****f* src/interface/tens_rec/reconstruct5
+! NAME
+!
+! Subroutine reconstruct5
+!
+! USAGE
+!
+! call reconstruct5(numeval, cm0, cm1, cm2)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank 5,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type coeff_type_5, representing the
+! numerator at mu2=0
+! * cm1 -- coefficients of type type(coeff_type_3), representing the
+! tensor in front of mu2 [optional]
+! * cm2 -- coefficients of type type(coeff_type_3), representing the
+! tensor in front of mu2^2 [optional]
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+! only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+! is at most linear in mu2.
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine reconstruct5(numeval, cm0, cm1, cm2)
+ ! generated by: write_subroutine_reconstruct
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ type(coeff_type_5), intent(out) :: cm0
+ type(coeff_type_3), intent(out), optional :: cm1
+ type(coeff_type_3), intent(out), optional :: cm2
+ type(coeff_type_3) :: ca, cb
+ call solve5(numeval, 0.0_ki, cm0)
+ if (present(cm1)) then
+ if (present(cm2)) then
+ call solve3(numeval, +1.0_ki, ca, cm0)
+ call solve3(numeval, -1.0_ki, cb, cm0)
+ cm1%c0= 0.5_ki * (ca%c0 - cb%c0)
+ cm2%c0= 0.5_ki * (ca%c0 + cb%c0)
+ cm1%c1 = 0.5_ki * (ca%c1 - cb%c1)
+ cm2%c1 = 0.5_ki * (ca%c1 + cb%c1)
+ cm1%c2 = 0.5_ki * (ca%c2 - cb%c2)
+ cm2%c2 = 0.5_ki * (ca%c2 + cb%c2)
+ cm1%c3 = 0.5_ki * (ca%c3 - cb%c3)
+ cm2%c3 = 0.5_ki * (ca%c3 + cb%c3)
+ else
+ call solve3(numeval, +1.0_ki, cm1, cm0)
+ end if
+ end if
+end subroutine reconstruct5
+!****f* src/interface/tens_rec/solve6_1
+! NAME
+!
+! Subroutine solve6_1
+!
+! USAGE
+!
+! call solve6_1(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q6_1.
+! The matrix mat6_1 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_6 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve6_1(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(1), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_6), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(6) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ do i=1,6
+ Q(indices(1)) = q6_1(i,1)
+ xnum(i) = numeval(Q, mu2) - tenseval6(Q, coeffs, 0)
+ end do
+ coeffs%c1(idx,:) = matmul(mat6_1,xnum)
+end subroutine solve6_1
+!****f* src/interface/tens_rec/tenseval6_1
+! NAME
+!
+! Function tenseval6_1
+!
+! USAGE
+!
+! result = tenseval6_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(6) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval6_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(6), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval6_1
+ real(ki) :: q0
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(5) + coeffs(6)*q0
+ reg4 = acc*q0
+ acc = coeffs(4)
+ acc = acc + reg4
+ reg3 = acc*q0
+ acc = coeffs(3)
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(2)
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ tenseval6_1 = acc
+end function tenseval6_1
+!****f* src/interface/tens_rec/ctenseval6_1
+! NAME
+!
+! Function ctenseval6_1
+!
+! USAGE
+!
+! result = ctenseval6_1(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 1 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(1): the set of non-zero indices.
+! * coeffs -- an array of dimension(6) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 1 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval6_1(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(1), intent(in) :: indices
+ complex(ki), dimension(6), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval6_1
+ complex(ki) :: q0
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ acc = coeffs(5) + coeffs(6)*q0
+ reg4 = acc*q0
+ acc = coeffs(4)
+ acc = acc + reg4
+ reg3 = acc*q0
+ acc = coeffs(3)
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(2)
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(1)
+ acc = acc + reg1
+ acc = acc*q0
+ ctenseval6_1 = acc
+end function ctenseval6_1
+!****f* src/interface/tens_rec/solve6_2
+! NAME
+!
+! Subroutine solve6_2
+!
+! USAGE
+!
+! call solve6_2(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q6_2.
+! The matrix mat6_2 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_6 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve6_2(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(2), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_6), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(15) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ do i=1,15
+ Q(indices(1)) = q6_2(i,1)
+ Q(indices(2)) = q6_2(i,2)
+ xnum(i) = numeval(Q, mu2) - tenseval6(Q, coeffs, 1)
+ end do
+ coeffs%c2(idx,:) = matmul(mat6_2,xnum)
+end subroutine solve6_2
+!****f* src/interface/tens_rec/tenseval6_2
+! NAME
+!
+! Function tenseval6_2
+!
+! USAGE
+!
+! result = tenseval6_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(15) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval6_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(15), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval6_2
+ real(ki) :: q0
+ real(ki) :: q1
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(12)*q1 + coeffs(14)*q0 + coeffs(11)
+ reg3 = acc*q0
+ acc = coeffs(9)*q1 + coeffs(8)
+ reg4 = acc*q1
+ acc = coeffs(7)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc*q1
+ acc = coeffs(15)*q0 + coeffs(13)
+ reg4 = acc*q0
+ acc = coeffs(10)
+ acc = acc + reg4
+ reg3 = acc*q0
+ acc = coeffs(6)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(5)*q1 + coeffs(4)
+ reg4 = acc*q1
+ acc = coeffs(3)
+ acc = acc + reg4
+ reg3 = acc*q1
+ acc = coeffs(2)
+ acc = acc + reg3
+ reg2 = acc*q1
+ acc = coeffs(1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1
+ tenseval6_2 = acc
+end function tenseval6_2
+!****f* src/interface/tens_rec/ctenseval6_2
+! NAME
+!
+! Function ctenseval6_2
+!
+! USAGE
+!
+! result = ctenseval6_2(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 2 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(2): the set of non-zero indices.
+! * coeffs -- an array of dimension(15) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 2 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval6_2(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(2), intent(in) :: indices
+ complex(ki), dimension(15), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval6_2
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ acc = coeffs(12)*q1 + coeffs(14)*q0 + coeffs(11)
+ reg3 = acc*q0
+ acc = coeffs(9)*q1 + coeffs(8)
+ reg4 = acc*q1
+ acc = coeffs(7)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc*q1
+ acc = coeffs(15)*q0 + coeffs(13)
+ reg4 = acc*q0
+ acc = coeffs(10)
+ acc = acc + reg4
+ reg3 = acc*q0
+ acc = coeffs(6)
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc*q0
+ acc = coeffs(5)*q1 + coeffs(4)
+ reg4 = acc*q1
+ acc = coeffs(3)
+ acc = acc + reg4
+ reg3 = acc*q1
+ acc = coeffs(2)
+ acc = acc + reg3
+ reg2 = acc*q1
+ acc = coeffs(1)
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1
+ ctenseval6_2 = acc
+end function ctenseval6_2
+!****f* src/interface/tens_rec/solve6_3
+! NAME
+!
+! Subroutine solve6_3
+!
+! USAGE
+!
+! call solve6_3(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q6_3.
+! The matrix mat6_3 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_6 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve6_3(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(3), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_6), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(20) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ Q(:)=0.0_ki
+ do i=1,20
+ Q(indices(1)) = q6_3(i,1)
+ Q(indices(2)) = q6_3(i,2)
+ Q(indices(3)) = q6_3(i,3)
+ xnum(i) = numeval(Q, mu2) - tenseval6(Q, coeffs, 2)
+ end do
+ coeffs%c3(idx,:) = matmul(mat6_3,xnum)
+end subroutine solve6_3
+!****f* src/interface/tens_rec/tenseval6_3
+! NAME
+!
+! Function tenseval6_3
+!
+! USAGE
+!
+! result = tenseval6_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(20) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval6_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(20), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval6_3
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(18)*q0 + coeffs(15)*q1 + coeffs(12) + coeffs(13)*q2
+ reg2 = acc*q0
+ acc = coeffs(9)*q1 + coeffs(6) + coeffs(7)*q2
+ reg3 = acc*q1
+ acc = coeffs(3) + coeffs(4)*q2
+ reg4 = acc*q2
+ acc = coeffs(2)
+ acc = acc + reg4
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc*q2
+ acc = coeffs(20)*q0 + coeffs(19)*q1 + coeffs(17)
+ reg3 = acc*q0
+ acc = coeffs(16)*q1 + coeffs(14)
+ reg4 = acc*q1
+ acc = coeffs(11)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(10)*q1 + coeffs(8)
+ reg4 = acc*q1
+ acc = coeffs(5)
+ acc = acc + reg4
+ reg3 = acc*q1
+ acc = coeffs(1)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1*q2
+ tenseval6_3 = acc
+end function tenseval6_3
+!****f* src/interface/tens_rec/ctenseval6_3
+! NAME
+!
+! Function ctenseval6_3
+!
+! USAGE
+!
+! result = ctenseval6_3(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 3 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(3): the set of non-zero indices.
+! * coeffs -- an array of dimension(20) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 3 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval6_3(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(3), intent(in) :: indices
+ complex(ki), dimension(20), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval6_3
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ acc = coeffs(18)*q0 + coeffs(15)*q1 + coeffs(12) + coeffs(13)*q2
+ reg2 = acc*q0
+ acc = coeffs(9)*q1 + coeffs(6) + coeffs(7)*q2
+ reg3 = acc*q1
+ acc = coeffs(3) + coeffs(4)*q2
+ reg4 = acc*q2
+ acc = coeffs(2)
+ acc = acc + reg4
+ acc = acc + reg3
+ acc = acc + reg2
+ reg1 = acc*q2
+ acc = coeffs(20)*q0 + coeffs(19)*q1 + coeffs(17)
+ reg3 = acc*q0
+ acc = coeffs(16)*q1 + coeffs(14)
+ reg4 = acc*q1
+ acc = coeffs(11)
+ acc = acc + reg4
+ acc = acc + reg3
+ reg2 = acc*q0
+ acc = coeffs(10)*q1 + coeffs(8)
+ reg4 = acc*q1
+ acc = coeffs(5)
+ acc = acc + reg4
+ reg3 = acc*q1
+ acc = coeffs(1)
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1*q2
+ ctenseval6_3 = acc
+end function ctenseval6_3
+!****f* src/interface/tens_rec/solve6_4
+! NAME
+!
+! Subroutine solve6_4
+!
+! USAGE
+!
+! call solve6_4(numeval, indices, mu2, coeffs, idx)
+!
+! DESCRIPTION
+!
+! This subroutine solves a system generated by substituting the
+! non-zero components of q in the numerator function numeval(q,mu2)
+! for the values given in the array q6_4.
+! The matrix mat6_4 is the inverse matrix of the left hand side
+! of the original system.
+!
+! INPUTS
+!
+! * numeval -- a function representing the numerator function
+! N(q, mu2) where q(0:3) is a real vector,
+! mu2 is a real number and the result of numeval is complex
+! * indices -- array of integers indicating the non-zero entries of q
+! * mu2 -- fixed value for mu2 passed to numeval
+! * coeffs -- coefficients of type coeff_type_6 to be solved for
+! * idx -- label indicating which entries in coeffs the given set
+! of indices corresponds to
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! No return value
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve6_4(numeval, indices, mu2, coeffs, idx)
+ ! generated by: write_subroutine_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ integer, dimension(4), intent(in) :: indices
+ real(ki), intent(in) :: mu2
+ type(coeff_type_6), intent(inout) :: coeffs
+ integer, intent(in) :: idx
+ complex(ki), dimension(15) :: xnum
+ real(ki), dimension(0:3) :: Q
+ integer :: i
+ do i=1,15
+ Q(indices(1)) = q6_4(i,1)
+ Q(indices(2)) = q6_4(i,2)
+ Q(indices(3)) = q6_4(i,3)
+ Q(indices(4)) = q6_4(i,4)
+ xnum(i) = numeval(Q, mu2) - tenseval6(Q, coeffs, 3)
+ end do
+ coeffs%c4(idx,:) = matmul(mat6_4,xnum)
+end subroutine solve6_4
+!****f* src/interface/tens_rec/tenseval6_4
+! NAME
+!
+! Function tenseval6_4
+!
+! USAGE
+!
+! result = tenseval6_4(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 4 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * indices -- array of dimension(4): the set of non-zero indices.
+! * coeffs -- an array of dimension(15) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 4 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval6_4(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(4), intent(in) :: indices
+ complex(ki), dimension(15), intent(in) :: coeffs
+ real(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: tenseval6_4
+ real(ki) :: q0
+ real(ki) :: q1
+ real(ki) :: q2
+ real(ki) :: q3
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ q3 = Q(indices(4))
+ acc = coeffs(12)*q3 + coeffs(11) + coeffs(15)*q0 + coeffs(14)*q1
+ acc = acc + coeffs(13)*q2
+ reg1 = acc*q0
+ acc = coeffs(8)*q3 + coeffs(7) + coeffs(10)*q1 + coeffs(9)*q2
+ reg2 = acc*q1
+ acc = coeffs(5)*q3 + coeffs(4) + coeffs(6)*q2
+ reg3 = acc*q2
+ acc = coeffs(3)*q3 + coeffs(2)
+ reg4 = acc*q3
+ acc = coeffs(1)
+ acc = acc + reg4
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1*q2*q3
+ tenseval6_4 = acc
+end function tenseval6_4
+!****f* src/interface/tens_rec/ctenseval6_4
+! NAME
+!
+! Function ctenseval6_4
+!
+! USAGE
+!
+! result = ctenseval6_4(Q, indices, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes the part of N(Q) from the coefficients where Q has exactly
+! 4 non-zero entries identified by the array indices.
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * indices -- array of dimension(4): the set of non-zero indices.
+! * coeffs -- an array of dimension(15) holding the coefficients.
+! as defined in the corresponding derived type.
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) coming from the terms where
+! exactly the 4 entries of q specified in indices are non-zero.
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval6_4(Q, indices, coeffs)
+ ! generated by: write_function_recon
+ implicit none
+ integer, dimension(4), intent(in) :: indices
+ complex(ki), dimension(15), intent(in) :: coeffs
+ complex(ki), dimension(0:3), intent(in) :: Q
+ complex(ki) :: ctenseval6_4
+ complex(ki) :: q0
+ complex(ki) :: q1
+ complex(ki) :: q2
+ complex(ki) :: q3
+ complex(ki) :: reg4
+ complex(ki) :: reg2
+ complex(ki) :: reg3
+ complex(ki) :: reg1
+ complex(ki) :: acc
+ q0 = Q(indices(1))
+ q1 = Q(indices(2))
+ q2 = Q(indices(3))
+ q3 = Q(indices(4))
+ acc = coeffs(12)*q3 + coeffs(11) + coeffs(15)*q0 + coeffs(14)*q1
+ acc = acc + coeffs(13)*q2
+ reg1 = acc*q0
+ acc = coeffs(8)*q3 + coeffs(7) + coeffs(10)*q1 + coeffs(9)*q2
+ reg2 = acc*q1
+ acc = coeffs(5)*q3 + coeffs(4) + coeffs(6)*q2
+ reg3 = acc*q2
+ acc = coeffs(3)*q3 + coeffs(2)
+ reg4 = acc*q3
+ acc = coeffs(1)
+ acc = acc + reg4
+ acc = acc + reg3
+ acc = acc + reg2
+ acc = acc + reg1
+ acc = acc*q0*q1*q2*q3
+ ctenseval6_4 = acc
+end function ctenseval6_4
+!****f* src/interface/tens_rec/solve6
+! NAME
+!
+! Subroutine solve6
+!
+! USAGE
+!
+! call solve6(numeval, mu2, coeffs)
+!
+! DESCRIPTION
+!
+! Determines the tensor coefficients of a numerator for a fixed value
+! of mu^2 with maximum rank 6
+!
+! INPUTS
+!
+! * numeval -- function representing the numerator of the problem
+! * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+! * coeffs -- a record of type coeff_type_6 used to store the result
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine solve6(numeval, mu2, coeffs)
+ ! generated by: write_subroutine_glob_solve
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ real(ki), intent(in) :: mu2
+ type(coeff_type_6), intent(inout) :: coeffs
+ coeffs%c0 = numeval((/0.0_ki,0.0_ki,0.0_ki,0.0_ki/), mu2)
+ call solve6_1(numeval, (/0/), mu2, coeffs, 1)
+ call solve6_1(numeval, (/1/), mu2, coeffs, 2)
+ call solve6_1(numeval, (/2/), mu2, coeffs, 3)
+ call solve6_1(numeval, (/3/), mu2, coeffs, 4)
+ call solve6_2(numeval, (/0,1/), mu2, coeffs, 1)
+ call solve6_2(numeval, (/0,2/), mu2, coeffs, 2)
+ call solve6_2(numeval, (/0,3/), mu2, coeffs, 3)
+ call solve6_2(numeval, (/1,2/), mu2, coeffs, 4)
+ call solve6_2(numeval, (/1,3/), mu2, coeffs, 5)
+ call solve6_2(numeval, (/2,3/), mu2, coeffs, 6)
+ call solve6_3(numeval, (/0,1,2/), mu2, coeffs, 1)
+ call solve6_3(numeval, (/0,1,3/), mu2, coeffs, 2)
+ call solve6_3(numeval, (/0,2,3/), mu2, coeffs, 3)
+ call solve6_3(numeval, (/1,2,3/), mu2, coeffs, 4)
+ call solve6_4(numeval, (/0,1,2,3/), mu2, coeffs, 1)
+end subroutine solve6
+!****f* src/interface/tens_rec/tenseval6
+! NAME
+!
+! Function tenseval6
+!
+! USAGE
+!
+! result = tenseval6(Q, coeffs, max_k)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a real vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_6
+! * max_k -- optional integer argument limiting the the reconstruction
+! to a subset of terms with no more than max_k components of q
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function tenseval6(Q, coeffs, max_k)
+ ! generated by: write_function_glob_recon
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_6), intent(in) :: coeffs
+ integer, intent(in), optional :: max_k
+ complex(ki) :: tenseval6
+ integer :: maxk
+ if (present(max_k)) then
+ maxk = max_k
+ else
+ maxk = 4
+ end if
+ tenseval6 = coeffs%c0
+ if (1 .le. maxk) then
+ tenseval6 = tenseval6 + tenseval6_1(Q, (/0/), coeffs%c1(1,:))
+ tenseval6 = tenseval6 + tenseval6_1(Q, (/1/), coeffs%c1(2,:))
+ tenseval6 = tenseval6 + tenseval6_1(Q, (/2/), coeffs%c1(3,:))
+ tenseval6 = tenseval6 + tenseval6_1(Q, (/3/), coeffs%c1(4,:))
+ end if
+ if (2 .le. maxk) then
+ tenseval6 = tenseval6 + tenseval6_2(Q, (/0,1/), coeffs%c2(1,:))
+ tenseval6 = tenseval6 + tenseval6_2(Q, (/0,2/), coeffs%c2(2,:))
+ tenseval6 = tenseval6 + tenseval6_2(Q, (/0,3/), coeffs%c2(3,:))
+ tenseval6 = tenseval6 + tenseval6_2(Q, (/1,2/), coeffs%c2(4,:))
+ tenseval6 = tenseval6 + tenseval6_2(Q, (/1,3/), coeffs%c2(5,:))
+ tenseval6 = tenseval6 + tenseval6_2(Q, (/2,3/), coeffs%c2(6,:))
+ end if
+ if (3 .le. maxk) then
+ tenseval6 = tenseval6 + tenseval6_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ tenseval6 = tenseval6 + tenseval6_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ tenseval6 = tenseval6 + tenseval6_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ tenseval6 = tenseval6 + tenseval6_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ end if
+ if (4 .le. maxk) then
+ tenseval6 = tenseval6 + tenseval6_4(Q, (/0,1,2,3/), coeffs%c4(1,:))
+ end if
+end function tenseval6
+!****f* src/interface/tens_rec/ctenseval6
+! NAME
+!
+! Function ctenseval6
+!
+! USAGE
+!
+! result = ctenseval6(Q, coeffs)
+!
+! DESCRIPTION
+!
+! Recomputes N(Q) from a set of tensor coefficients
+!
+! INPUTS
+!
+! * Q -- a complex vector of dimension(0:3)
+! * coeffs -- a record of type coeff_type_6
+!
+! SIDE EFFECTS
+!
+! No side effect
+!
+! RETURN VALUE
+!
+! The value of the part of N(q) as reconstructed from the coefficients
+!
+! EXAMPLE
+!
+!
+!*****
+pure function ctenseval6(Q, coeffs)
+ ! generated by: write_function_glob_recon_complex
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: Q
+ type(coeff_type_6), intent(in) :: coeffs
+ complex(ki) :: ctenseval6
+ ctenseval6 = coeffs%c0
+ ctenseval6 = ctenseval6 + ctenseval6_1(Q, (/0/), coeffs%c1(1,:))
+ ctenseval6 = ctenseval6 + ctenseval6_1(Q, (/1/), coeffs%c1(2,:))
+ ctenseval6 = ctenseval6 + ctenseval6_1(Q, (/2/), coeffs%c1(3,:))
+ ctenseval6 = ctenseval6 + ctenseval6_1(Q, (/3/), coeffs%c1(4,:))
+ ctenseval6 = ctenseval6 + ctenseval6_2(Q, (/0,1/), coeffs%c2(1,:))
+ ctenseval6 = ctenseval6 + ctenseval6_2(Q, (/0,2/), coeffs%c2(2,:))
+ ctenseval6 = ctenseval6 + ctenseval6_2(Q, (/0,3/), coeffs%c2(3,:))
+ ctenseval6 = ctenseval6 + ctenseval6_2(Q, (/1,2/), coeffs%c2(4,:))
+ ctenseval6 = ctenseval6 + ctenseval6_2(Q, (/1,3/), coeffs%c2(5,:))
+ ctenseval6 = ctenseval6 + ctenseval6_2(Q, (/2,3/), coeffs%c2(6,:))
+ ctenseval6 = ctenseval6 + ctenseval6_3(Q, (/0,1,2/), coeffs%c3(1,:))
+ ctenseval6 = ctenseval6 + ctenseval6_3(Q, (/0,1,3/), coeffs%c3(2,:))
+ ctenseval6 = ctenseval6 + ctenseval6_3(Q, (/0,2,3/), coeffs%c3(3,:))
+ ctenseval6 = ctenseval6 + ctenseval6_3(Q, (/1,2,3/), coeffs%c3(4,:))
+ ctenseval6 = ctenseval6 + ctenseval6_4(Q, (/0,1,2,3/), coeffs%c4(1,:))
+end function ctenseval6
+!****f* src/interface/tens_rec/print_coeffs_6
+! NAME
+!
+! Subroutine print_coeffs_6
+!
+! Visible through public interface print_coeffs
+!
+! USAGE
+!
+! call print_coeffs(coeffs,unit=6)
+!
+! DESCRIPTION
+!
+! Prints the coefficients of a numerator of maximum rank 6
+! in human readable form.
+!
+! INPUTS
+!
+! * coeffs -- a record of type coeff_type_6
+! * unit -- number of an open file, defaults to stdout (unit=6)
+!
+! SIDE EFFECTS
+!
+! Prints to the given file
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine print_coeffs_6(coeffs, unit)
+ ! generated by: write_print_coeffs
+ implicit none
+ type(coeff_type_6), intent(in) :: coeffs
+ integer, intent(in), optional :: unit
+ integer :: ch
+ if (present(unit)) then
+ ch = unit
+ else
+ ch = 6
+ end if
+ write(ch,'(A4,G24.16,1x,G24.16,A1)') ' (', coeffs%c0, ')'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(1,1), ')*q(0)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,2), ')*q(0)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,3), ')*q(0)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,4), ')*q(0)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,5), ')*q(0)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(1,6), ')*q(0)^6'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(2,1), ')*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,2), ')*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,3), ')*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,4), ')*q(1)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,5), ')*q(1)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(2,6), ')*q(1)^6'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(3,1), ')*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,2), ')*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,3), ')*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,4), ')*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,5), ')*q(2)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(3,6), ')*q(2)^6'
+ write(ch,'(A4,G24.16,1x,G24.16,A6)') ' + (', coeffs%c1(4,1), ')*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,2), ')*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,3), ')*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,4), ')*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,5), ')*q(3)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A8)') ' + (', coeffs%c1(4,6), ')*q(3)^6'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(1,1), ')*q(0)*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,2), ')*q(0)*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,3), ')*q(0)*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,4), ')*q(0)*q(1)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,5), ')*q(0)*q(1)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,6), ')*q(0)^2*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,7), ')*q(0)^2*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,8), ')*q(0)^2*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,9), ')*q(0)^2*q(1)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,10), ')*q(0)^3*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,11), ')*q(0)^3*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,12), ')*q(0)^3*q(1)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,13), ')*q(0)^4*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(1,14), ')*q(0)^4*q(1)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(1,15), ')*q(0)^5*q(1)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(2,1), ')*q(0)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,2), ')*q(0)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,3), ')*q(0)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,4), ')*q(0)*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,5), ')*q(0)*q(2)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,6), ')*q(0)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,7), ')*q(0)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,8), ')*q(0)^2*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,9), ')*q(0)^2*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,10), ')*q(0)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,11), ')*q(0)^3*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,12), ')*q(0)^3*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,13), ')*q(0)^4*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(2,14), ')*q(0)^4*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(2,15), ')*q(0)^5*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(3,1), ')*q(0)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,2), ')*q(0)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,3), ')*q(0)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,4), ')*q(0)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,5), ')*q(0)*q(3)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,6), ')*q(0)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,7), ')*q(0)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,8), ')*q(0)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,9), ')*q(0)^2*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,10), ')*q(0)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,11), ')*q(0)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,12), ')*q(0)^3*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,13), ')*q(0)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(3,14), ')*q(0)^4*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(3,15), ')*q(0)^5*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(4,1), ')*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,2), ')*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,3), ')*q(1)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,4), ')*q(1)*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,5), ')*q(1)*q(2)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,6), ')*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,7), ')*q(1)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,8), ')*q(1)^2*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,9), ')*q(1)^2*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,10), ')*q(1)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,11), ')*q(1)^3*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,12), ')*q(1)^3*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,13), ')*q(1)^4*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(4,14), ')*q(1)^4*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(4,15), ')*q(1)^5*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(5,1), ')*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,2), ')*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,3), ')*q(1)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,4), ')*q(1)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,5), ')*q(1)*q(3)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,6), ')*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,7), ')*q(1)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,8), ')*q(1)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,9), ')*q(1)^2*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,10), ')*q(1)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,11), ')*q(1)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,12), ')*q(1)^3*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,13), ')*q(1)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(5,14), ')*q(1)^4*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(5,15), ')*q(1)^5*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A11)') ' + (', coeffs%c2(6,1), ')*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,2), ')*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,3), ')*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,4), ')*q(2)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,5), ')*q(2)*q(3)^5'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,6), ')*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,7), ')*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,8), ')*q(2)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,9), ')*q(2)^2*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,10), ')*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,11), ')*q(2)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,12), ')*q(2)^3*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,13), ')*q(2)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A15)') ' + (', coeffs%c2(6,14), ')*q(2)^4*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A13)') ' + (', coeffs%c2(6,15), ')*q(2)^5*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(1,1), ')*q(0)*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,2), ')*q(0)*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,3), ')*q(0)*q(1)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,4), ')*q(0)*q(1)*q(2)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,5), ')*q(0)*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,6), ')*q(0)*q(1)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,7), ')*q(0)*q(1)^2*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,8), ')*q(0)*q(1)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,9), ')*q(0)*q(1)^3*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,10), ')*q(0)*q(1)^4*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,11), ')*q(0)^2*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,12), ')*q(0)^2*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,13), ')*q(0)^2*q(1)*q(2)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,14), ')*q(0)^2*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A22)') ' + (', coeffs%c3(1,15), ')*q(0)^2*q(1)^2*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,16), ')*q(0)^2*q(1)^3*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,17), ')*q(0)^3*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,18), ')*q(0)^3*q(1)*q(2)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(1,19), ')*q(0)^3*q(1)^2*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(1,20), ')*q(0)^4*q(1)*q(2)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(2,1), ')*q(0)*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,2), ')*q(0)*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,3), ')*q(0)*q(1)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,4), ')*q(0)*q(1)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,5), ')*q(0)*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,6), ')*q(0)*q(1)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,7), ')*q(0)*q(1)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,8), ')*q(0)*q(1)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,9), ')*q(0)*q(1)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,10), ')*q(0)*q(1)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,11), ')*q(0)^2*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,12), ')*q(0)^2*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,13), ')*q(0)^2*q(1)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,14), ')*q(0)^2*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A22)') ' + (', coeffs%c3(2,15), ')*q(0)^2*q(1)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,16), ')*q(0)^2*q(1)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,17), ')*q(0)^3*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,18), ')*q(0)^3*q(1)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(2,19), ')*q(0)^3*q(1)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(2,20), ')*q(0)^4*q(1)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(3,1), ')*q(0)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,2), ')*q(0)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,3), ')*q(0)*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,4), ')*q(0)*q(2)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,5), ')*q(0)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,6), ')*q(0)*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,7), ')*q(0)*q(2)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,8), ')*q(0)*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,9), ')*q(0)*q(2)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,10), ')*q(0)*q(2)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,11), ')*q(0)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,12), ')*q(0)^2*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,13), ')*q(0)^2*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,14), ')*q(0)^2*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A22)') ' + (', coeffs%c3(3,15), ')*q(0)^2*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,16), ')*q(0)^2*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,17), ')*q(0)^3*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,18), ')*q(0)^3*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(3,19), ')*q(0)^3*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(3,20), ')*q(0)^4*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A16)') ' + (', coeffs%c3(4,1), ')*q(1)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,2), ')*q(1)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,3), ')*q(1)*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,4), ')*q(1)*q(2)*q(3)^4'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,5), ')*q(1)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,6), ')*q(1)*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,7), ')*q(1)*q(2)^2*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,8), ')*q(1)*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,9), ')*q(1)*q(2)^3*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,10), ')*q(1)*q(2)^4*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,11), ')*q(1)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,12), ')*q(1)^2*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,13), ')*q(1)^2*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,14), ')*q(1)^2*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A22)') ' + (', coeffs%c3(4,15), ')*q(1)^2*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,16), ')*q(1)^2*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,17), ')*q(1)^3*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,18), ')*q(1)^3*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A20)') ' + (', coeffs%c3(4,19), ')*q(1)^3*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A18)') ' + (', coeffs%c3(4,20), ')*q(1)^4*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A21)') ' + (', coeffs%c4(1,1), ')*q(0)*q(1)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,2), ')*q(0)*q(1)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,3), ')*q(0)*q(1)*q(2)*q(3)^3'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,4), ')*q(0)*q(1)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A25)') ' + (', coeffs%c4(1,5), ')*q(0)*q(1)*q(2)^2*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,6), ')*q(0)*q(1)*q(2)^3*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,7), ')*q(0)*q(1)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A25)') ' + (', coeffs%c4(1,8), ')*q(0)*q(1)^2*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A25)') ' + (', coeffs%c4(1,9), ')*q(0)*q(1)^2*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,10), ')*q(0)*q(1)^3*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,11), ')*q(0)^2*q(1)*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A25)') ' + (', coeffs%c4(1,12), ')*q(0)^2*q(1)*q(2)*q(3)^2'
+ write(ch,'(A4,G24.16,1x,G24.16,A25)') ' + (', coeffs%c4(1,13), ')*q(0)^2*q(1)*q(2)^2*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A25)') ' + (', coeffs%c4(1,14), ')*q(0)^2*q(1)^2*q(2)*q(3)'
+ write(ch,'(A4,G24.16,1x,G24.16,A23)') ' + (', coeffs%c4(1,15), ')*q(0)^3*q(1)*q(2)*q(3)'
+end subroutine print_coeffs_6
+!****f* src/interface/tens_rec/reconstruct6
+! NAME
+!
+! Subroutine reconstruct6
+!
+! USAGE
+!
+! call reconstruct6(numeval, cm0, cm1, cm2)
+!
+! DESCRIPTION
+!
+! Reconstructs all coefficients of a tensor integral of maximum rank 6,
+! including the coefficients in front of mu2 and mu2^2.
+!
+! INPUTS
+!
+! * numeval -- the numerator function
+! * cm0 -- coefficients of type coeff_type_6, representing the
+! numerator at mu2=0
+! * cm1 -- coefficients of type type(coeff_type_4), representing the
+! tensor in front of mu2 [optional]
+! * cm2 -- coefficients of type type(coeff_type_4), representing the
+! tensor in front of mu2^2 [optional]
+!
+! SIDE EFFECTS
+!
+! Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+! only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+! is at most linear in mu2.
+!
+! EXAMPLE
+!
+!
+!*****
+subroutine reconstruct6(numeval, cm0, cm1, cm2)
+ ! generated by: write_subroutine_reconstruct
+ implicit none
+ interface
+ function numeval(Q, mu2)
+ use precision_golem, only: ki
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: numeval
+ end function numeval
+ end interface
+ type(coeff_type_6), intent(out) :: cm0
+ type(coeff_type_4), intent(out), optional :: cm1
+ type(coeff_type_4), intent(out), optional :: cm2
+ type(coeff_type_4) :: ca, cb
+ call solve6(numeval, 0.0_ki, cm0)
+ if (present(cm1)) then
+ if (present(cm2)) then
+ call solve4(numeval, +1.0_ki, ca, cm0)
+ call solve4(numeval, -1.0_ki, cb, cm0)
+ cm1%c0= 0.5_ki * (ca%c0 - cb%c0)
+ cm2%c0= 0.5_ki * (ca%c0 + cb%c0)
+ cm1%c1 = 0.5_ki * (ca%c1 - cb%c1)
+ cm2%c1 = 0.5_ki * (ca%c1 + cb%c1)
+ cm1%c2 = 0.5_ki * (ca%c2 - cb%c2)
+ cm2%c2 = 0.5_ki * (ca%c2 + cb%c2)
+ cm1%c3 = 0.5_ki * (ca%c3 - cb%c3)
+ cm2%c3 = 0.5_ki * (ca%c3 + cb%c3)
+ cm1%c4 = 0.5_ki * (ca%c4 - cb%c4)
+ cm2%c4 = 0.5_ki * (ca%c4 + cb%c4)
+ else
+ call solve4(numeval, +1.0_ki, cm1, cm0)
+ end if
+ end if
+end subroutine reconstruct6
+end module tens_rec
Index: 95/branches/golem95_without_olo_cmake/src/interface/tensor_integrals.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/tensor_integrals.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/tensor_integrals.f90 (revision 119)
@@ -0,0 +1,1921 @@
+!
+!****h* src/interface/tensor_integrals
+! NAME
+!
+! Module tensor_integrals
+!
+! USAGE
+!
+! use tensor_integrals
+!
+! DESCRIPTION
+!
+! This module provides an interface which allows to compute
+! tensor integrals rather than form factors.
+!
+! OUTPUT
+!
+! This module exports the functions:
+! * init_smat -- initialize the s_smat from vectors and masses
+! * ti1 -- tensor tadpoles
+! * ti2 -- tensor bubbles
+! * ti3 -- tensor triangles
+! * ti4 -- tensor boxes
+! * ti5 -- tensor pentagons
+! * ti6 -- tensor hexagons
+!
+! USES
+!
+! precision_golem
+! form_factor_type
+! form_factor_1p
+! form_factor_2p
+! form_factor_3p
+! form_factor_4p
+! form_factor_5p
+! form_factor_6p
+! cache
+! matrice_s
+! spinor
+! array
+!
+!*****
+module tensor_integrals
+use precision_golem, only: ki
+use form_factor_type, only: form_factor, operator(*), operator(+)
+use form_factor_1p, only: a10
+use form_factor_2p, only: a20, a21, a22, b22
+use form_factor_3p, only: a30, a31, a32, a33, b32, b33
+use form_factor_4p, only: a40, a41, a42, a43, a44, b42, b43, b44, c44
+use form_factor_5p, only: a50, a51, a52, a53, a54, a55, b52, b53, b54, b55, &
+ & c54, c55
+use form_factor_6p, only: a60, a61, a62, a63, a64, a65, a66
+use cache, only: allocate_cache, clear_cache
+use matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs, &
+ & b_ref
+use spinor, only: scalar
+use array, only: packb, unpackb, pminus
+implicit none
+private
+
+private :: a10, a20, a21, a22, b22
+private :: a30, a31, a32, a33, b32, b33
+private :: a40, a41, a42, a43, a44, b42, b43, b44, c44
+private :: a50, a51, a52, a53, a54, a55, b52, b53, b54, b55, c54, c55
+private :: a60, a61, a62, a63, a64, a65, a66
+
+private :: ki, form_factor, allocate_cache, clear_cache, scalar
+private :: packb, unpackb, pminus
+private :: set_ref, s_mat, allocation_s, deallocation_s, init_invs, b_ref
+integer, dimension(0), target, private :: loc_s_null = 0
+
+private :: symmetric_A_coeff1
+private :: symmetric_A_coeff2
+private :: symmetric_A_coeff3
+private :: symmetric_A_coeff4
+private :: symmetric_A_coeff5
+private :: symmetric_A_coeff6
+private :: symmetric_B_coeff2
+private :: symmetric_B_coeff3
+private :: symmetric_B_coeff4
+private :: symmetric_B_coeff5
+private :: symmetric_C_coeff4
+private :: symmetric_C_coeff5
+
+interface symmetric_A_coeff
+ module procedure symmetric_A_coeff1
+ module procedure symmetric_A_coeff2
+ module procedure symmetric_A_coeff3
+ module procedure symmetric_A_coeff4
+ module procedure symmetric_A_coeff5
+ module procedure symmetric_A_coeff6
+end interface symmetric_A_coeff
+
+interface symmetric_B_coeff
+ module procedure symmetric_B_coeff2
+ module procedure symmetric_B_coeff3
+ module procedure symmetric_B_coeff4
+ module procedure symmetric_B_coeff5
+end interface symmetric_B_coeff
+
+interface symmetric_C_coeff
+ module procedure symmetric_C_coeff4
+ module procedure symmetric_C_coeff5
+end interface symmetric_C_coeff
+
+interface init_smat
+ module procedure init_smat1
+ module procedure init_smat2
+ module procedure init_smat3
+ module procedure init_smat4
+ module procedure init_smat5
+ module procedure init_smat6
+end interface init_smat
+
+interface ti1
+ module procedure ti1r0
+ module procedure ti1r1
+end interface ti1
+
+interface ti2
+ module procedure ti2r0
+ module procedure ti2r1
+ module procedure ti2r2
+end interface ti2
+
+interface ti3
+ module procedure ti3r0
+ module procedure ti3r1
+ module procedure ti3r2
+ module procedure ti3r3
+end interface ti3
+
+interface ti4
+ module procedure ti4r0
+ module procedure ti4r1
+ module procedure ti4r2
+ module procedure ti4r3
+ module procedure ti4r4
+end interface ti4
+
+interface ti5
+ module procedure ti5r0
+ module procedure ti5r1
+ module procedure ti5r2
+ module procedure ti5r3
+ module procedure ti5r4
+ module procedure ti5r5
+end interface ti5
+
+interface ti6
+ module procedure ti6r0
+ module procedure ti6r1
+ module procedure ti6r2
+ module procedure ti6r3
+ module procedure ti6r4
+ module procedure ti6r5
+ module procedure ti6r6
+end interface ti6
+
+private :: ti1r0, ti1r1
+private :: ti2r0, ti2r1, ti2r2
+private :: ti3r0, ti3r1, ti3r2, ti3r3
+private :: ti4r0, ti4r1, ti4r2, ti4r3, ti4r4
+private :: ti5r0, ti5r1, ti5r2, ti5r3, ti5r4, ti5r5
+private :: ti6r0, ti6r1, ti6r2, ti6r3, ti6r4, ti6r5, ti6r6
+
+integer, parameter, public :: use_existing_smat = 1
+integer, parameter, public :: keep_smat_on_exit = 2
+
+public :: ti1, ti2, ti3, ti4, ti5, ti6, init_smat, done_smat
+
+contains
+
+pure elemental function chop(val,prec)
+ implicit none
+ real(ki), intent(in) :: val
+ real(ki), optional, intent(in) :: prec
+ real(ki) :: chop
+
+ if (present(prec)) then
+ if (abs(val) .gt. prec) then
+ chop = val
+ else
+ chop = 0.0_ki
+ end if
+ else
+ if (abs(val) .gt. 1.0E+04_ki*epsilon(1.0_ki)) then
+ chop = val
+ else
+ chop = 0.0_ki
+ end if
+ end if
+end function chop
+
+!---#[ init_smat :
+subroutine init_smat1(m1sq)
+ implicit none
+ real(ki), intent(in) :: m1sq
+
+ call allocation_s(1)
+ set_ref = (/1/)
+ b_ref = packb(set_ref)
+ s_mat(1,1) = -m1sq-m1sq
+
+ call allocate_cache(1)
+
+ ! init_invs not needed for tadpoles
+end subroutine init_smat1
+
+subroutine init_smat2(r1,m1sq,m2sq)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1
+ real(ki), intent(in) :: m1sq,m2sq
+
+ call allocation_s(2)
+ set_ref = (/1,2/)
+ b_ref = packb(set_ref)
+ s_mat(1,1) = -m1sq-m1sq
+ s_mat(1,2) = chop(scalar(r1,r1)) - m1sq - m2sq
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -m2sq-m2sq
+
+ call allocate_cache(2)
+
+ ! init_invs not needed for bubbles
+end subroutine init_smat2
+
+subroutine init_smat3(r1,r2,m1sq,m2sq,m3sq)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2
+ real(ki), intent(in) :: m1sq,m2sq,m3sq
+
+ real(ki), dimension(4) :: delt
+
+ call allocation_s(3)
+ set_ref = (/1,2,3/)
+ b_ref = packb(set_ref)
+ s_mat(1,1) = -m1sq-m1sq
+ delt = r1-r2
+ s_mat(1,2) = chop(scalar(delt,delt)) - m1sq - m2sq
+ delt = r1
+ s_mat(1,3) = chop(scalar(delt,delt)) - m1sq - m3sq
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -m2sq-m2sq
+ delt = r2
+ s_mat(2,3) = chop(scalar(delt,delt)) - m2sq - m3sq
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -m3sq-m3sq
+
+ call allocate_cache(3)
+ ! init_invs not needed for triangles
+end subroutine init_smat3
+
+subroutine init_smat4(r1,r2,r3,m1sq,m2sq,m3sq,m4sq)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2,r3
+ real(ki), intent(in) :: m1sq,m2sq,m3sq,m4sq
+
+ real(ki), dimension(4) :: delt
+
+ call allocation_s(4)
+ set_ref = (/1,2,3,4/)
+ b_ref = packb(set_ref)
+ s_mat(1,1) = -m1sq-m1sq
+ delt = r1-r2
+ s_mat(1,2) = chop(scalar(delt,delt)) - m1sq - m2sq
+ delt = r1-r3
+ s_mat(1,3) = chop(scalar(delt,delt)) - m1sq - m3sq
+ delt = r1
+ s_mat(1,4) = chop(scalar(delt,delt)) - m1sq - m4sq
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -m2sq-m2sq
+ delt = r2-r3
+ s_mat(2,3) = chop(scalar(delt,delt)) - m2sq - m3sq
+ delt = r2
+ s_mat(2,4) = chop(scalar(delt,delt)) - m2sq - m4sq
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -m3sq-m3sq
+ delt = r3
+ s_mat(3,4) = chop(scalar(delt,delt)) - m3sq - m4sq
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -m4sq-m4sq
+
+ call allocate_cache(4)
+ call init_invs()
+end subroutine init_smat4
+
+subroutine init_smat5(r1,r2,r3,r4,m1sq,m2sq,m3sq,m4sq,m5sq)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2,r3,r4
+ real(ki), intent(in) :: m1sq,m2sq,m3sq,m4sq,m5sq
+
+ real(ki), dimension(4) :: delt
+
+ call allocation_s(5)
+ set_ref = (/1,2,3,4,5/)
+ b_ref = packb(set_ref)
+ s_mat(1,1) = -m1sq-m1sq
+ delt = r1-r2
+ s_mat(1,2) = chop(scalar(delt,delt)) - m1sq - m2sq
+ delt = r1-r3
+ s_mat(1,3) = chop(scalar(delt,delt)) - m1sq - m3sq
+ delt = r1-r4
+ s_mat(1,4) = chop(scalar(delt,delt)) - m1sq - m4sq
+ delt = r1
+ s_mat(1,5) = chop(scalar(delt,delt)) - m1sq - m5sq
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -m2sq-m2sq
+ delt = r2-r3
+ s_mat(2,3) = chop(scalar(delt,delt)) - m2sq - m3sq
+ delt = r2-r4
+ s_mat(2,4) = chop(scalar(delt,delt)) - m2sq - m4sq
+ delt = r2
+ s_mat(2,5) = chop(scalar(delt,delt)) - m2sq - m5sq
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -m3sq-m3sq
+ delt = r3-r4
+ s_mat(3,4) = chop(scalar(delt,delt)) - m3sq - m4sq
+ delt = r3
+ s_mat(3,5) = chop(scalar(delt,delt)) - m3sq - m5sq
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -m4sq-m4sq
+ delt = r4
+ s_mat(4,5) = chop(scalar(delt,delt)) - m4sq - m5sq
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = -m5sq-m5sq
+
+ call allocate_cache(5)
+ call init_invs()
+end subroutine init_smat5
+
+subroutine init_smat6(r1,r2,r3,r4,r5,m1sq,m2sq,m3sq,m4sq,m5sq,m6sq)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2,r3,r4,r5
+ real(ki), intent(in) :: m1sq,m2sq,m3sq,m4sq,m5sq,m6sq
+
+ real(ki), dimension(4) :: delt
+
+ call allocation_s(6)
+ set_ref = (/1,2,3,4,5,6/)
+ b_ref = packb(set_ref)
+ s_mat(1,1) = -m1sq-m1sq
+ delt = r1-r2
+ s_mat(1,2) = chop(scalar(delt,delt)) - m1sq - m2sq
+ delt = r1-r3
+ s_mat(1,3) = chop(scalar(delt,delt)) - m1sq - m3sq
+ delt = r1-r4
+ s_mat(1,4) = chop(scalar(delt,delt)) - m1sq - m4sq
+ delt = r1-r5
+ s_mat(1,5) = chop(scalar(delt,delt)) - m1sq - m5sq
+ delt = r1
+ s_mat(1,6) = chop(scalar(delt,delt)) - m1sq - m6sq
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -m2sq-m2sq
+ delt = r2-r3
+ s_mat(2,3) = chop(scalar(delt,delt)) - m2sq - m3sq
+ delt = r2-r4
+ s_mat(2,4) = chop(scalar(delt,delt)) - m2sq - m4sq
+ delt = r2-r5
+ s_mat(2,5) = chop(scalar(delt,delt)) - m2sq - m5sq
+ delt = r2
+ s_mat(2,6) = chop(scalar(delt,delt)) - m2sq - m6sq
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -m3sq-m3sq
+ delt = r3-r4
+ s_mat(3,4) = chop(scalar(delt,delt)) - m3sq - m4sq
+ delt = r3-r5
+ s_mat(3,5) = chop(scalar(delt,delt)) - m3sq - m5sq
+ delt = r3
+ s_mat(3,6) = chop(scalar(delt,delt)) - m3sq - m6sq
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -m4sq-m4sq
+ delt = r4-r5
+ s_mat(4,5) = chop(scalar(delt,delt)) - m4sq - m5sq
+ delt = r4
+ s_mat(4,6) = chop(scalar(delt,delt)) - m4sq - m6sq
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = -m5sq-m5sq
+ delt = r5
+ s_mat(5,6) = chop(scalar(delt,delt)) - m5sq - m6sq
+ s_mat(6,1) = s_mat(1,6)
+ s_mat(6,2) = s_mat(2,6)
+ s_mat(6,3) = s_mat(3,6)
+ s_mat(6,4) = s_mat(4,6)
+ s_mat(6,5) = s_mat(5,6)
+ s_mat(6,6) = -m6sq-m6sq
+
+ call allocate_cache(6)
+ call init_invs()
+end subroutine init_smat6
+
+subroutine done_smat()
+ implicit none
+ call clear_cache()
+ call deallocation_s()
+end subroutine done_smat
+!---#] init_smat :
+!---#[ One point tensor integrals :
+subroutine ti1r0(tens,m1,flag,pinches)
+ implicit none
+ type(form_factor), intent(out) :: tens
+ real(ki), intent(in) :: m1
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ logical :: f_init_smat, f_dispose_smat
+
+ integer, dimension(:), pointer :: lpinches
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(m1*m1)
+
+ tens = a10(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti1r0
+
+subroutine ti1r1(tens,m1,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4), intent(out) :: tens
+ real(ki), intent(in) :: m1
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ logical :: f_init_smat, f_dispose_smat
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if(f_init_smat) call init_smat(m1*m1)
+
+ tens(:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti1r1
+!---#] One point tensor integrals :
+!---#[ Two point tensor integrals :
+subroutine ti2r0(tens,r1,m1,m2,flag,pinches)
+ implicit none
+ type(form_factor), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1
+ real(ki), intent(in) :: m1, m2
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,m1*m1,m2*m2)
+
+ tens = a20(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti2r0
+
+subroutine ti2r1(tens,r1,m1,m2,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1
+ real(ki), intent(in) :: m1, m2
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4) :: term
+ integer, dimension(2) :: unpinched
+ unpinched = unpackb(pminus(b_ref,packb(pinches)),2)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,m1*m1,m2*m2)
+
+ call symmetric_A_coeff(term,r1)
+ tens(:) = term * A21(unpinched(1),lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti2r1
+
+subroutine ti2r2(tens,r1,m1,m2,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1
+ real(ki), intent(in) :: m1, m2
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4) :: term
+ integer, dimension(2) :: unpinched
+ unpinched = unpackb(pminus(b_ref,packb(pinches)),2)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,m1*m1,m2*m2)
+
+ call symmetric_A_coeff(term,r1,r1)
+ tens(:,:) = term(:,:) * A22(unpinched(1),unpinched(1),lpinches)
+ call symmetric_B_coeff(term)
+ tens(:,:) = tens(:,:) + term(:,:) * B22(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti2r2
+!---#] Two point tensor integrals :
+!---#[ Three point tensor integrals :
+subroutine ti3r0(tens,r1,r2,m1,m2,m3,flag,pinches)
+ implicit none
+ type(form_factor), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2
+ real(ki), intent(in) :: m1, m2, m3
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,r2,m1*m1,m2*m2,m3*m3)
+
+ tens = A30(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti3r0
+
+subroutine ti3r1(tens,r1,r2,m1,m2,m3,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2
+ real(ki), intent(in) :: m1, m2, m3
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ integer, dimension(3) :: unpinched
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),2)
+
+ if(f_init_smat) call init_smat(r1,r2,m1*m1,m2*m2,m3*m3)
+
+ tens(:) = r1(:) * A31(unpinched(1),lpinches) &
+ & + r2(:) * A31(unpinched(2),lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti3r1
+
+subroutine ti3r2(tens,r1,r2,m1,m2,m3,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2
+ real(ki), intent(in) :: m1, m2, m3
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4) :: term
+ real(ki), dimension(2,4) :: rarr
+ integer :: j1, j2
+ integer, dimension(3) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),3)
+
+ if(f_init_smat) call init_smat(r1,r2,m1*m1,m2*m2,m3*m3)
+
+ tens(:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,2
+ do j2=1,2
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:))
+ tens(:,:) = tens(:,:) &
+ & + term(:,:) * A32(unpinched(j1),unpinched(j2),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term)
+ tens(:,:) = tens(:,:) + term(:,:) * B32(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti3r2
+
+subroutine ti3r3(tens,r1,r2,m1,m2,m3,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2
+ real(ki), intent(in) :: m1, m2, m3
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4) :: term
+ real(ki), dimension(2,4) :: rarr
+ integer :: j1, j2, j3
+ integer, dimension(3) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),3)
+
+ if(f_init_smat) call init_smat(r1,r2,m1*m1,m2*m2,m3*m3)
+
+ tens(:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,2
+ do j2=1,2
+ do j3=1,2
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:))
+ tens(:,:,:) = tens(:,:,:) &
+ & + term(:,:,:) * A33(unpinched(j1),unpinched(j2),unpinched(j3),&
+ & lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term,rarr(j1,:))
+ tens(:,:,:) = tens(:,:,:) &
+ & + term(:,:,:) * B33(unpinched(j1),lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti3r3
+!---#] Three point tensor integrals :
+!---#[ Four point tensor integrals :
+subroutine ti4r0(tens,r1,r2,r3,m1,m2,m3,m4,flag,pinches)
+ implicit none
+ type(form_factor), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3
+ real(ki), intent(in) :: m1, m2, m3, m4
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,r2,r3,m1*m1,m2*m2,m3*m3,m4*m4)
+
+ tens = A40(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti4r0
+
+subroutine ti4r1(tens,r1,r2,r3,m1,m2,m3,m4,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3
+ real(ki), intent(in) :: m1, m2, m3, m4
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4) :: term
+ real(ki), dimension(3,4) :: rarr
+ integer :: j1
+ integer, dimension(4) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),4)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,m1*m1,m2*m2,m3*m3,m4*m4)
+
+ tens(:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,3
+ call symmetric_A_coeff(term,rarr(j1,:))
+ tens(:) = tens(:) + term(:) * A41(unpinched(j1),lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti4r1
+subroutine ti4r2(tens,r1,r2,r3,m1,m2,m3,m4,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3
+ real(ki), intent(in) :: m1, m2, m3, m4
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4) :: term
+ real(ki), dimension(3,4) :: rarr
+ integer :: j1, j2
+ integer, dimension(4) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),4)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,m1*m1,m2*m2,m3*m3,m4*m4)
+
+ tens(:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,3
+ do j2=1,3
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:))
+ tens(:,:) = tens(:,:) &
+ & + term(:,:) * A42(unpinched(j1),unpinched(j2),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term)
+ tens(:,:) = tens(:,:) + term(:,:) * B42(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti4r2
+
+subroutine ti4r3(tens,r1,r2,r3,m1,m2,m3,m4,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3
+ real(ki), intent(in) :: m1, m2, m3, m4
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4) :: term
+ real(ki), dimension(3,4) :: rarr
+ integer :: j1, j2, j3
+ integer, dimension(4) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),4)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,m1*m1,m2*m2,m3*m3,m4*m4)
+
+ tens(:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,3
+ do j2=1,3
+ do j3=1,3
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:))
+ tens(:,:,:) = tens(:,:,:) &
+ & + term(:,:,:) * A43(unpinched(j1),unpinched(j2),unpinched(j3),&
+ & lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term,rarr(unpinched(j1),:))
+ tens(:,:,:) = tens(:,:,:) + term(:,:,:) * B43(j1,lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti4r3
+
+subroutine ti4r4(tens,r1,r2,r3,m1,m2,m3,m4,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3
+ real(ki), intent(in) :: m1, m2, m3, m4
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4,4) :: term
+ real(ki), dimension(3,4) :: rarr
+ integer :: j1, j2, j3, j4
+ integer, dimension(4) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),4)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,m1*m1,m2*m2,m3*m3,m4*m4)
+
+ tens(:,:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,3
+ do j2=1,3
+ do j3=1,3
+ do j4=1,3
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:),rarr(j4,:))
+ tens(:,:,:,:) = tens(:,:,:,:) &
+ & + term(:,:,:,:) * A44(unpinched(j1),unpinched(j2), &
+ & unpinched(j3),unpinched(j4),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term,rarr(j1,:),rarr(j2,:))
+ tens(:,:,:,:) = tens(:,:,:,:) &
+ & + term(:,:,:,:) * B44(unpinched(j1),unpinched(j2),lpinches)
+ end do
+ end do
+ call symmetric_C_coeff(term)
+ tens(:,:,:,:) = tens(:,:,:,:) + term(:,:,:,:) * C44(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti4r4
+!---#] Four point tensor integrals :
+!---#[ Five point tensor integrals :
+subroutine ti5r0(tens,r1,r2,r3,r4,m1,m2,m3,m4,m5,flag,pinches)
+ implicit none
+ type(form_factor), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4
+ real(ki), intent(in) :: m1, m2, m3, m4, m5
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,m1*m1,m2*m2,m3*m3,m4*m4,m5*m5)
+
+ tens = A50(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti5r0
+subroutine ti5r1(tens,r1,r2,r3,r4,m1,m2,m3,m4,m5,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4
+ real(ki), intent(in) :: m1, m2, m3, m4, m5
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4) :: term
+ real(ki), dimension(4,4) :: rarr
+ integer :: j1
+ integer, dimension(5) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),5)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,m1*m1,m2*m2,m3*m3,m4*m4,m5*m5)
+
+ tens(:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,4
+ call symmetric_A_coeff(term,rarr(j1,:))
+ tens(:) = tens(:) + term(:) * A51(unpinched(j1),lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti5r1
+subroutine ti5r2(tens,r1,r2,r3,r4,m1,m2,m3,m4,m5,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4
+ real(ki), intent(in) :: m1, m2, m3, m4, m5
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4) :: term
+ real(ki), dimension(4,4) :: rarr
+ integer :: j1, j2
+ integer, dimension(5) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),5)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,m1*m1,m2*m2,m3*m3,m4*m4,m5*m5)
+
+ tens(:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,4
+ do j2=1,4
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:))
+ tens(:,:) = tens(:,:) &
+ & + term(:,:) * A52(unpinched(j1),unpinched(j2),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term)
+ tens(:,:) = tens(:,:) + term(:,:) * B52(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti5r2
+subroutine ti5r3(tens,r1,r2,r3,r4,m1,m2,m3,m4,m5,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4
+ real(ki), intent(in) :: m1, m2, m3, m4, m5
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4) :: term
+ real(ki), dimension(4,4) :: rarr
+ integer :: j1, j2, j3
+ integer, dimension(5) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),5)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,m1*m1,m2*m2,m3*m3,m4*m4,m5*m5)
+
+ tens(:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,4
+ do j2=1,4
+ do j3=1,4
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:))
+ tens(:,:,:) = tens(:,:,:) &
+ & + term(:,:,:) * A53(unpinched(j1),unpinched(j2), &
+ & unpinched(j3),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term,rarr(j1,:))
+ tens(:,:,:) = tens(:,:,:) + term(:,:,:) * B53(unpinched(j1),lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti5r3
+subroutine ti5r4(tens,r1,r2,r3,r4,m1,m2,m3,m4,m5,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4
+ real(ki), intent(in) :: m1, m2, m3, m4, m5
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4,4) :: term
+ real(ki), dimension(4,4) :: rarr
+ integer :: j1, j2, j3, j4
+ integer, dimension(5) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),5)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,m1*m1,m2*m2,m3*m3,m4*m4,m5*m5)
+
+ tens(:,:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,4
+ do j2=1,4
+ do j3=1,4
+ do j4=1,4
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:),rarr(j4,:))
+ tens(:,:,:,:) = tens(:,:,:,:) + term(:,:,:,:) * &
+ & A54(unpinched(j1),unpinched(j2),unpinched(j3),unpinched(j4),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term,rarr(j1,:),rarr(j2,:))
+ tens(:,:,:,:) = tens(:,:,:,:) &
+ & + term(:,:,:,:) * B54(unpinched(j1),unpinched(j2),lpinches)
+ end do
+ end do
+ call symmetric_C_coeff(term)
+ tens(:,:,:,:) = tens(:,:,:,:) + term(:,:,:,:) * C54(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti5r4
+subroutine ti5r5(tens,r1,r2,r3,r4,m1,m2,m3,m4,m5,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4
+ real(ki), intent(in) :: m1, m2, m3, m4, m5
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4,4,4) :: term
+ real(ki), dimension(4,4) :: rarr
+ integer :: j1, j2, j3, j4, j5
+ integer, dimension(5) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),5)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,m1*m1,m2*m2,m3*m3,m4*m4,m5*m5)
+
+ tens(:,:,:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,4
+ do j2=1,4
+ do j3=1,4
+ do j4=1,4
+ do j5=1,4
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:),rarr(j4,:),&
+ & rarr(j5,:))
+ tens(:,:,:,:,:) = tens(:,:,:,:,:) + term(:,:,:,:,:) * &
+ & A55(unpinched(j1),unpinched(j2),unpinched(j3),unpinched(j4),&
+ & unpinched(j5),lpinches)
+ end do
+ end do
+ call symmetric_B_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:))
+ tens(:,:,:,:,:) = tens(:,:,:,:,:) + term(:,:,:,:,:) * &
+ & B55(unpinched(j1),unpinched(j2),unpinched(j3),lpinches)
+ end do
+ end do
+ call symmetric_C_coeff(term,rarr(j1,:))
+ tens(:,:,:,:,:) = tens(:,:,:,:,:) + term(:,:,:,:,:) * &
+ & C55(unpinched(j1),lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti5r5
+!---#] Five point tensor integrals :
+!---#[ Six point tensor integrals :
+subroutine ti6r0(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens = A60(lpinches)
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r0
+
+subroutine ti6r1(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4) :: term
+ real(ki), dimension(5,4) :: rarr
+ integer :: j1
+ integer, dimension(6) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+ rarr(5,:) = r5(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),6)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens(:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,5
+ call symmetric_A_coeff(term,rarr(j1,:))
+ tens(:) = tens(:) + term(:) * A61(unpinched(j1),lpinches)
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r1
+subroutine ti6r2(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4) :: term
+ real(ki), dimension(5,4) :: rarr
+ integer :: j1, j2
+ integer, dimension(6) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+ rarr(5,:) = r5(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),6)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens(:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,5
+ do j2=1,5
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:))
+ tens(:,:) = tens(:,:) &
+ & + term(:,:) * A62(unpinched(j1),unpinched(j2),lpinches)
+ end do
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r2
+subroutine ti6r3(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4) :: term
+ real(ki), dimension(5,4) :: rarr
+ integer :: j1, j2, j3
+ integer, dimension(6) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+ rarr(5,:) = r5(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),6)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens(:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,5
+ do j2=1,5
+ do j3=1,5
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:))
+ tens(:,:,:) = tens(:,:,:) &
+ & + term(:,:,:) * A63(unpinched(j1),unpinched(j2),unpinched(j3),&
+ & lpinches)
+ end do
+ end do
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r3
+subroutine ti6r4(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4,4) :: term
+ real(ki), dimension(5,4) :: rarr
+ integer :: j1, j2, j3, j4
+ integer, dimension(6) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+ rarr(5,:) = r5(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),6)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens(:,:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,5
+ do j2=1,5
+ do j3=1,5
+ do j4=1,5
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:),rarr(j4,:))
+ tens(:,:,:,:) = tens(:,:,:,:) + term(:,:,:,:) * &
+ & A64(unpinched(j1),unpinched(j2),unpinched(j3),unpinched(j4),lpinches)
+ end do
+ end do
+ end do
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r4
+subroutine ti6r5(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4,4,4) :: term
+ real(ki), dimension(5,4) :: rarr
+ integer :: j1, j2, j3, j4, j5
+ integer, dimension(6) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+ rarr(5,:) = r5(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),6)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens(:,:,:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,5
+ do j2=1,5
+ do j3=1,5
+ do j4=1,5
+ do j5=1,5
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:),rarr(j4,:),&
+ & rarr(j5,:))
+ tens(:,:,:,:,:) = tens(:,:,:,:,:) + term(:,:,:,:,:) * &
+ & A65(unpinched(j1),unpinched(j2),unpinched(j3),unpinched(j4), &
+ & unpinched(j5),lpinches)
+ end do
+ end do
+ end do
+ end do
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r5
+subroutine ti6r6(tens,r1,r2,r3,r4,r5,m1,m2,m3,m4,m5,m6,flag,pinches)
+ implicit none
+ type(form_factor), dimension(4,4,4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3, r4, r5
+ real(ki), intent(in) :: m1, m2, m3, m4, m5, m6
+ integer, optional, intent(in) :: flag
+ integer, dimension(:), target, optional, intent(in) :: pinches
+ integer, dimension(:), pointer :: lpinches
+ logical :: f_init_smat, f_dispose_smat
+ real(ki), dimension(4,4,4,4,4,4) :: term
+ real(ki), dimension(5,4) :: rarr
+ integer :: j1, j2, j3, j4, j5, j6
+ integer, dimension(6) :: unpinched
+
+ rarr(1,:) = r1(:)
+ rarr(2,:) = r2(:)
+ rarr(3,:) = r3(:)
+ rarr(4,:) = r4(:)
+ rarr(5,:) = r5(:)
+
+ if(present(flag)) then
+ f_init_smat = iand(flag, use_existing_smat) .eq. 0
+ f_dispose_smat = iand(flag, keep_smat_on_exit) .eq. 0
+ else
+ f_init_smat = .true.
+ f_dispose_smat = .true.
+ end if
+
+ if (present(pinches)) then
+ lpinches => pinches
+ else
+ lpinches => loc_s_null
+ end if
+ unpinched = unpackb(pminus(b_ref,packb(lpinches)),6)
+
+ if(f_init_smat) call init_smat(r1,r2,r3,r4,r5,m1*m1,m2*m2,m3*m3,m4*m4,&
+ & m5*m5,m6*m6)
+
+ tens(:,:,:,:,:,:) = form_factor(0.0_ki, 0.0_ki, 0.0_ki)
+ do j1=1,5
+ do j2=1,5
+ do j3=1,5
+ do j4=1,5
+ do j5=1,5
+ do j6=1,5
+ call symmetric_A_coeff(term,rarr(j1,:),rarr(j2,:),rarr(j3,:),rarr(j4,:),&
+ & rarr(j5,:),rarr(j6,:))
+ tens(:,:,:,:,:,:) = tens(:,:,:,:,:,:) + term(:,:,:,:,:,:) * &
+ & A66(unpinched(j1),unpinched(j2),unpinched(j3),unpinched(j4),&
+ & unpinched(j5),unpinched(j6),lpinches)
+ end do
+ end do
+ end do
+ end do
+ end do
+ end do
+
+ if(f_dispose_smat) call done_smat()
+end subroutine ti6r6
+!---#] Six point tensor integrals :
+!---#[ Symmetric A coefficients :
+pure subroutine symmetric_A_coeff1(tens,r1)
+ implicit none
+ real(ki), dimension(4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1
+
+ tens(:) = r1(:)
+end subroutine symmetric_A_coeff1
+
+pure subroutine symmetric_A_coeff2(tens,r1,r2)
+ implicit none
+ real(ki), dimension(4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1,r2
+
+ integer :: i1,i2
+
+ tens(:,:) = 0.0_ki
+
+ !$omp parallel do
+ do i1 = 1,4
+ do i2 = 1,4
+ tens(i1,i2) = r1(i1)*r2(i2)
+ end do
+ end do
+ !$omp end parallel do
+end subroutine symmetric_A_coeff2
+
+pure subroutine symmetric_A_coeff3(tens,r1,r2,r3)
+ implicit none
+ real(ki), dimension(4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1,r2,r3
+
+ integer :: i1,i2,i3
+
+ !$omp parallel do
+ do i1 = 1,4
+ do i2 = 1,4
+ do i3 = 1,4
+ tens(i1,i2,i3) = r1(i1)*r2(i2)*r3(i3)
+ end do
+ end do
+ end do
+ !$omp end parallel do
+end subroutine symmetric_A_coeff3
+
+pure subroutine symmetric_A_coeff4(tens,r1,r2,r3,r4)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2,r3,r4
+ real(ki), dimension(4,4,4,4), intent(out) :: tens
+
+ integer :: i1,i2,i3,i4
+
+ !$omp parallel do
+ do i1 = 1,4
+ do i2 = 1,4
+ do i3 = 1,4
+ do i4 = 1,4
+ tens(i1,i2,i3,i4) = r1(i1)*r2(i2)*r3(i3)*r4(i4)
+ end do
+ end do
+ end do
+ end do
+ !$omp end parallel do
+end subroutine symmetric_A_coeff4
+
+pure subroutine symmetric_A_coeff5(tens,r1,r2,r3,r4,r5)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2,r3,r4,r5
+ real(ki), dimension(4,4,4,4,4), intent(out) :: tens
+
+ integer :: i1,i2,i3,i4,i5
+
+ !$omp parallel do
+ do i1 = 1,4
+ do i2 = 1,4
+ do i3 = 1,4
+ do i4 = 1,4
+ do i5 = 1,4
+ tens(i1,i2,i3,i4,i5) = r1(i1)*r2(i2)*r3(i3)*r4(i4)*r5(i5)
+ end do
+ end do
+ end do
+ end do
+ end do
+ !$omp end parallel do
+end subroutine symmetric_A_coeff5
+
+pure subroutine symmetric_A_coeff6(tens,r1,r2,r3,r4,r5,r6)
+ implicit none
+ real(ki), dimension(4), intent(in) :: r1,r2,r3,r4,r5,r6
+ real(ki), dimension(4,4,4,4,4,4), intent(out) :: tens
+
+ integer :: i1,i2,i3,i4,i5,i6
+
+ !$omp parallel do
+ do i1 = 1,4
+ do i2 = 1,4
+ do i3 = 1,4
+ do i4 = 1,4
+ do i5 = 1,4
+ do i6 = 1,4
+ tens(i1,i2,i3,i4,i5,i6) = r1(i1)*r2(i2)*r3(i3)*r4(i4)*r5(i5)*r6(i6)
+ end do
+ end do
+ end do
+ end do
+ end do
+ end do
+ !$omp end parallel do
+end subroutine symmetric_A_coeff6
+!---#] Symmetric A coefficients :
+!---#[ Symmetric B coefficients :
+pure subroutine symmetric_B_coeff2(tens)
+ implicit none
+ real(ki), dimension(4,4), intent(out) :: tens
+
+ tens(:,:) = 0.0_ki
+ tens(1,1) = 1.0_ki
+ tens(2,2) = -1.0_ki
+ tens(3,3) = -1.0_ki
+ tens(4,4) = -1.0_ki
+end subroutine symmetric_B_coeff2
+
+pure subroutine symmetric_B_coeff3(tens,r1)
+ implicit none
+ real(ki), dimension(4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1
+
+ real(ki), dimension(4) :: atens
+ real(ki) :: term
+ integer :: i1,i2,i3
+ integer :: s1, s2
+
+ call symmetric_A_coeff(atens,r1)
+
+ !$omp parallel do
+ do i1=1,4
+ s1 = -sign(1, 2*i1-3)
+ do i2=1,4
+ s2 = -sign(1, 2*i2-3)
+ do i3=1,4
+ term = 0.0_ki
+ if(i2==i3) term = term + s2*atens(i1)
+ if(i1==i3) term = term + s1*atens(i2)
+ if(i1==i2) term = term + s1*atens(i3)
+ tens(i1,i2,i3) = term
+ enddo
+ enddo
+ enddo
+ !$omp end parallel do
+end subroutine symmetric_B_coeff3
+
+pure subroutine symmetric_B_coeff4(tens,r1,r2)
+ implicit none
+ real(ki), dimension(4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2
+
+ real(ki) :: term
+ real(ki), dimension(4,4) :: atens
+ integer :: i1,i2,i3,i4
+ integer :: s1,s2,s3
+
+ call symmetric_A_coeff(atens,r1,r2)
+
+ !$omp parallel do
+ do i1=1,4
+ s1 = -sign(1, 2*i1-3)
+ do i2=1,4
+ s2 = -sign(1, 2*i2-3)
+ do i3=1,4
+ s3 = -sign(1, 2*i3-3)
+ do i4=1,4
+ term = 0.0_ki
+ if(i3==i4) term = term + s3*atens(i1,i2)
+ if(i2==i4) term = term + s2*atens(i1,i3)
+ if(i2==i3) term = term + s2*atens(i1,i4)
+ if(i1==i4) term = term + s1*atens(i2,i3)
+ if(i1==i3) term = term + s1*atens(i2,i4)
+ if(i1==i2) term = term + s1*atens(i3,i4)
+ tens(i1,i2,i3,i4) = term
+ enddo
+ enddo
+ enddo
+ enddo
+ !$omp end parallel do
+end subroutine symmetric_B_coeff4
+
+pure subroutine symmetric_B_coeff5(tens,r1,r2,r3)
+ implicit none
+ real(ki), dimension(4,4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1, r2, r3
+
+ real(ki) :: term
+ real(ki), dimension(4,4,4) :: atens
+ integer :: i1,i2,i3,i4,i5
+ integer :: s1,s2,s3,s4
+
+ call symmetric_A_coeff(atens,r1,r2,r3)
+
+ !$omp parallel do
+ do i1=1,4
+ s1 = -sign(1, 2*i1-3)
+ do i2=1,4
+ s2 = -sign(1, 2*i2-3)
+ do i3=1,4
+ s3 = -sign(1, 2*i3-3)
+ do i4=1,4
+ s4 = -sign(1, 2*i4-3)
+ do i5=1,4
+ term = 0.0_ki
+ if(i4==i5) term = term + s4*atens(i1,i2,i3)
+ if(i3==i5) term = term + s3*atens(i1,i2,i4)
+ if(i3==i4) term = term + s3*atens(i1,i2,i5)
+ if(i2==i5) term = term + s2*atens(i1,i3,i4)
+ if(i2==i4) term = term + s2*atens(i1,i3,i5)
+ if(i2==i3) term = term + s2*atens(i1,i4,i5)
+ if(i1==i5) term = term + s1*atens(i2,i3,i4)
+ if(i1==i4) term = term + s1*atens(i2,i3,i5)
+ if(i1==i3) term = term + s1*atens(i2,i4,i5)
+ if(i1==i2) term = term + s1*atens(i3,i4,i5)
+ tens(i1,i2,i3,i4,i5) = term
+ enddo
+ enddo
+ enddo
+ enddo
+ enddo
+ !$omp end parallel do
+end subroutine symmetric_B_coeff5
+!---#] Symmetric B coefficients :
+!---#[ Symmetric C coefficients :
+pure subroutine symmetric_C_coeff4(tens)
+ implicit none
+ real(ki), dimension(4,4,4,4), intent(out) :: tens
+
+ real(ki) :: term
+ integer :: i1,i2,i3,i4
+ integer :: s1, s2, s3
+
+ !$omp parallel do
+ do i1=1,4
+ s1 = -sign(1, 2*i1-3)
+ do i2=1,4
+ s2 = -sign(1, 2*i2-3)
+ do i3=1,4
+ s3 = -sign(1, 2*i3-3)
+ do i4=1,4
+ term = 0.0_ki
+ if((i1==i2).and.(i3==i4)) term = term + s1*s3
+ if((i1==i3).and.(i2==i4)) term = term + s1*s2
+ if((i1==i4).and.(i2==i3)) term = term + s1*s2
+ tens(i1,i2,i3,i4) = term
+ enddo
+ enddo
+ enddo
+ enddo
+ !$omp end parallel do
+end subroutine symmetric_C_coeff4
+
+pure subroutine symmetric_C_coeff5(tens,r1)
+ implicit none
+ real(ki), dimension(4,4,4,4,4), intent(out) :: tens
+ real(ki), dimension(4), intent(in) :: r1
+
+ real(ki), dimension(4) :: atens
+ real(ki) :: term
+ integer :: i1,i2,i3,i4,i5
+ integer :: s1, s2, s3, s4
+
+ call symmetric_A_coeff(atens,r1)
+
+ !$omp parallel do
+ do i1=1,4
+ s1 = -sign(1, 2*i1-3)
+ do i2=1,4
+ s2 = -sign(1, 2*i2-3)
+ do i3=1,4
+ s3 = -sign(1, 2*i3-3)
+ do i4=1,4
+ s4 = -sign(1, 2*i4-3)
+ do i5=1,4
+ term = 0.0_ki
+ if((i5==i2).and.(i3==i4)) term = term + s2*s3*atens(i1)
+ if((i5==i3).and.(i2==i4)) term = term + s3*s2*atens(i1)
+ if((i5==i4).and.(i2==i3)) term = term + s4*s2*atens(i1)
+ if((i1==i5).and.(i3==i4)) term = term + s1*s3*atens(i2)
+ if((i1==i3).and.(i5==i4)) term = term + s1*s4*atens(i2)
+ if((i1==i4).and.(i5==i3)) term = term + s1*s3*atens(i2)
+ if((i1==i2).and.(i5==i4)) term = term + s1*s4*atens(i3)
+ if((i1==i5).and.(i2==i4)) term = term + s1*s2*atens(i3)
+ if((i1==i4).and.(i2==i5)) term = term + s1*s2*atens(i3)
+ if((i1==i2).and.(i3==i5)) term = term + s1*s3*atens(i4)
+ if((i1==i3).and.(i2==i5)) term = term + s1*s2*atens(i4)
+ if((i1==i5).and.(i2==i3)) term = term + s1*s2*atens(i4)
+ if((i1==i2).and.(i3==i4)) term = term + s1*s3*atens(i5)
+ if((i1==i3).and.(i2==i4)) term = term + s1*s2*atens(i5)
+ if((i1==i4).and.(i2==i3)) term = term + s1*s2*atens(i5)
+ tens(i1,i2,i3,i4,i5) = term
+ enddo
+ enddo
+ enddo
+ enddo
+ enddo
+ !$omp end parallel do
+end subroutine symmetric_C_coeff5
+!---#] Symmetric C coefficients :
+end module tensor_integrals
Index: 95/branches/golem95_without_olo_cmake/src/interface/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/Makefile.in (revision 119)
@@ -0,0 +1,594 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@COMPILE_TENSREC_TRUE@am__append_1 = tens_rec.f90 tens_comb.f90
+@COMPILE_TENSREC_TRUE@am__append_2 = tens_rec.mod tens_comb.mod
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/interface
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_interface_la_LIBADD =
+am__libgolem95_interface_la_SOURCES_DIST = tool_lt_to_golem.f90 \
+ tensor_integrals.f90 gb0.f90 gc0.f90 gd0.f90 ge0.f90 gf0.f90 \
+ tens_rec.f90 tens_comb.f90
+@COMPILE_TENSREC_TRUE@am__objects_1 = \
+@COMPILE_TENSREC_TRUE@ libgolem95_interface_la-tens_rec.lo \
+@COMPILE_TENSREC_TRUE@ libgolem95_interface_la-tens_comb.lo
+am_libgolem95_interface_la_OBJECTS = \
+ libgolem95_interface_la-tool_lt_to_golem.lo \
+ libgolem95_interface_la-tensor_integrals.lo \
+ libgolem95_interface_la-gb0.lo libgolem95_interface_la-gc0.lo \
+ libgolem95_interface_la-gd0.lo libgolem95_interface_la-ge0.lo \
+ libgolem95_interface_la-gf0.lo $(am__objects_1)
+libgolem95_interface_la_OBJECTS = \
+ $(am_libgolem95_interface_la_OBJECTS)
+libgolem95_interface_la_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_interface_la_SOURCES)
+DIST_SOURCES = $(am__libgolem95_interface_la_SOURCES_DIST)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_interface.la
+AM_FCFLAGS = \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/form_factor \
+ -I$(top_builddir)/src/integrals/one_point \
+ -I$(top_builddir)/src/integrals/two_point \
+ -I$(top_builddir)/src/integrals/three_point \
+ -I$(top_builddir)/src/integrals/four_point \
+ -I$(top_builddir)/src/numerical
+
+libgolem95_interface_la_SOURCES = tool_lt_to_golem.f90 \
+ tensor_integrals.f90 gb0.f90 gc0.f90 gd0.f90 ge0.f90 gf0.f90 \
+ $(am__append_1)
+libgolem95_interface_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = tool_lt_to_golem.mod tensor_integrals.mod \
+ $(am__append_2)
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/interface/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/interface/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_interface.la: $(libgolem95_interface_la_OBJECTS) $(libgolem95_interface_la_DEPENDENCIES)
+ $(libgolem95_interface_la_LINK) $(libgolem95_interface_la_OBJECTS) $(libgolem95_interface_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_interface_la-tool_lt_to_golem.lo: tool_lt_to_golem.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-tool_lt_to_golem.lo $(FCFLAGS_f90) `test -f 'tool_lt_to_golem.f90' || echo '$(srcdir)/'`tool_lt_to_golem.f90
+
+libgolem95_interface_la-tensor_integrals.lo: tensor_integrals.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-tensor_integrals.lo $(FCFLAGS_f90) `test -f 'tensor_integrals.f90' || echo '$(srcdir)/'`tensor_integrals.f90
+
+libgolem95_interface_la-gb0.lo: gb0.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-gb0.lo $(FCFLAGS_f90) `test -f 'gb0.f90' || echo '$(srcdir)/'`gb0.f90
+
+libgolem95_interface_la-gc0.lo: gc0.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-gc0.lo $(FCFLAGS_f90) `test -f 'gc0.f90' || echo '$(srcdir)/'`gc0.f90
+
+libgolem95_interface_la-gd0.lo: gd0.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-gd0.lo $(FCFLAGS_f90) `test -f 'gd0.f90' || echo '$(srcdir)/'`gd0.f90
+
+libgolem95_interface_la-ge0.lo: ge0.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-ge0.lo $(FCFLAGS_f90) `test -f 'ge0.f90' || echo '$(srcdir)/'`ge0.f90
+
+libgolem95_interface_la-gf0.lo: gf0.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-gf0.lo $(FCFLAGS_f90) `test -f 'gf0.f90' || echo '$(srcdir)/'`gf0.f90
+
+libgolem95_interface_la-tens_rec.lo: tens_rec.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-tens_rec.lo $(FCFLAGS_f90) `test -f 'tens_rec.f90' || echo '$(srcdir)/'`tens_rec.f90
+
+libgolem95_interface_la-tens_comb.lo: tens_comb.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_interface_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_interface_la-tens_comb.lo $(FCFLAGS_f90) `test -f 'tens_comb.f90' || echo '$(srcdir)/'`tens_comb.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+gb0.o: tool_lt_to_golem.o
+gb0.lo: tool_lt_to_golem.lo
+gb0.obj: tool_lt_to_golem.obj
+gc0.o: tool_lt_to_golem.o
+gc0.lo: tool_lt_to_golem.lo
+gc0.obj: tool_lt_to_golem.obj
+gd0.o: tool_lt_to_golem.o
+gd0.lo: tool_lt_to_golem.lo
+gd0.obj: tool_lt_to_golem.obj
+ge0.o: tool_lt_to_golem.o
+ge0.lo: tool_lt_to_golem.lo
+ge0.obj: tool_lt_to_golem.obj
+gf0.o: tool_lt_to_golem.o
+gf0.lo: tool_lt_to_golem.lo
+gf0.obj: tool_lt_to_golem.obj
+tens_comb.o: tens_rec.o
+tens_comb.lo: tens_rec.lo
+tens_comb.obj: tens_rec.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/interface/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/interface/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/interface/Makefile.dep (revision 119)
@@ -0,0 +1,19 @@
+# Module dependencies
+gb0.o: tool_lt_to_golem.o
+gb0.lo: tool_lt_to_golem.lo
+gb0.obj: tool_lt_to_golem.obj
+gc0.o: tool_lt_to_golem.o
+gc0.lo: tool_lt_to_golem.lo
+gc0.obj: tool_lt_to_golem.obj
+gd0.o: tool_lt_to_golem.o
+gd0.lo: tool_lt_to_golem.lo
+gd0.obj: tool_lt_to_golem.obj
+ge0.o: tool_lt_to_golem.o
+ge0.lo: tool_lt_to_golem.lo
+ge0.obj: tool_lt_to_golem.obj
+gf0.o: tool_lt_to_golem.o
+gf0.lo: tool_lt_to_golem.lo
+gf0.obj: tool_lt_to_golem.obj
+tens_comb.o: tens_rec.o
+tens_comb.lo: tens_rec.lo
+tens_comb.obj: tens_rec.obj
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.am (revision 119)
@@ -0,0 +1,21 @@
+noinst_LTLIBRARIES=libgolem95_formfactor.la
+
+AM_FCFLAGS= \
+ -I $(top_builddir)/src/module \
+ -I $(top_builddir)/src/kinematic \
+ -I $(top_builddir)/src/numerical \
+ -I $(top_builddir)/src/interface \
+ -I $(top_builddir)/src/integrals/one_point \
+ -I $(top_builddir)/src/integrals/two_point \
+ -I $(top_builddir)/src/integrals/three_point \
+ -I $(top_builddir)/src/integrals/four_point
+
+libgolem95_formfactor_la_SOURCES= form_factor_1p.f90 form_factor_2p.f90 \
+ form_factor_3p.f90 form_factor_4p.f90 form_factor_5p.f90 \
+ form_factor_6p.f90
+libgolem95_formfactor_la_FCFLAGS=$(AM_FCFLAGS)
+nodist_pkginclude_HEADERS= form_factor_5p.mod form_factor_6p.mod form_factor_4p.mod \
+ form_factor_3p.mod form_factor_2p.mod form_factor_1p.mod
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_1p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_1p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_1p.f90 (revision 119)
@@ -0,0 +1,153 @@
+!
+!****h* src/form_factor/form_factor_1p
+! NAME
+!
+! Module form_factor_1p
+!
+! USAGE
+!
+! use form_factor_1p
+!
+! DESCRIPTION
+!
+! This module contains the form factor for tadpoles.
+!
+! OUTPUT
+!
+! It exports the functions:
+! * a10 -- a function to compute A^{1,0}
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * generic_function_1p (src/integrals/one_point/generic_function_1p.f90)
+! * matrice_s (src/kinematic/matrice_s.f90)
+! * array (src/module/array.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+!
+module form_factor_1p
+ !
+ use precision_golem
+ use generic_function_1p
+ use matrice_s
+ use array
+ use form_factor_type
+ use constante, only: czero
+ implicit none
+ !
+ private
+ !
+ interface a10
+ !
+ module procedure a10_b, a10_s
+ !
+ end interface
+ !
+ !
+ public :: a10
+ !
+ contains
+ !
+ !****f* src/form_factor/form_factor_1p/a10_b
+ ! NAME
+ !
+ ! Function a10_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a10_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{1,0}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a10_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a10_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = f1p(s_mat_p,b_pro)
+ a10_b = temp
+ !
+ end function a10_b
+ !
+ !****f* src/form_factor/form_factor_1p/a10_s
+ ! NAME
+ !
+ ! Function a10_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a10_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{1,0}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a10_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a10_s
+ !
+ a10_s = a10_b(packb(set))
+ !
+ end function a10_s
+ !
+ !
+end module form_factor_1p
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_2p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_2p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_2p.f90 (revision 119)
@@ -0,0 +1,482 @@
+!
+!****h* src/form_factor/form_factor_2p
+! NAME
+!
+! Module form_factor_2p
+!
+! USAGE
+!
+! use form_factor_2p
+!
+! DESCRIPTION
+!
+! This module contains the different form factors for two point amplitudes.
+!
+! OUTPUT
+!
+! It exports four functions:
+! * a20 -- a function to compute A^{2,0}
+! * a21 -- a function to compute A^{2,1}
+! * a22 -- a function to compute A^{2,2}
+! * b22 -- a function to compute B^{2,2}
+!
+! Note that a2xx and b2xx are generic functions which can be called either with a
+! set of integers or with an integer whose bits represents the set
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * generic_function_2p (src/integrals/two_point/generic_function_2p.f90)
+! * matrice_s (src/kinematic/matrice_s.f90)
+! * array (src/module/array.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module form_factor_2p
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type
+ use generic_function_2p
+ use array
+ use constante, only: czero
+ !
+ implicit none
+ !
+ private
+ !
+ interface a20
+ !
+ module procedure a20_b, a20_s
+ !
+ end interface
+ !
+ interface a21
+ !
+ module procedure a21_b, a21_s
+ !
+ end interface
+ !
+ interface a22
+ !
+ module procedure a22_b, a22_s
+ !
+ end interface
+ !
+ interface b22
+ !
+ module procedure b22_b, b22_s
+ !
+ end interface
+ !
+ public :: a20,a21,a22,b22
+ !
+ contains
+ !
+ !****f* src/form_factor/form_factor_2p/a20_b
+ ! NAME
+ !
+ ! Function a20_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a20_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{2,0}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a20_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a20_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = f2p(s_mat_p,b_pro)
+ a20_b = temp
+ !
+ end function a20_b
+ !
+ !****f* src/form_factor/form_factor_2p/a20_s
+ ! NAME
+ !
+ ! Function a20_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a20_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{2,0}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a20_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a20_s
+ !
+ a20_s = a20_b(packb(set))
+ !
+ end function a20_s
+ !
+ !****f* src/form_factor/form_factor_2p/a21_b
+ ! NAME
+ !
+ ! Function a21_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a21_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{2,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a21_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a21_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = -f2p(s_mat_p,b_pro,l1)
+ a21_b = temp
+ !
+ end function a21_b
+ !
+ !****f* src/form_factor/form_factor_2p/a21_s
+ ! NAME
+ !
+ ! Function a21_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a21_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{2,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a21_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a21_s
+ !
+ a21_s = a21_b(l1,packb(set))
+ !
+ end function a21_s
+ !
+ !****f* src/form_factor/form_factor_2p/a22_b
+ ! NAME
+ !
+ ! Function a22_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a22_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{2,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a22_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a22_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = f2p(s_mat_p,b_pro,l1,l2)
+ a22_b = temp
+ !
+ end function a22_b
+ !
+ !****f* src/form_factor/form_factor_2p/a22_s
+ ! NAME
+ !
+ ! Function a22_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a22_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{2,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a22_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a22_s
+ !
+ a22_s = a22_b(l1,l2,packb(set))
+ !
+ end function a22_s
+ !
+ !****f* src/form_factor/form_factor_2p/b22_b
+ ! NAME
+ !
+ ! Function b22_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b22_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{2,2}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b22_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b22_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = -f2p_np2(s_mat_p,b_pro)/2._ki
+ b22_b = temp
+ !
+ end function b22_b
+ !
+ !****f* src/form_factor/form_factor_2p/b22_s
+ ! NAME
+ !
+ ! Function b22_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b22_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{2,2}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ !
+ !*****
+ function b22_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b22_s
+ !
+ b22_s = b22_b(packb(set))
+ !
+ end function b22_s
+ !
+end module form_factor_2p
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_3p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_3p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_3p.f90 (revision 119)
@@ -0,0 +1,703 @@
+!
+!****h* src/form_factor/form_factor_3p
+! NAME
+!
+! Module form_factor_3p
+!
+! USAGE
+!
+! use form_factor_3p
+!
+! DESCRIPTION
+!
+! This module contains the different form factors for three point amplitudes.
+!
+! OUTPUT
+!
+! It exports six functions:
+! * a30 -- a function to compute A^{3,0}
+! * a31 -- a function to compute A^{3,1}
+! * a32 -- a function to compute A^{3,2}
+! * a33 -- a function to compute A^{3,3}
+! * b32 -- a function to compute B^{3,2}
+! * b33 -- a function to compute B^{3,3}
+!
+! Note that a3xx and b3xx are generic functions which can be called either with a
+! set of integers or with an integer whose bits represents the set
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * matrice_s (src/kinematic/matrice_s.f90)
+! * array (src/module/array.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module form_factor_3p
+ !
+ use precision_golem
+ use generic_function_3p
+ use matrice_s
+ use array
+ use form_factor_type
+ use constante, only: czero
+ !
+ implicit none
+ !
+ private
+ !
+ interface a30
+ !
+ module procedure a30_b, a30_s
+ !
+ end interface
+ !
+ interface a31
+ !
+ module procedure a31_b, a31_s
+ !
+ end interface
+ !
+ interface a32
+ !
+ module procedure a32_b, a32_s
+ !
+ end interface
+ !
+ interface a33
+ !
+ module procedure a33_b, a33_s
+ !
+ end interface
+ !
+ interface b32
+ !
+ module procedure b32_b, b32_s
+ !
+ end interface
+ !
+ interface b33
+ !
+ module procedure b33_b, b33_s
+ !
+ end interface
+ !
+ public :: a30,a31,a32,a33,b32,b33
+ !
+ contains
+ !
+ !****f* src/form_factor/form_factor_3p/a30_b
+ ! NAME
+ !
+ ! Function a30_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a30_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,0}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a30_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a30_b
+ !
+ integer :: b_pro
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ a30_b = f3p(s_mat_p,b_pro)
+ !
+ end function a30_b
+ !
+ !****f* src/form_factor/form_factor_3p/a30_s
+ ! NAME
+ !
+ ! Function a30_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a30_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,0}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a30_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a30_s
+ !
+ a30_s = a30_b(packb(set))
+ !
+ end function a30_s
+ !
+ !****f* src/form_factor/form_factor_3p/a31_b
+ ! NAME
+ !
+ ! Function a31_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a31_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a31_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a31_b
+ !
+ integer :: b_pro
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ a31_b = -f3p(s_mat_p,b_pro,l1)
+ !
+ end function a31_b
+ !
+ !****f* src/form_factor/form_factor_3p/a31_s
+ ! NAME
+ !
+ ! Function a31_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a31_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a31_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a31_s
+ !
+ a31_s = a31_b(l1,packb(set))
+ !
+ end function a31_s
+ !
+ !****f* src/form_factor/form_factor_3p/a32_b
+ ! NAME
+ !
+ ! Function a32_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a32_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a32_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a32_b
+ !
+ integer :: b_pro
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ a32_b = f3p(s_mat_p,b_pro,l1,l2)
+ !
+ end function a32_b
+ !
+ !****f* src/form_factor/form_factor_3p/a32_s
+ ! NAME
+ !
+ ! Function a32_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a32_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a32_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a32_s
+ !
+ a32_s = a32_b(l1,l2,packb(set))
+ !
+ end function a32_s
+ !
+ !****f* src/form_factor/form_factor_3p/a33_b
+ ! NAME
+ !
+ ! Function a33_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a33_b(l1,l2,l3,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a33_b(l1,l2,l3,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a33_b
+ !
+ integer :: b_pro
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ a33_b = -f3p(s_mat_p,b_pro,l1,l2,l3)
+ !
+ end function a33_b
+ !
+ !****f* src/form_factor/form_factor_3p/a33_s
+ ! NAME
+ !
+ ! Function a33_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a33_s(l1,l2,l3,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{3,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a33_s(l1,l2,l3,set)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a33_s
+ !
+ a33_s = a33_b(l1,l2,l3,packb(set))
+ !
+ end function a33_s
+ !
+ !****f* src/form_factor/form_factor_3p/b32_b
+ ! NAME
+ !
+ ! Function b32_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b32_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{3,2}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b32_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b32_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = -f3p_np2(s_mat_p,b_pro)/2._ki
+ b32_b = temp
+ !
+ end function b32_b
+ !
+ !****f* src/form_factor/form_factor_3p/b32_s
+ ! NAME
+ !
+ ! Function b32_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b32_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{3,2}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b32_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b32_s
+ !
+ b32_s = b32_b(packb(set))
+ !
+ end function b32_s
+ !
+ !****f* src/form_factor/form_factor_3p/b33_b
+ ! NAME
+ !
+ ! Function b33_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b33_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{3,3}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b33_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b33_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp(:) = czero
+ temp(2:3) = f3p_np2(s_mat_p,b_pro,l1)/2._ki
+ b33_b = temp
+ !
+ end function b33_b
+ !
+ !****f* src/form_factor/form_factor_3p/b33_s
+ ! NAME
+ !
+ ! Function b33_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b33_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{3,3}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b33_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b33_s
+ !
+ b33_s = b33_b(l1,packb(set))
+ !
+ end function b33_s
+ !
+end module form_factor_3p
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_4p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_4p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_4p.f90 (revision 119)
@@ -0,0 +1,1482 @@
+!
+!****h* src/form_factor/form_factor_4p
+! NAME
+!
+! Module form_factor_4p
+!
+! USAGE
+!
+! use form_factor_4p
+!
+! DESCRIPTION
+!
+! This module contains the different form factors for four point amplitudes.
+!
+! OUTPUT
+!
+! It exports nine functions:
+! * a40 -- a function to compute A^{4,0}
+! * a41 -- a function to compute A^{4,1}
+! * a42 -- a function to compute A^{4,2}
+! * a43 -- a function to compute A^{4,3}
+! * a44 -- a function to compute A^{4,4}
+! * b42 -- a function to compute B^{4,2}
+! * b43 -- a function to compute B^{4,3}
+! * b44 -- a function to compute B^{4,4}
+! * c44 -- a function to compute C^{4,4}
+!
+! Note that a4xx, b4xx and c4xx are generic functions which can be called either with a
+! set of integers or with an integer whose bits represents the set
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * generic_function_4p (src/integrals/four_point/generic_function_4p.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * matrice_s (src/kinematic/matrice_s.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+!
+module form_factor_4p
+ !
+ use precision_golem
+ use generic_function_4p
+ use generic_function_3p
+ use matrice_s
+ use array
+ use sortie_erreur
+ use form_factor_type
+ use constante, only: czero
+ !
+ implicit none
+ !
+ private
+ !
+ integer :: b_pin_glob,b_pro_glob
+ !
+ interface a40
+ !
+ module procedure a40_b, a40_s
+ !
+ end interface
+ !
+ interface a41
+ !
+ module procedure a41_b, a41_s
+ !
+ end interface
+ !
+ interface a42
+ !
+ module procedure a42_b, a42_s
+ !
+ end interface
+ !
+ interface a43
+ !
+ module procedure a43_b, a43_s
+ !
+ end interface
+ !
+ interface a44
+ !
+ module procedure a44_b, a44_s
+ !
+ end interface
+ !
+ interface b42
+ !
+ module procedure b42_b, b42_s
+ !
+ end interface
+ !
+ interface b43
+ !
+ module procedure b43_b, b43_s
+ !
+ end interface
+ !
+ interface b44
+ !
+ module procedure b44_b, b44_s
+ !
+ end interface
+ !
+ interface c44
+ !
+ module procedure c44_b, c44_s
+ !
+ end interface
+ !
+ !
+ public :: a40,a41,a42,a43,a44,b42,b43,b44,c44
+ !
+ !
+ contains
+ !
+ !
+ !****f* src/form_factor/form_factor_4p/a40_b
+ ! NAME
+ !
+ ! Function a40_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a40_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,0}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a40_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a40_b
+ !
+ integer :: j
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ !real(ki) :: m1s,m2s,m3s,m4s
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ !integer :: m1,m2,m3,m4
+ integer, dimension(4) :: s
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ s = unpackb(b_pro,countb(b_pro))
+ !
+ !
+ ! test if no internal masses are present
+ !
+ no_masses: if (iand(s_mat_p%b_zero, b_pro) .eq. b_pro ) then !case no-internal masses
+ !
+ temp1 = sumb(b_pin)*f4p_np2(s_mat_p,b_pro,b_pin)
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp2 = temp2 + b(j,b_pin)*f3p(s_mat_p,b_pro_mj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a40_b = temp2
+ !
+ else ! internal masses are present: use 4-dim boxes
+ !
+ temp2(1:3) = f4p(s_mat_p,b_pro,b_pin)
+ a40_b = temp2
+ !
+ end if no_masses ! end test if internal masses are present
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a40'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a40_b
+ !
+ !****f* src/form_factor/form_factor_4p/a40_s
+ ! NAME
+ !
+ ! Function a40_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a40_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,0}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a40_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a40_s
+ !
+ a40_s = a40_b(packb(set))
+ !
+ end function a40_s
+ !
+ !****f* src/form_factor/form_factor_4p/a41_b
+ ! NAME
+ !
+ ! Function a41_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a41_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a41_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a41_b
+ !
+ integer :: j
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = -b(l1,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin)
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp2 = temp2 - inv_s(j,l1,b_pin)*f3p(s_mat_p,b_pro_mj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a41_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a41'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a41_b
+ !
+ !****f* src/form_factor/form_factor_4p/a41_s
+ ! NAME
+ !
+ ! Function a41_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a41_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a41_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a41_s
+ !
+ a41_s = a41_b(l1,packb(set))
+ !
+ end function a41_s
+ !
+ !****f* src/form_factor/form_factor_4p/a42_b
+ ! NAME
+ !
+ ! Function a42_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a42_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a42_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a42_b
+ !
+ integer :: j
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = b(l1,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,l2) &
+ + b(l2,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,l1) &
+ - inv_s(l1,l2,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin)
+ !
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp2 = temp2 + ( inv_s(j,l1,b_pin)*f3p(s_mat_p,b_pro_mj,l2) &
+ &+ inv_s(j,l2,b_pin)*f3p(s_mat_p,b_pro_mj,l1) )/2._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a42_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a42'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a42_b
+ !
+ !****f* src/form_factor/form_factor_4p/a42_s
+ ! NAME
+ !
+ ! Function a42_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a42_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a42_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a42_s
+ !
+ a42_s = a42_b(l1,l2,packb(set))
+ !
+ end function a42_s
+ !
+ !****f* src/form_factor/form_factor_4p/a43_b
+ ! NAME
+ !
+ ! Function a43_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a43_b(l1,l2,l3,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a43_b(l1,l2,l3,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a43_b
+ !
+ complex(ki), dimension(3) :: t43
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ t43 = f43(l1,l2,l3) + f43(l2,l1,l3) + f43(l3,l2,l1)
+ a43_b = t43
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a43'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a43_b
+ !
+ !****f* src/form_factor/form_factor_4p/a43_s
+ ! NAME
+ !
+ ! Function a43_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a43_s(l1,l2,l3,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a43_s(l1,l2,l3,set)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a43_s
+ !
+ a43_s = a43_b(l1,l2,l3,packb(set))
+ !
+ end function a43_s
+ !
+ !****if* src/form_factor/form_factor_4p/f43
+ ! NAME
+ !
+ ! Function f43
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f43(k1,k2,k3)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a43
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a43
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f43(k1,k2,k3)
+ !
+ integer, intent(in) :: k1,k2,k3
+ complex(ki), dimension(3) :: f43
+ !
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: j
+ integer :: ib
+ integer :: b_pro_mj
+ !
+ temp1 = 2._ki/3._ki*inv_s(k2,k3,b_pin_glob)*f4p_np2(s_mat_p,b_pro_glob,b_pin_glob,k1) &
+ - b(k1,b_pin_glob)*f4p_np2(s_mat_p,b_pro_glob,b_pin_glob,k2,k3)
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ !
+ temp2 = temp2 - inv_s(j,k1,b_pin_glob) &
+ *f3p(s_mat_p,b_pro_mj,k2,k3)/3._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f43 = temp2
+ f43(3) = f43(3) + temp1
+ !
+ end function f43
+ !
+ !****f* src/form_factor/form_factor_4p/a44_b
+ ! NAME
+ !
+ ! Function a44_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a44_b(l1,l2,l3,l4,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,4}(l1,l2,l3,l4).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a44_b(l1,l2,l3,l4,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3,l4
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a44_b
+ !
+ complex(ki), dimension(3) :: t44
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ t44 = f44(l1,l2,l3,l4) + f44(l1,l3,l2,l4) + f44(l1,l4,l3,l2) &
+ + f44(l3,l2,l1,l4) + f44(l4,l2,l3,l1) + f44(l3,l4,l1,l2) &
+ + g44(l1,l2,l3,l4) + g44(l2,l1,l3,l4) + g44(l3,l1,l2,l4) &
+ + g44(l4,l1,l2,l3)
+ a44_b = t44
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a44'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a44_b
+ !
+ !****f* src/form_factor/form_factor_4p/a44_s
+ ! NAME
+ !
+ ! Function a44_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a44_s(l1,l2,l3,l4,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{4,4}(l1,l2,l3,l4).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a44_s(l1,l2,l3,l4,set)
+ !
+ integer, intent (in) :: l1,l2,l3,l4
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a44_s
+ !
+ a44_s = a44_b(l1,l2,l3,l4,packb(set))
+ !
+ end function a44_s
+ !
+ !****if* src/form_factor/form_factor_4p/f44
+ ! NAME
+ !
+ ! Function f44
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f44(k1,k2,k3,k4)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a44
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a44
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f44(k1,k2,k3,k4)
+ !
+ integer, intent(in) :: k1,k2,k3,k4
+ complex(ki), dimension(3) :: f44
+ !
+ complex(ki) :: temp1
+ !
+ temp1 = -1._ki/2._ki*inv_s(k1,k2,b_pin_glob) &
+ *f4p_np2(s_mat_p,b_pro_glob,b_pin_glob,k3,k4)
+ f44(:) = czero
+ f44(3) = temp1
+ !
+ end function f44
+ !
+ !****if* src/form_factor/form_factor_4p/g44
+ ! NAME
+ !
+ ! Function g44
+ !
+ ! USAGE
+ !
+ ! real_dim6 = g44(k1,k2,k3,k4)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a44
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a44
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function g44(k1,k2,k3,k4)
+ !
+ integer, intent(in) :: k1,k2,k3,k4
+ complex(ki), dimension(3) :: g44
+ !
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: j
+ integer :: ib
+ integer :: b_pro_mj
+ !
+ temp1 = b(k1,b_pin_glob)*f4p_np2(s_mat_p,b_pro_glob,b_pin_glob,k2,k3,k4)
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ !
+ if ( (j /= k2) .and. (j /= k3) .and. (j /= k4) ) then
+ !
+ temp2 = temp2 + inv_s(j,k1,b_pin_glob) &
+ *f3p(s_mat_p,b_pro_mj,k2,k3,k4)/4._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ g44 = temp2
+ g44(3) = g44(3) + temp1
+ !
+ end function g44
+ !
+ !****f* src/form_factor/form_factor_4p/b42_b
+ ! NAME
+ !
+ ! Function b42_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b42_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{4,2}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b42_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b42_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp2
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp2(:) = czero
+ temp2(3) = -f4p_np2(s_mat_p,b_pro,b_pin)/2._ki
+ b42_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b42'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b42_b
+ !
+ !****f* src/form_factor/form_factor_4p/b42_s
+ ! NAME
+ !
+ ! Function b42_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b42_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{4,2}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b42_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b42_s
+ !
+ b42_s = b42_b(packb(set))
+ !
+ end function b42_s
+ !
+ !****f* src/form_factor/form_factor_4p/b43_b
+ ! NAME
+ !
+ ! Function b43_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b43_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{4,3}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b43_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b43_b
+ !
+ integer :: b_pro
+ !~ real(ki), dimension(2) :: temp1
+ complex(ki), dimension(3) :: temp2
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp2(:) = czero
+ temp2(3) = f4p_np2(s_mat_p,b_pro,b_pin,l1)/2._ki
+ b43_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b43'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b43_b
+ !
+ !****f* src/form_factor/form_factor_4p/b43_s
+ ! NAME
+ !
+ ! Function b43_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b43_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{4,3}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b43_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b43_s
+ !
+ b43_s = b43_b(l1,packb(set))
+ !
+ end function b43_s
+ !
+ !****f* src/form_factor/form_factor_4p/b44_b
+ ! NAME
+ !
+ ! Function b44_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b44_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{4,4}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b44_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b44_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp2
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp2(:) = czero
+ temp2(3) = -f4p_np2(s_mat_p,b_pro,b_pin,l1,l2)/2._ki
+ b44_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b44'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b44_b
+ !
+ !****f* src/form_factor/form_factor_4p/b44_s
+ ! NAME
+ !
+ ! Function b44_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b44_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{4,4}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b44_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b44_s
+ !
+ b44_s = b44_b(l1,l2,packb(set))
+ !
+ end function b44_s
+ !
+ !****f* src/form_factor/form_factor_4p/c44_b
+ ! NAME
+ !
+ ! Function c44_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = c44_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor C^{4,4}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function c44_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: c44_b
+ !
+ integer :: b_pro
+ complex(ki), dimension(3) :: temp3
+ !
+ if (dim_s >= 4) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp3(:) = czero
+ !
+ temp3(2:3) = f4p_np4(s_mat_p,b_pro,b_pin)/4._ki
+ c44_b = temp3
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function c44'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 4: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function c44_b
+ !
+ !****f* src/form_factor/form_factor_4p/c44_s
+ ! NAME
+ !
+ ! Function c44_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = c44_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor C^{4,4}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function c44_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: c44_s
+ !
+ c44_s = c44_b(packb(set))
+ !
+ end function c44_s
+ !
+end module form_factor_4p
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.in (revision 119)
@@ -0,0 +1,565 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/form_factor
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_formfactor_la_LIBADD =
+am_libgolem95_formfactor_la_OBJECTS = \
+ libgolem95_formfactor_la-form_factor_1p.lo \
+ libgolem95_formfactor_la-form_factor_2p.lo \
+ libgolem95_formfactor_la-form_factor_3p.lo \
+ libgolem95_formfactor_la-form_factor_4p.lo \
+ libgolem95_formfactor_la-form_factor_5p.lo \
+ libgolem95_formfactor_la-form_factor_6p.lo
+libgolem95_formfactor_la_OBJECTS = \
+ $(am_libgolem95_formfactor_la_OBJECTS)
+libgolem95_formfactor_la_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_formfactor_la_SOURCES)
+DIST_SOURCES = $(libgolem95_formfactor_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_formfactor.la
+AM_FCFLAGS = \
+ -I $(top_builddir)/src/module \
+ -I $(top_builddir)/src/kinematic \
+ -I $(top_builddir)/src/numerical \
+ -I $(top_builddir)/src/interface \
+ -I $(top_builddir)/src/integrals/one_point \
+ -I $(top_builddir)/src/integrals/two_point \
+ -I $(top_builddir)/src/integrals/three_point \
+ -I $(top_builddir)/src/integrals/four_point
+
+libgolem95_formfactor_la_SOURCES = form_factor_1p.f90 form_factor_2p.f90 \
+ form_factor_3p.f90 form_factor_4p.f90 form_factor_5p.f90 \
+ form_factor_6p.f90
+
+libgolem95_formfactor_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = form_factor_5p.mod form_factor_6p.mod form_factor_4p.mod \
+ form_factor_3p.mod form_factor_2p.mod form_factor_1p.mod
+
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/form_factor/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/form_factor/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_formfactor.la: $(libgolem95_formfactor_la_OBJECTS) $(libgolem95_formfactor_la_DEPENDENCIES)
+ $(libgolem95_formfactor_la_LINK) $(libgolem95_formfactor_la_OBJECTS) $(libgolem95_formfactor_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_formfactor_la-form_factor_1p.lo: form_factor_1p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_formfactor_la-form_factor_1p.lo $(FCFLAGS_f90) `test -f 'form_factor_1p.f90' || echo '$(srcdir)/'`form_factor_1p.f90
+
+libgolem95_formfactor_la-form_factor_2p.lo: form_factor_2p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_formfactor_la-form_factor_2p.lo $(FCFLAGS_f90) `test -f 'form_factor_2p.f90' || echo '$(srcdir)/'`form_factor_2p.f90
+
+libgolem95_formfactor_la-form_factor_3p.lo: form_factor_3p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_formfactor_la-form_factor_3p.lo $(FCFLAGS_f90) `test -f 'form_factor_3p.f90' || echo '$(srcdir)/'`form_factor_3p.f90
+
+libgolem95_formfactor_la-form_factor_4p.lo: form_factor_4p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_formfactor_la-form_factor_4p.lo $(FCFLAGS_f90) `test -f 'form_factor_4p.f90' || echo '$(srcdir)/'`form_factor_4p.f90
+
+libgolem95_formfactor_la-form_factor_5p.lo: form_factor_5p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_formfactor_la-form_factor_5p.lo $(FCFLAGS_f90) `test -f 'form_factor_5p.f90' || echo '$(srcdir)/'`form_factor_5p.f90
+
+libgolem95_formfactor_la-form_factor_6p.lo: form_factor_6p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_formfactor_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_formfactor_la-form_factor_6p.lo $(FCFLAGS_f90) `test -f 'form_factor_6p.f90' || echo '$(srcdir)/'`form_factor_6p.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+form_factor_6p.o: form_factor_5p.o
+form_factor_6p.lo: form_factor_5p.lo
+form_factor_6p.obj: form_factor_5p.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_5p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_5p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_5p.f90 (revision 119)
@@ -0,0 +1,2548 @@
+!
+!****h* src/form_factor/form_factor_5p
+! NAME
+!
+! Module form_factor_5p
+!
+! USAGE
+!
+! use form_factor_5p
+!
+! DESCRIPTION
+!
+! This module contains the different form factors for five point amplitudes.
+!
+! OUTPUT
+!
+! It exports twelve functions:
+! * a50 -- a function to compute A^{5,0}
+! * a51 -- a function to compute A^{5,1}
+! * a52 -- a function to compute A^{5,2}
+! * a53 -- a function to compute A^{5,3}
+! * a54 -- a function to compute A^{5,4}
+! * a55 -- a function to compute A^{5,5}
+! * b52 -- a function to compute B^{5,2}
+! * b53 -- a function to compute B^{5,3}
+! * b54 -- a function to compute B^{5,4}
+! * b55 -- a function to compute B^{5,5}
+! * c54 -- a function to compute C^{5,4}
+! * c55 -- a function to compute C^{5,5}
+!
+! Note that a5xx, b5xx and c5xx are generic functions which can be called either with a
+! set of integers or with an integer whose bits represents the set
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * generic_function_4p (src/integrals/four_point/generic_function_4p.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * matrice_s (src/kinematic/matrice_s.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * multiply_div (src/module/multiply_div.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+!
+!*****
+module form_factor_5p
+ !
+ use precision_golem
+ use generic_function_4p
+ use generic_function_3p
+ use array
+ use matrice_s
+ use sortie_erreur
+ use multiply_div
+ use form_factor_type
+ use constante, only: czero
+ implicit none
+ !
+ private
+ integer :: b_pin_glob,b_pro_glob
+ !
+ interface a50
+ !
+ module procedure a50_b, a50_s
+ !
+ end interface
+ !
+ interface a51
+ !
+ module procedure a51_b, a51_s
+ !
+ end interface
+ !
+ interface a52
+ !
+ module procedure a52_b, a52_s
+ !
+ end interface
+ !
+ interface a53
+ !
+ module procedure a53_b, a53_s
+ !
+ end interface
+ !
+ interface a54
+ !
+ module procedure a54_b, a54_s
+ !
+ end interface
+ !
+ interface a55
+ !
+ module procedure a55_b, a55_s
+ !
+ end interface
+ !
+ interface b52
+ !
+ module procedure b52_b, b52_s
+ !
+ end interface
+ !
+ interface b53
+ !
+ module procedure b53_b, b53_s
+ !
+ end interface
+ !
+ interface b54
+ !
+ module procedure b54_b, b54_s
+ !
+ end interface
+ !
+ interface b55
+ !
+ module procedure b55_b, b55_s
+ !
+ end interface
+ !
+ interface c54
+ !
+ module procedure c54_b, c54_s
+ !
+ end interface
+ !
+ interface c55
+ !
+ module procedure c55_b, c55_s
+ !
+ end interface
+ !
+ public :: a50,a51,a52,a53,a54,a55,b52,b53,b54,b55,c54,c55
+ !
+ contains
+ !
+ !****f* src/form_factor/form_factor_5p/a50_b
+ ! NAME
+ !
+ ! Function a50_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a50_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,0}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a50_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a50_b
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj
+ integer :: b_pro,b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp1 = temp1 + b(j,b_pin)*sumb(b_pin_pj)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj)
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 + b(j,b_pin)*b(k,b_pin_pj)*f3p(s_mat_p,b_pro_mjk)
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a50_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a50'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a50_b
+ !
+ !****f* src/form_factor/form_factor_5p/a50_s
+ ! NAME
+ !
+ ! Function a50_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a50_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,0}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a50_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a50_s
+ !
+ a50_s = a50_b(packb(set))
+ !
+ end function a50_s
+ !
+ !****f* src/form_factor/form_factor_5p/a51_b
+ ! NAME
+ !
+ ! Function a51_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a51_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a51_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a51_b
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj
+ integer :: b_pro,b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp1 = temp1 - inv_s(j,l1,b_pin)*sumb(b_pin_pj)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj)
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 - inv_s(j,l1,b_pin)*b(k,b_pin_pj)*f3p(s_mat_p,b_pro_mjk)
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a51_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a51'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a51_b
+ !
+ !****f* src/form_factor/form_factor_5p/a51_s
+ ! NAME
+ !
+ ! Function a51_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a51_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a51_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a51_s
+ !
+ a51_s = a51_b(l1,packb(set))
+ !
+ end function a51_s
+ !
+ !****f* src/form_factor/form_factor_5p/a52_b
+ ! NAME
+ !
+ ! Function a52_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a52_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a52_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a52_b
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj
+ integer :: b_pro,b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp1 = temp1 + ( inv_s(j,l1,b_pin)*b(l2,b_pin) + inv_s(j,l2,b_pin)*b(l1,b_pin) &
+ - 2._ki*inv_s(l1,l2,b_pin)*b(j,b_pin) &
+ + b(j,b_pin)*inv_s(l1,l2,b_pin_pj) )*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj)
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 + ( inv_s(j,l2,b_pin)*inv_s(k,l1,b_pin_pj) &
+ + inv_s(j,l1,b_pin)*inv_s(k,l2,b_pin_pj) ) &
+ *f3p(s_mat_p,b_pro_mjk)/2._ki
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a52_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a52'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a52_b
+ !
+ !****f* src/form_factor/form_factor_5p/a52_s
+ ! NAME
+ !
+ ! Function a52_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a52_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a52_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a52_s
+ !
+ a52_s = a52_b(l1,l2,packb(set))
+ !
+ end function a52_s
+ !
+ !****f* src/form_factor/form_factor_5p/a53_b
+ ! NAME
+ !
+ ! Function a53_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a53_b(l1,l2,l3,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a53_b(l1,l2,l3,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a53_b
+ !
+ complex(ki), dimension(3) :: t53
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ t53 = f53(l1,l2,l3) + f53(l1,l3,l2) + f53(l3,l2,l1)
+ a53_b = t53
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a53'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a53_b
+ !
+ !****f* src/form_factor/form_factor_5p/a53_s
+ ! NAME
+ !
+ ! Function a53_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a53_s(l1,l2,l3,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a53_s(l1,l2,l3,set)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a53_s
+ !
+ a53_s = a53_b(l1,l2,l3,packb(set))
+ !
+ end function a53_s
+ !
+ !****if* src/form_factor/form_factor_5p/f53
+ ! NAME
+ !
+ ! Function f53
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f53(k1,k2,k3)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a53
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a53
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f53(k1,k2,k3)
+ !
+ integer, intent(in) :: k1,k2,k3
+ complex(ki), dimension(3) :: f53
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ complex(ki) :: bk1_cache, bk2_cache, invsk1k2_cache
+ complex(ki) :: invsjk1_cache, invsjk2_cache
+ integer :: ib,ibj
+ integer :: b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+
+ bk1_cache = b(k1,b_pin_glob)
+ bk2_cache = b(k2,b_pin_glob)
+ invsk1k2_cache = inv_s(k1,k2,b_pin_glob)
+
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = ibset(b_pin_glob,j)
+ !
+ invsjk1_cache = inv_s(j,k1,b_pin_glob)
+ invsjk2_cache = inv_s(j,k2,b_pin_glob)
+
+ temp1 = temp1 - ( invsjk1_cache*bk2_cache &
+ + invsjk2_cache*bk1_cache &
+ - 2._ki*invsk1k2_cache*b(j,b_pin_glob) &
+ + b(j,b_pin_glob)*inv_s(k1,k2,b_pin_pj) ) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,k3)*2._ki/3._ki &
+ + inv_s(j,k3,b_pin_glob)*inv_s(k1,k2,b_pin_pj) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj)/3._ki
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 - ( invsjk1_cache*inv_s(k,k2,b_pin_pj) &
+ + invsjk2_cache*inv_s(k,k1,b_pin_pj) ) &
+ *f3p(s_mat_p,b_pro_mjk,k3)/6._ki
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f53 = temp2
+ f53(3) = f53(3) + temp1
+ !
+ end function f53
+ !
+ !****f* src/form_factor/form_factor_5p/a54_b
+ ! NAME
+ !
+ ! Function a54_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a54_b(l1,l2,l3,l4,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,4}(l1,l2,l3,l4).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a54_b(l1,l2,l3,l4,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3,l4
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a54_b
+ !
+ complex(ki), dimension(3) :: t54
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ t54 = ( f54(l1,l2,l3,l4) + f54(l1,l3,l2,l4) + f54(l1,l4,l3,l2) &
+ + f54(l3,l2,l1,l4) + f54(l4,l2,l3,l1) + f54(l3,l4,l1,l2) &
+ + g54(l1,l2,l3,l4) + g54(l2,l1,l3,l4) + g54(l3,l2,l1,l4) &
+ + g54(l4,l2,l3,l1) )/4._ki
+ a54_b = t54
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a54'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a54_b
+ !
+ !****f* src/form_factor/form_factor_5p/a54_s
+ ! NAME
+ !
+ ! Function a54_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a54_s(l1,l2,l3,l4,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,4}(l1,l2,l3,l4).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a54_s(l1,l2,l3,l4,set)
+ !
+ integer, intent (in) :: l1,l2,l3,l4
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a54_s
+ !
+ a54_s = a54_b(l1,l2,l3,l4,packb(set))
+ !
+ end function a54_s
+ !
+ !****if* src/form_factor/form_factor_5p/f54
+ ! NAME
+ !
+ ! Function f54
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f54(k1,k2,k3,k4)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a54
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a54
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f54(k1,k2,k3,k4)
+ !
+ integer, intent(in) :: k1,k2,k3,k4
+ complex(ki), dimension(3) :: f54
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj
+ integer :: b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 - 2._ki*( 2._ki*inv_s(k3,k4,b_pin_glob)*b(j,b_pin_glob) &
+ - inv_s(j,k4,b_pin_glob)*b(k3,b_pin_glob) &
+ - inv_s(j,k3,b_pin_glob)*b(k4,b_pin_glob) &
+ - b(j,b_pin_glob)*inv_s(k3,k4,b_pin_pj) ) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,k1,k2)
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 + ( inv_s(j,k3,b_pin_glob)*inv_s(k,k4,b_pin_pj) &
+ + inv_s(j,k4,b_pin_glob)*inv_s(k,k3,b_pin_pj) ) &
+ *f3p(s_mat_p,b_pro_mjk,k1,k2)/3._ki
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f54 = temp2
+ f54(3) = f54(3) + temp1
+ !
+ end function f54
+ !
+ !****if* src/form_factor/form_factor_5p/g54
+ ! NAME
+ !
+ ! Function g54
+ !
+ ! USAGE
+ !
+ ! real_dim6 = g54(k1,k2,k3,k4)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a54
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a54
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function g54(k1,k2,k3,k4)
+ !
+ integer, intent(in) :: k1,k2,k3,k4
+ complex(ki), dimension(3) :: g54
+ !
+ integer :: j
+ complex(ki) :: temp1
+ integer :: ib
+ integer :: b_pro_mj
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 - 2._ki*( inv_s(j,k4,b_pin_glob)*inv_s(k2,k3,b_pin_pj) &
+ + inv_s(j,k3,b_pin_glob)*inv_s(k2,k4,b_pin_pj) &
+ + inv_s(j,k2,b_pin_glob)*inv_s(k3,k4,b_pin_pj) ) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,k1)/3._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ g54(:) = czero
+ g54(3) = g54(3) + temp1
+ !
+ end function g54
+ !
+ !****f* src/form_factor/form_factor_5p/a55_b
+ ! NAME
+ !
+ ! Function a55_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a55_b(l1,l2,l3,l4,l5,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,5}(l1,l2,l3,l4,l5).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l5 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a55_b(l1,l2,l3,l4,l5,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3,l4,l5
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a55_b
+ !
+ complex(ki), dimension(3) :: t55
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ t55 = ( f55(l1,l2,l3,l4,l5) + f55(l1,l2,l4,l3,l5) &
+ + f55(l1,l2,l5,l4,l3) + f55(l1,l4,l3,l2,l5) &
+ + f55(l1,l5,l3,l4,l2) + f55(l4,l2,l3,l1,l5) &
+ + f55(l5,l2,l3,l4,l1) + f55(l1,l4,l5,l2,l3) &
+ + f55(l4,l2,l5,l1,l3) + f55(l4,l5,l3,l1,l2) &
+ + g55(l1,l2,l3,l4,l5) + g55(l1,l3,l2,l4,l5) &
+ + g55(l3,l2,l1,l4,l5) + g55(l4,l2,l3,l1,l5) &
+ + g55(l1,l4,l3,l2,l5) + g55(l5,l2,l3,l4,l1) &
+ + g55(l1,l5,l3,l4,l2) + g55(l3,l4,l1,l2,l5) &
+ + g55(l3,l5,l1,l4,l2) + g55(l4,l5,l3,l1,l2) )/5._ki
+ a55_b = t55
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a55'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a55_b
+ !
+ !****f* src/form_factor/form_factor_5p/a55_s
+ ! NAME
+ !
+ ! Function a55_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a55_s(l1,l2,l3,l4,l5,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{5,5}(l1,l2,l3,l4,l5).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l5 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a55_s(l1,l2,l3,l4,l5,set)
+ !
+ integer, intent (in) :: l1,l2,l3,l4,l5
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a55_s
+ !
+ a55_s = a55_b(l1,l2,l3,l4,l5,packb(set))
+ !
+ end function a55_s
+ !
+ !****if* src/form_factor/form_factor_5p/f55
+ ! NAME
+ !
+ ! Function f55
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f55(k1,k2,k3,k4,k5)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a55
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ ! * k5 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a55
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f55(k1,k2,k3,k4,k5)
+ !
+ integer, intent(in) :: k1,k2,k3,k4,k5
+ complex(ki), dimension(3) :: f55
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj
+ integer :: b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 + 2._ki*( 2._ki*inv_s(k4,k5,b_pin_glob)*b(j,b_pin_glob) &
+ - inv_s(j,k4,b_pin_glob)*b(k5,b_pin_glob) &
+ - inv_s(j,k5,b_pin_glob)*b(k4,b_pin_glob) &
+ - b(j,b_pin_glob)*inv_s(k4,k5,b_pin_pj) ) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,parf1=k1,parf2=k2,parf3=k3)
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 - ( inv_s(j,k5,b_pin_glob)*inv_s(k,k4,b_pin_pj) &
+ + inv_s(j,k4,b_pin_glob)*inv_s(k,k5,b_pin_pj) ) &
+ *f3p(s_mat_p,b_pro_mjk,parf1=k1,parf2=k2,parf3=k3)/4._ki
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f55 = temp2
+ f55(3) = f55(3) + temp1
+ !
+ end function f55
+ !
+ !****if* src/form_factor/form_factor_5p/g55
+ ! NAME
+ !
+ ! Function g55
+ !
+ ! USAGE
+ !
+ ! real_dim6 = g55(k1,k2,k3,k4,k5)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a55
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ ! * k5 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a55
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function g55(k1,k2,k3,k4,k5)
+ !
+ integer, intent(in) :: k1,k2,k3,k4,k5
+ complex(ki), dimension(3) :: g55
+ !
+ integer :: j
+ complex(ki) :: temp1
+ integer :: ib
+ integer :: b_pro_mj
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 + ( inv_s(j,k4,b_pin_glob)*inv_s(k3,k5,b_pin_pj) &
+ + inv_s(j,k3,b_pin_glob)*inv_s(k4,k5,b_pin_pj) &
+ + inv_s(j,k5,b_pin_glob)*inv_s(k3,k4,b_pin_pj) ) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,parf1=k1,parf2=k2)/2._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ g55(:) = czero
+ g55(3) = g55(3) + temp1
+ !
+ end function g55
+ !
+ !****f* src/form_factor/form_factor_5p/b52_b
+ ! NAME
+ !
+ ! Function b52_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b52_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,2}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b52_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b52_b
+ !
+ integer :: j
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp1 = temp1 - b(j,b_pin)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj)/2._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(:) = czero
+ temp2(3) = temp1
+ b52_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b52'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b52_b
+ !
+ !****f* src/form_factor/form_factor_5p/b52_s
+ ! NAME
+ !
+ ! Function b52_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b52_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,2}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b52_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b52_s
+ !
+ b52_s = b52_b(packb(set))
+ !
+ end function b52_s
+ !
+ !****f* src/form_factor/form_factor_5p/b53_b
+ ! NAME
+ !
+ ! Function b53_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b53_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,3}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b53_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b53_b
+ !
+ integer :: j
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = ibset(b_pin,j)
+ !
+ temp1 = temp1 + ( b(j,b_pin)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,l1) &
+ + inv_s(j,l1,b_pin)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj)/2._ki )/3._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(:) = czero
+ temp2(3) = temp1
+ b53_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b53'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b53_b
+ !
+ !****f* src/form_factor/form_factor_5p/b53_s
+ ! NAME
+ !
+ ! Function b53_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b53_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,3}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b53_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b53_s
+ !
+ b53_s = b53_b(l1,packb(set))
+ !
+ end function b53_s
+ !
+ !****f* src/form_factor/form_factor_5p/b54_b
+ ! NAME
+ !
+ ! Function b54_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b54_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,4}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b54_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b54_b
+ !
+ integer :: j,k
+ complex(ki) :: temp1
+ complex(ki), dimension(2) :: temp2
+ complex(ki), dimension(3) :: temp3
+ integer :: ib,ibj
+ integer :: b_pro,b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp1 = temp1 - b(j,b_pin)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,l1,l2) &
+ - ( inv_s(j,l1,b_pin)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,l2) &
+ + inv_s(j,l2,b_pin)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,l1) &
+ )/3._ki
+ temp2 = temp2 + mult_div(-2._ki/3._ki,f4p_np4(s_mat_p,b_pro_mj,b_pin_pj)) &
+ *( 2._ki*inv_s(l1,l2,b_pin)*b(j,b_pin) &
+ - inv_s(j,l1,b_pin)*b(l2,b_pin) &
+ - inv_s(j,l2,b_pin)*b(l1,b_pin) &
+ - b(j,b_pin)*inv_s(l1,l2,b_pin_pj) )
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 - ( inv_s(j,l1,b_pin)*inv_s(k,l2,b_pin_pj) &
+ + inv_s(j,l2,b_pin)*inv_s(k,l1,b_pin_pj) ) &
+ *f3p_np2(s_mat_p,b_pro_mjk)/6._ki
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp3(:) = czero
+ temp3(2:3) = temp2
+ temp3(3) = temp3(3) + temp1
+ temp3 = temp3/4._ki
+ b54_b = temp3
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b54'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b54_b
+ !
+ !****f* src/form_factor/form_factor_5p/b54_s
+ ! NAME
+ !
+ ! Function b54_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b54_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,4}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b54_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b54_s
+ !
+ b54_s = b54_b(l1,l2,packb(set))
+ !
+ end function b54_s
+ !
+ !****f* src/form_factor/form_factor_5p/b55_b
+ ! NAME
+ !
+ ! Function b55_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b55_b(l1,l2.l3,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,5}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b55_b(l1,l2,l3,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in) :: b_pin
+ type(form_factor) :: b55_b
+ !
+ integer :: j
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib
+ integer :: b_pro_mj
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ temp1 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 + b(j,b_pin_glob)*f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,l1,l2,l3)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(:) = czero
+ temp2(2:3) = fb55(l1,l2,l3) + fb55(l1,l3,l2) + fb55(l3,l2,l1) &
+ + gb55(l1,l2,l3) + gb55(l2,l1,l3) + gb55(l3,l2,l1)
+ temp2(3) = temp2(3) + temp1
+ temp2 = temp2/5._ki
+ b55_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b55'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function b55_b
+ !
+ !****f* src/form_factor/form_factor_5p/b55_s
+ ! NAME
+ !
+ ! Function b55_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = b55_s(l1,l2.l3,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor B^{5,5}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function b55_s(l1,l2,l3,set)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: b55_s
+ !
+ b55_s = b55_b(l1,l2,l3,packb(set))
+ !
+ end function b55_s
+ !
+ !****if* src/form_factor/form_factor_5p/fb55
+ ! NAME
+ !
+ ! Function fb55
+ !
+ ! USAGE
+ !
+ ! real_dim6 = fb55(k1,k2,k3)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function b55
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in b55
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fb55(k1,k2,k3)
+ !
+ integer, intent(in) :: k1,k2,k3
+ complex(ki), dimension(2) :: fb55
+ !
+ integer :: j
+ complex(ki) :: temp1
+ integer :: ib
+ integer :: b_pro_mj
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 + inv_s(j,k3,b_pin_glob) &
+ *f4p_np2(s_mat_p,b_pro_mj,b_pin_pj,k1,k2) &
+ /4._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ fb55(:) = czero
+ fb55(2) = fb55(2) + temp1
+ !
+ end function fb55
+ !
+ !****if* src/form_factor/form_factor_5p/gb55
+ ! NAME
+ !
+ ! Function gb55
+ !
+ ! USAGE
+ !
+ ! real_dim6 = gb55(k1,k2,k3)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function b55
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in b55
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function gb55(k1,k2,k3)
+ !
+ integer, intent(in) :: k1,k2,k3
+ complex(ki), dimension(2) :: gb55
+ !
+ integer :: j,k
+ complex(ki), dimension(2) :: temp2
+ integer :: ib,ibj
+ integer :: b_pro_mj,b_pro_mjk
+ integer :: b_pin_pj
+ !
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp2 = temp2 + mult_div(-1._ki/2._ki,f4p_np4(s_mat_p,b_pro_mj,b_pin_pj,k1)) &
+ *( inv_s(j,k2,b_pin_glob)*b(k3,b_pin_glob) &
+ + inv_s(j,k3,b_pin_glob)*b(k2,b_pin_glob) &
+ - 2._ki*inv_s(k2,k3,b_pin_glob)*b(j,b_pin_glob) &
+ + b(j,b_pin_glob)*inv_s(k2,k3,b_pin_pj) ) &
+ - inv_s(j,k1,b_pin_glob)*inv_s(k2,k3,b_pin_pj) &
+ *f4p_np4(s_mat_p,b_pro_mj,b_pin_pj)/4._ki
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ !
+ temp2 = temp2 + ( inv_s(j,k3,b_pin_glob)*inv_s(k,k2,b_pin_pj) &
+ + inv_s(j,k2,b_pin_glob)*inv_s(k,k3,b_pin_pj) ) &
+ *f3p_np2(s_mat_p,b_pro_mjk,k1)/8._ki
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ gb55 = temp2
+ !
+ end function gb55
+ !
+ !****f* src/form_factor/form_factor_5p/c54_b
+ ! NAME
+ !
+ ! Function c54_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = c54_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor C^{5,4}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function c54_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: c54_b
+ !
+ integer :: j
+ complex(ki), dimension(2) :: temp2
+ complex(ki), dimension(3) :: temp3
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp2 = temp2 + mult_div(-2._ki/3._ki,f4p_np4(s_mat_p,b_pro_mj,b_pin_pj)) &
+ *b(j,b_pin)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp3(:) = czero
+ temp3(2:3) = temp2/4._ki
+ c54_b = temp3
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function c54'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function c54_b
+ !
+ !****f* src/form_factor/form_factor_5p/c54_s
+ ! NAME
+ !
+ ! Function c54_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = c54_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor C^{5,4}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function c54_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: c54_s
+ !
+ c54_s = c54_b(packb(set))
+ !
+ end function c54_s
+ !
+ !****f* src/form_factor/form_factor_5p/c55_b
+ ! NAME
+ !
+ ! Function c55_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = c55_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor C^{5,5}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function c55_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: c55_b
+ !
+ integer :: j
+ complex(ki), dimension(2) :: temp2
+ complex(ki), dimension(3) :: temp3
+ integer :: ib
+ integer :: b_pro,b_pro_mj
+ integer :: b_pin_pj
+ !
+ if (dim_s >= 5) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ temp2 = temp2 - mult_div(-1._ki/2._ki,f4p_np4(s_mat_p,b_pro_mj,b_pin_pj,l1)) &
+ *b(j,b_pin) - inv_s(j,l1,b_pin)*f4p_np4(s_mat_p,b_pro_mj,b_pin_pj)/4._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp3(:) = czero
+ temp3(2:3) = temp2/5._ki
+ c55_b = temp3
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function c55'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 5: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function c55_b
+ !
+ !****f* src/form_factor/form_factor_5p/c55_s
+ ! NAME
+ !
+ ! Function c55_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = c55_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor C^{5,5}.
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function c55_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: c55_s
+ !
+ c55_s = c55_b(l1,packb(set))
+ !
+ end function c55_s
+ !
+end module form_factor_5p
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_6p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_6p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/form_factor_6p.f90 (revision 119)
@@ -0,0 +1,1539 @@
+!
+!****h* src/form_factor/form_factor_6p
+! NAME
+!
+! Module form_factor_6p
+!
+! USAGE
+!
+! use form_factor_6p
+!
+! DESCRIPTION
+!
+! This module contains the different form factors for six point amplitudes.
+!
+! OUTPUT
+!
+! It exports seven functions:
+! * a60 -- a function to compute A^{6,0}
+! * a61 -- a function to compute A^{6,1}
+! * a62 -- a function to compute A^{6,2}
+! * a63 -- a function to compute A^{6,3}
+! * a64 -- a function to compute A^{6,4}
+! * a65 -- a function to compute A^{6,5}
+! * a66 -- a function to compute A^{6,6}
+!
+! Note that a6xx are generic functions which can be called either with a
+! set of integers or with an integer whose bits represents the set
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * generic_function_4p (src/integrals/four_point/generic_function_4p.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * form_factor_5p (src/form_factor/form_factor_5p.f90)
+! * array (src/module/array.f90)
+! * matrice_s (src/kinematic/matrice_s.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * form_factor_type (src/module/form_factor_type.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module form_factor_6p
+ !
+ use precision_golem
+ use generic_function_4p
+ use generic_function_3p
+ use form_factor_5p
+ use array
+ use matrice_s
+ use sortie_erreur
+ use form_factor_type
+ use constante, only: czero
+ !
+ implicit none
+ !
+ private
+ !
+ integer :: b_pin_glob,b_pro_glob
+ !
+ interface a60
+ !
+ module procedure a60_b, a60_s
+ !
+ end interface
+ !
+ interface a61
+ !
+ module procedure a61_b, a61_s
+ !
+ end interface
+ !
+ interface a62
+ !
+ module procedure a62_b, a62_s
+ !
+ end interface
+ !
+ interface a63
+ !
+ module procedure a63_b, a63_s
+ !
+ end interface
+ !
+ interface a64
+ !
+ module procedure a64_b, a64_s
+ !
+ end interface
+ !
+ interface a65
+ !
+ module procedure a65_b, a65_s
+ !
+ end interface
+ !
+ interface a66
+ !
+ module procedure a66_b, a66_s
+ !
+ end interface
+ !
+ !
+ public :: a60,a61,a62,a63,a64,a65,a66
+ !
+ !
+ contains
+ !
+ !
+ !****f* src/form_factor/form_factor_6p/a60_b
+ ! NAME
+ !
+ ! Function a60_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a60_b(b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,0}.
+ !
+ ! INPUTS
+ !
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a60_b(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a60_b
+ !
+ integer :: j,k,l
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj,ibjk
+ integer :: b_pro,b_pro_mj,b_pro_mjk,b_pro_mjkl
+ integer :: b_pin_pj,b_pin_pjk
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ b_pin_pjk = punion( b_pin_pj,ibset(0,k) )
+ temp1 = temp1 + b(j,b_pin)*b(k,b_pin_pj)*sumb(b_pin_pjk)*f4p_np2(s_mat_p,b_pro_mjk,b_pin_pjk)
+ !
+ ibjk = b_pro_mjk
+ l = 0
+ !
+ third_pinch: do while (ibjk /= 0)
+ !
+ if (modulo(ibjk,2) == 1) then
+ !
+ b_pro_mjkl = ibclr(b_pro_mjk,l)
+ temp2 = temp2 + b(j,b_pin)*b(k,b_pin_pj)*b(l,b_pin_pjk) &
+ *f3p(s_mat_p,b_pro_mjkl)
+ !
+ end if
+ !
+ l = l + 1
+ ibjk = ishft(ibjk,-1)
+ !
+ end do third_pinch
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a60_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a60'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a60_b
+ !
+ !****f* src/form_factor/form_factor_6p/a60_s
+ ! NAME
+ !
+ ! Function a60_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a60_s(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,0}.
+ !
+ ! INPUTS
+ !
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a60_s(set)
+ !
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a60_s
+ !
+ a60_s = a60_b(packb(set))
+ !
+ end function a60_s
+ !
+ !****f* src/form_factor/form_factor_5p/a61_b
+ ! NAME
+ !
+ ! Function a61_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a61_b(l1,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a61_b(l1,b_pin)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a61_b
+ !
+ integer :: j,k,l
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj,ibjk
+ integer :: b_pro,b_pro_mj,b_pro_mjk,b_pro_mjkl
+ integer :: b_pin_pj,b_pin_pjk
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ b_pin_pjk = punion( b_pin_pj,ibset(0,k) )
+ temp1 = temp1 - inv_s(j,l1,b_pin)*b(k,b_pin_pj)*sumb(b_pin_pjk) &
+ *f4p_np2(s_mat_p,b_pro_mjk,b_pin_pjk)
+ !
+ ibjk = b_pro_mjk
+ l = 0
+ !
+ third_pinch: do while (ibjk /= 0)
+ !
+ if (modulo(ibjk,2) == 1) then
+ !
+ b_pro_mjkl = ibclr(b_pro_mjk,l)
+ temp2 = temp2 - inv_s(j,l1,b_pin)*b(k,b_pin_pj)*b(l,b_pin_pjk) &
+ *f3p(s_mat_p,b_pro_mjkl)
+ !
+ end if
+ !
+ l = l + 1
+ ibjk = ishft(ibjk,-1)
+ !
+ end do third_pinch
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a61_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a61'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a61_b
+ !
+ !****f* src/form_factor/form_factor_5p/a61_s
+ ! NAME
+ !
+ ! Function a61_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a61_s(l1,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,1}(l_1).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a61_s(l1,set)
+ !
+ integer, intent (in) :: l1
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a61_s
+ !
+ a61_s = a61_b(l1,packb(set))
+ !
+ end function a61_s
+ !
+ !****f* src/form_factor/form_factor_5p/a62_b
+ ! NAME
+ !
+ ! Function a62_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a62_b(l1,l2,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a62_b(l1,l2,b_pin)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a62_b
+ !
+ integer :: j,k,l
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj,ibjk
+ integer :: b_pro,b_pro_mj,b_pro_mjk,b_pro_mjkl
+ integer :: b_pin_pj,b_pin_pjk
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro = pminus(b_ref,b_pin)
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ b_pin_pj = punion( b_pin,ibset(0,j) )
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ b_pin_pjk = punion( b_pin_pj,ibset(0,k) )
+ temp1 = temp1 + ( inv_s(j,l1,b_pin)*inv_s(k,l2,b_pin_pj) &
+ + inv_s(j,l2,b_pin)*inv_s(k,l1,b_pin_pj) ) &
+ *sumb(b_pin_pjk)*f4p_np2(s_mat_p,b_pro_mjk,b_pin_pjk)/2._ki
+ !
+ ibjk = b_pro_mjk
+ l = 0
+ !
+ third_pinch: do while (ibjk /= 0)
+ !
+ if (modulo(ibjk,2) == 1) then
+ !
+ b_pro_mjkl = ibclr(b_pro_mjk,l)
+ temp2 = temp2 + ( inv_s(j,l1,b_pin)*inv_s(k,l2,b_pin_pj) &
+ + inv_s(j,l2,b_pin)*inv_s(k,l1,b_pin_pj) ) &
+ *b(l,b_pin_pjk)*f3p(s_mat_p,b_pro_mjkl)/2._ki
+ !
+ end if
+ !
+ l = l + 1
+ ibjk = ishft(ibjk,-1)
+ !
+ end do third_pinch
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ temp2(3) = temp2(3) + temp1
+ a62_b = temp2
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a62'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a62_b
+ !
+ !****f* src/form_factor/form_factor_5p/a62_s
+ ! NAME
+ !
+ ! Function a62_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a62_s(l1,l2,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,2}(l1,l2).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a62_s(l1,l2,set)
+ !
+ integer, intent (in) :: l1,l2
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a62_s
+ !
+ a62_s = a62_b(l1,l2,packb(set))
+ !
+ end function a62_s
+ !
+ !****f* src/form_factor/form_factor_5p/a63_b
+ ! NAME
+ !
+ ! Function a63_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a63_b(l1,l2,l3,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a63_b(l1,l2,l3,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a63_b
+ !
+ complex(ki), dimension(3) :: t63
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ t63 = f63(l1,l2,l3) + f63(l1,l3,l2) + f63(l3,l2,l1)
+ a63_b = t63
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a63'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a63_b
+ !
+ !****f* src/form_factor/form_factor_5p/a63_s
+ ! NAME
+ !
+ ! Function a63_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a63_s(l1,l2,l3,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,3}(l1,l2,l3).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a63_s(l1,l2,l3,set)
+ !
+ integer, intent (in) :: l1,l2,l3
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a63_s
+ !
+ a63_s = a63_b(l1,l2,l3,packb(set))
+ !
+ end function a63_s
+ !
+ !****if* src/form_factor/form_factor_6p/f63
+ ! NAME
+ !
+ ! Function f63
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f63(k1,k2,k3)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a63
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pin_glob,b_pro_glob
+ ! defined in a63
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f63(k1,k2,k3)
+ !
+ integer, intent(in) :: k1,k2,k3
+ complex(ki), dimension(3) :: f63
+ !
+ integer :: j,k,l
+ complex(ki) :: temp1
+ complex(ki), dimension(3) :: temp2
+ integer :: ib,ibj,ibjk
+ integer :: b_pro_mj,b_pro_mjk,b_pro_mjkl
+ integer :: b_pin_pj,b_pin_pjk
+ !
+ temp1 = czero
+ temp2(:) = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro_glob,j)
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ ibj = b_pro_mj
+ k = 0
+ !
+ second_pinch: do while (ibj /= 0)
+ !
+ if (modulo(ibj,2) == 1) then
+ !
+ b_pro_mjk = ibclr(b_pro_mj,k)
+ b_pin_pjk = punion( b_pin_pj,ibset(0,k) )
+ temp1 = temp1 - inv_s(k1,k2,b_pin_glob)*inv_s(j,k3,b_pin_glob)*b(k,b_pin_pj) &
+ *f4p_np2(s_mat_p,b_pro_mjk,b_pin_pjk)/3._ki &
+ - inv_s(j,k3,b_pin_glob)*( inv_s(k,k1,b_pin_pj)*b(k2,b_pin_pj) &
+ + inv_s(k,k2,b_pin_pj)*b(k1,b_pin_pj) &
+ - 2._ki*inv_s(k1,k2,b_pin_pj)*b(k,b_pin_pj) &
+ + b(k,b_pin_pj)*inv_s(k1,k2,b_pin_pjk) ) &
+ *f4p_np2(s_mat_p,b_pro_mjk,b_pin_pjk)/3._ki
+ !
+ ibjk = b_pro_mjk
+ l = 0
+ !
+ third_pinch: do while (ibjk /= 0)
+ !
+ if (modulo(ibjk,2) == 1) then
+ !
+ b_pro_mjkl = ibclr(b_pro_mjk,l)
+ temp2 = temp2 - inv_s(j,k3,b_pin_glob)*( &
+ inv_s(k,k2,b_pin_pj)*inv_s(l,k1,b_pin_pjk) &
+ + inv_s(k,k1,b_pin_pj)*inv_s(l,k2,b_pin_pjk) ) &
+ *f3p(s_mat_p,b_pro_mjkl)/6._ki
+ !
+ end if
+ !
+ l = l + 1
+ ibjk = ishft(ibjk,-1)
+ !
+ end do third_pinch
+ !
+ end if
+ !
+ k = k+1
+ ibj = ishft(ibj,-1)
+ !
+ end do second_pinch
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f63 = temp2
+ f63(3) = f63(3) + temp1
+ !
+ end function f63
+ !
+ !****f* src/form_factor/form_factor_6p/a64_b
+ ! NAME
+ !
+ ! Function a64_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a64_b(l1,l2,l3,l4,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,4}(l1,l2,l3,l4).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a64_b(l1,l2,l3,l4,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3,l4
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a64_b
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ a64_b= - ( f64(l1,l2,l3,l4) + f64(l2,l1,l3,l4) + f64(l3,l2,l1,l4) &
+ + f64(l4,l2,l3,l1) )/4._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a64'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a64_b
+ !
+ !****f* src/form_factor/form_factor_6p/a64_s
+ ! NAME
+ !
+ ! Function a64_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a64_s(l1,l2,l3,l4,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,4}(l1,l2,l3,l4).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a64_s(l1,l2,l3,l4,set)
+ !
+ integer, intent (in) :: l1,l2,l3,l4
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a64_s
+ !
+ a64_s = a64_b(l1,l2,l3,l4,packb(set))
+ !
+ end function a64_s
+ !
+ !****if* src/form_factor/form_factor_6p/f64
+ ! NAME
+ !
+ ! Function f64
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f64(k1,k2,k3,k4)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a64
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pro_glob, b_pin_glob
+ ! defined in a64
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f64(k1,k2,k3,k4)
+ !
+ integer, intent(in) :: k1,k2,k3,k4
+ type(form_factor) :: f64
+ !
+ integer :: j
+ type(form_factor) :: temp1,temp2
+ integer :: ib
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ temp2 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 - 2._ki*inv_s(j,k1,b_pin_glob)*( inv_s(k2,k3,b_pin_glob)*b53(k4,b_pin_pj) &
+ + inv_s(k2,k4,b_pin_glob)*b53(k3,b_pin_pj) &
+ + inv_s(k3,k4,b_pin_glob)*b53(k2,b_pin_pj) )
+ temp2 = temp2 + inv_s(j,k1,b_pin_glob)*a53(k2,k3,k4,b_pin_pj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f64 = temp1 + temp2
+ !
+ end function f64
+ !
+ !****f* src/form_factor/form_factor_6p/a65_b
+ ! NAME
+ !
+ ! Function a65_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a65_b(l1,l2,l3,l4,l5,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,5}(l1,l2,l3,l4,l5).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l5 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables b_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a65_b(l1,l2,l3,l4,l5,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3,l4,l5
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a65_b
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ a65_b = - ( f65(l1,l2,l3,l4,l5) + f65(l2,l1,l3,l4,l5) + f65(l3,l2,l1,l4,l5) &
+ + f65(l4,l2,l3,l1,l5) + f65(l5,l2,l3,l4,l1) )/5._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a65'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a65_b
+ !
+ !****f* src/form_factor/form_factor_6p/a65_s
+ ! NAME
+ !
+ ! Function a65_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a65_s(l1,l2,l3,l4,l5,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,5}(l1,l2,l3,l4,l5).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l5 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a65_s(l1,l2,l3,l4,l5,set)
+ !
+ integer, intent (in) :: l1,l2,l3,l4,l5
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a65_s
+ !
+ a65_s = a65_b(l1,l2,l3,l4,l5,packb(set))
+ !
+ end function a65_s
+ !
+ !****if* src/form_factor/form_factor_6p/f65
+ ! NAME
+ !
+ ! Function f65
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f65(k1,k2,k3,k4,k5)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a65
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ ! * k5 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pro_glob,b_pin_glob
+ ! defined in a65
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f65(k1,k2,k3,k4,k5)
+ !
+ integer, intent(in) :: k1,k2,k3,k4,k5
+ type(form_factor) :: f65
+ !
+ integer :: j
+ type(form_factor) :: temp1,temp2
+ integer :: ib
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ temp2 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 + inv_s(j,k1,b_pin_glob)*( &
+ -2._ki*inv_s(k2,k3,b_pin_glob)*b54(k4,k5,b_pin_pj) &
+ -2._ki*inv_s(k2,k4,b_pin_glob)*b54(k3,k5,b_pin_pj) &
+ -2._ki*inv_s(k2,k5,b_pin_glob)*b54(k3,k4,b_pin_pj) &
+ -2._ki*inv_s(k3,k4,b_pin_glob)*b54(k2,k5,b_pin_pj) &
+ -2._ki*inv_s(k3,k5,b_pin_glob)*b54(k2,k4,b_pin_pj) &
+ -2._ki*inv_s(k4,k5,b_pin_glob)*b54(k2,k3,b_pin_pj) )
+ temp1 = temp1 + inv_s(j,k1,b_pin_glob)*( &
+ +4._ki*inv_s(k2,k3,b_pin_glob)*inv_s(k4,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k4,b_pin_glob)*inv_s(k3,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k5,b_pin_glob)*inv_s(k3,k4,b_pin_glob) ) &
+ *c54(b_pin_pj)
+ temp2 = temp2 + inv_s(j,k1,b_pin_glob)*a54(k2,k3,k4,k5,b_pin_pj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f65 = temp1 + temp2
+ !
+ end function f65
+ !
+ !****f* src/form_factor/form_factor_6p/a66_b
+ ! NAME
+ !
+ ! Function a66_b
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a66_b(l1,l2,l3,l4,l5,l6,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,6}(l1,l2,l3,l4,l5,l6).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l5 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l6 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ ! to the label of the propagators pinched (removed from the original set
+ ! which is in the global variable b_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of the global variables set_ref
+ ! and s_mat_p
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a66_b(l1,l2,l3,l4,l5,l6,b_pin)
+ !
+ integer, intent (in) :: l1,l2,l3,l4,l5,l6
+ integer, intent (in) :: b_pin
+ type(form_factor) :: a66_b
+ !
+ if (dim_s >= 6) then
+ !
+ b_pro_glob = pminus(b_ref,b_pin)
+ b_pin_glob = b_pin
+ !
+ a66_b = - ( f66(l1,l2,l3,l4,l5,l6) + f66(l2,l1,l3,l4,l5,l6) &
+ + f66(l3,l2,l1,l4,l5,l6) + f66(l4,l2,l3,l1,l5,l6) &
+ + f66(l5,l2,l3,l4,l1,l6) + f66(l6,l2,l3,l4,l5,l1) )/6._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a66'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of dim_s is less than 6: %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a66_b
+ !
+ !****f* src/form_factor/form_factor_6p/a66_s
+ ! NAME
+ !
+ ! Function a66_s
+ !
+ ! USAGE
+ !
+ ! type(form_factor) = a66_s(l1,l2,l3,l4,l5,l6,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function defines the form factor A^{6,6}(l1,l2,l3,l4,l5,l6).
+ !
+ ! INPUTS
+ !
+ ! * l1 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l2 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l3 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l4 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l5 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * l6 -- an integer corresponding to a label in the set of the three
+ ! remaining propagators
+ ! * set -- an array of integers of rank 1 corresponding to the label
+ ! of the propagators pinched (removed from the original set
+ ! which is in the global variable set_ref)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! The result returned is of the type form_factor
+ ! It returns an array of three complex (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function a66_s(l1,l2,l3,l4,l5,l6,set)
+ !
+ integer, intent (in) :: l1,l2,l3,l4,l5,l6
+ integer, intent (in), dimension(:) :: set
+ type(form_factor) :: a66_s
+ !
+ a66_s = a66_b(l1,l2,l3,l4,l5,l6,packb(set))
+ !
+ end function a66_s
+ !
+ !****if* src/form_factor/form_factor_6p/f66
+ ! NAME
+ !
+ ! Function f66
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f66(k1,k2,k3,k4,k5,k6)
+ !
+ ! DESCRIPTION
+ !
+ ! A function to simplify the writting of the function a66
+ !
+ ! INPUTS
+ !
+ ! * k1 -- an integer
+ ! * k2 -- an integer
+ ! * k3 -- an integer
+ ! * k4 -- an integer
+ ! * k5 -- an integer
+ ! * k6 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global (to this module) variable b_pro_glob,b_pin_glob
+ ! defined in a66
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an array of six reals (type ki) corresponding
+ ! to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ ! the real part, imaginary part of the 1/epsilon term and the real part,
+ ! imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f66(k1,k2,k3,k4,k5,k6)
+ !
+ integer, intent(in) :: k1,k2,k3,k4,k5,k6
+ type(form_factor) :: f66
+ !
+ integer :: j
+ type(form_factor) :: temp1,temp2
+ integer :: ib
+ integer :: b_pin_pj
+ !
+ temp1 = czero
+ temp2 = czero
+ !
+ ib = b_pro_glob
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pin_pj = punion( b_pin_glob,ibset(0,j) )
+ !
+ temp1 = temp1 + inv_s(j,k1,b_pin_glob)*( &
+ -2._ki*inv_s(k2,k3,b_pin_glob)*b55(k4,k5,k6,b_pin_pj) &
+ -2._ki*inv_s(k2,k4,b_pin_glob)*b55(k3,k5,k6,b_pin_pj) &
+ -2._ki*inv_s(k2,k5,b_pin_glob)*b55(k3,k4,k6,b_pin_pj) &
+ -2._ki*inv_s(k2,k6,b_pin_glob)*b55(k3,k4,k5,b_pin_pj) &
+ -2._ki*inv_s(k3,k4,b_pin_glob)*b55(k2,k5,k6,b_pin_pj) &
+ -2._ki*inv_s(k3,k5,b_pin_glob)*b55(k2,k4,k6,b_pin_pj) &
+ -2._ki*inv_s(k3,k6,b_pin_glob)*b55(k2,k4,k5,b_pin_pj) &
+ -2._ki*inv_s(k4,k5,b_pin_glob)*b55(k2,k3,k6,b_pin_pj) &
+ -2._ki*inv_s(k4,k6,b_pin_glob)*b55(k2,k3,k5,b_pin_pj) &
+ -2._ki*inv_s(k5,k6,b_pin_glob)*b55(k2,k3,k4,b_pin_pj) )
+ !
+ temp1 = temp1 + inv_s(j,k1,b_pin_glob)*( &
+ ( 4._ki*inv_s(k2,k3,b_pin_glob)*inv_s(k4,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k4,b_pin_glob)*inv_s(k3,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k5,b_pin_glob)*inv_s(k3,k4,b_pin_glob) ) &
+ *c55(k6,b_pin_pj) &
+ + ( 4._ki*inv_s(k2,k3,b_pin_glob)*inv_s(k4,k6,b_pin_glob) &
+ +4._ki*inv_s(k2,k4,b_pin_glob)*inv_s(k3,k6,b_pin_glob) &
+ +4._ki*inv_s(k2,k6,b_pin_glob)*inv_s(k3,k4,b_pin_glob) ) &
+ *c55(k5,b_pin_pj) &
+ + ( 4._ki*inv_s(k2,k3,b_pin_glob)*inv_s(k5,k6,b_pin_glob) &
+ +4._ki*inv_s(k2,k6,b_pin_glob)*inv_s(k3,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k5,b_pin_glob)*inv_s(k3,k6,b_pin_glob) ) &
+ *c55(k4,b_pin_pj) &
+ + ( 4._ki*inv_s(k2,k6,b_pin_glob)*inv_s(k4,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k4,b_pin_glob)*inv_s(k6,k5,b_pin_glob) &
+ +4._ki*inv_s(k2,k5,b_pin_glob)*inv_s(k6,k4,b_pin_glob) ) &
+ *c55(k3,b_pin_pj) &
+ + ( 4._ki*inv_s(k6,k3,b_pin_glob)*inv_s(k4,k5,b_pin_glob) &
+ +4._ki*inv_s(k6,k4,b_pin_glob)*inv_s(k3,k5,b_pin_glob) &
+ +4._ki*inv_s(k6,k5,b_pin_glob)*inv_s(k3,k4,b_pin_glob) ) &
+ *c55(k2,b_pin_pj) )
+ !
+ temp2 = temp2 + inv_s(j,k1,b_pin_glob)*a55(k2,k3,k4,k5,k6,b_pin_pj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ f66 = temp1 + temp2
+ !
+ end function f66
+ !
+end module form_factor_6p
Index: 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/form_factor/Makefile.dep (revision 119)
@@ -0,0 +1,4 @@
+# Module dependencies
+form_factor_6p.o: form_factor_5p.o
+form_factor_6p.lo: form_factor_5p.lo
+form_factor_6p.obj: form_factor_5p.obj
Index: 95/branches/golem95_without_olo_cmake/src/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/Makefile.in (revision 119)
@@ -0,0 +1,571 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = module kinematic numerical integrals form_factor interface
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/kinematic/inverse_matrice.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/kinematic/inverse_matrice.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/kinematic/inverse_matrice.f90 (revision 119)
@@ -0,0 +1,1564 @@
+!
+!****h* src/kinematic/inverse_matrice
+! NAME
+!
+! Module inverse_matrice
+!
+! USAGE
+!
+! use inverse_matrice
+!
+! DESCRIPTION
+!
+! This module provides some routines and tools to inverse a n x n matrix.
+!
+! OUTPUT
+!
+! This module exports two routines:
+! * inverse -- to inverse a nXn matrix
+! * imprime_mat -- to print a nXn matrix
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * equal (src/module/equal.f90)
+! * s_matrix_type (src/module/s_matrix_type.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module inverse_matrice
+ use precision_golem
+ use equal
+ use s_matrix_type
+ use parametre, only : accuracy_par
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use constante, only:czero
+ implicit none
+ !
+ private
+ !
+ interface imprime_mat
+ !
+ module procedure imprime_mat_r, imprime_mat_c
+ module procedure imprime_mat_p
+ !
+ end interface
+ !
+ interface inverse
+ !
+ module procedure inverse_r, inverse_c
+ module procedure inverse_pr, inverse_pc
+ !
+ end interface
+ !
+ interface inverse_rescue
+ !
+ module procedure inverse_rescue_r, inverse_rescue_c
+ !
+ end interface
+ !
+ interface inverse_true
+ !
+ module procedure inverse_true_r, inverse_true_c
+ !
+ end interface
+ !
+ interface lu_decomp
+ !
+ module procedure lu_decomp_r, lu_decomp_c
+ !
+ end interface
+ !
+ interface inverse_triangular
+ !
+ module procedure inverse_triangular_r, inverse_triangular_c
+ !
+ end interface
+ !
+ interface inverse_greville
+ !
+ module procedure inverse_greville_r, inverse_greville_c
+ !
+ end interface
+ !
+ interface compt
+ !
+ module procedure compt_r, compt_c
+ !
+ end interface
+ !
+ interface verif
+ !
+ module procedure verif_r, verif_c
+ !
+ end interface
+ !
+
+ public :: inverse, imprime_mat
+ real(ki) :: glob_eps = 1.e-12_ki ! valeur en de ca duquelle on
+ ! passe au cas singulier
+ contains
+ !
+ !****f* src/kinematic/inverse_matrice/inverse
+ ! NAME
+ !
+ ! Subroutine inverse
+ !
+ ! USAGE
+ !
+ ! call inverse(mat,inv_mat,error,pinch1,pinch2)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine first tries the Gauss method with partial pivoting strategy.
+ ! If the error returned is too large (greater than the global variable accuracy_par),
+ ! then it switches to another method : the Greville method.
+ ! In the case of the Gauss method, if some reduced matrices need to be inverted, a new matrix is built
+ ! by removing the row(s) and column(s) pinch1,pinch2, then the inverse is computed and the result returned
+ ! is a nXn matrix where the column(s) and row(s) pinch1, pinch2 are filled by 0, the other elements
+ ! are those of the inverse computed. In the Greville method, the reduce matrix which is a nXn matrix
+ ! where the column(s) and row(s) pinch1, pinch2 are filled by 0 is directly inverted.
+ ! Note that the error is computed in the following way:
+ ! first the matrix is rescaled : i. e. divided by the greatest (in absolute value) element
+ ! then the inverse is computed and the two matrices abs(1 - A^(-1) A) and abs(1 - A A^(-1)) are computed
+ ! the error is the greatest element of these two matrices.
+ ! In the case of the Greville method, the Moore_Penrose conditions are also tested
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real/complex (type ki) array of rank 2, or an s_matrix_poly type.
+ ! * pinch1 -- an integer (optional), specified a pinch
+ ! * pinch2 -- an integer (optional), specified a pinch
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * inv_mat -- a real (type ki) array of rank 2, same shape, the inverse
+ ! of the matrix mat
+ ! * error -- a real (type ki), the estimation of the error of the numerical inversion
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine inverse_pr(mat_p,inv_mat_r,error,pinch1,pinch2)
+ type(s_matrix_poly), intent(in) :: mat_p
+ real(ki), intent(out), dimension(size(mat_p%pt_real,1),size(mat_p%pt_real,1)) :: inv_mat_r
+ real(ki), intent(out) :: error
+ integer, optional :: pinch1, pinch2
+ !
+ if (associated(mat_p%pt_real)) then
+ call inverse_r(mat_p%pt_real,inv_mat_r,error, pinch1=pinch1, pinch2=pinch2)
+ end if
+ !
+ end subroutine inverse_pr
+ !
+ subroutine inverse_pc(mat_p,inv_mat_c,error,pinch1,pinch2)
+ type(s_matrix_poly), intent(in) :: mat_p
+ complex(ki), intent(out), dimension(size(mat_p%pt_cmplx,1),size(mat_p%pt_cmplx,1)) :: inv_mat_c
+ real(ki), intent(out) :: error
+ integer, optional :: pinch1, pinch2
+ !
+ if (associated(mat_p%pt_cmplx)) then
+ call inverse_c(mat_p%pt_cmplx,inv_mat_c,error,pinch1=pinch1,pinch2=pinch2)
+ end if
+ !
+ end subroutine inverse_pc
+ !
+ subroutine inverse_r(mat_r,inv_mat_r,error,pinch1,pinch2)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat_r
+ real(ki), intent(out), dimension(size(mat_r,1),size(mat_r,1)) :: inv_mat_r
+ real(ki), intent(out) :: error
+ integer, optional :: pinch1,pinch2
+ !
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: norm_mat_r, mat_greville
+ real(ki) :: plus_grand,g_error,o_error
+ integer :: pin1,pin2
+ !
+ pin1 = -1
+ pin2 = -1
+ !
+ if (present(pinch1)) pin1 = pinch1
+ if (present(pinch2)) pin2 = pinch2
+ !
+ g_error = 1._ki
+ o_error = 1._ki
+ !
+ !
+ ! First we rescale the matrix
+ !
+ plus_grand = maxval(array=abs(mat_r))
+ norm_mat_r = mat_r/plus_grand
+ !
+ ! We first use the Gauss method
+ !
+ call inverse_rescue(norm_mat_r,inv_mat_r,o_error,pin1,pin2)
+ !
+ if (o_error >= accuracy_par) then
+ !
+ call inverse_greville(norm_mat_r,mat_greville,g_error)
+ !
+ if (g_error .lt. o_error) then
+ inv_mat_r = mat_greville
+ end if
+ !
+ end if
+ !
+ error = min(g_error,o_error)
+ !
+ if (error >= accuracy_par) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'the Greville method failed'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the Gauss method failed too'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'the error returned %f0'
+ tab_erreur_par(3)%arg_real = error
+ call catch_exception(1)
+ !
+ end if
+ !
+ inv_mat_r = inv_mat_r/plus_grand
+ !
+ end subroutine inverse_r
+ !
+ subroutine inverse_c(mat_c,inv_mat_c,error,pinch1,pinch2)
+ !
+ complex(ki), intent(in), dimension(:,:) :: mat_c
+ complex(ki), intent(out), dimension(size(mat_c,1),size(mat_c,1)) :: inv_mat_c
+ real(ki), intent(out) :: error
+ integer, optional :: pinch1,pinch2
+ !
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: norm_mat_c, mat_greville_c
+ real(ki) :: plus_grand,g_error,o_error
+ integer :: pin1,pin2
+ !
+ pin1 = -1
+ pin2 = -1
+ !
+ if (present(pinch1)) pin1 = pinch1
+ if (present(pinch2)) pin2 = pinch2
+ !
+ g_error = 1._ki
+ o_error = 1._ki
+ !
+ !
+ ! First we rescale the matrix
+ !
+ plus_grand = max(maxval( array=abs( real(mat_c,ki) ) ), maxval( array=abs( aimag(mat_c) ) ) )
+ norm_mat_c = mat_c/cmplx(plus_grand,0._ki,ki)
+ !
+ ! We first use the Gauss method
+ !
+ call inverse_rescue(norm_mat_c,inv_mat_c,o_error,pin1,pin2)
+ !
+ if (o_error >= accuracy_par) then
+ !
+ call inverse_greville(norm_mat_c,mat_greville_c,g_error)
+ !
+ if (g_error .lt. o_error) then
+ inv_mat_c = mat_greville_c
+ end if
+ end if
+ !
+ error = min(g_error,o_error)
+ !
+ if (error >= accuracy_par) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'the Greville method failed'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the Gauss method failed too'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'the error returned %f0'
+ tab_erreur_par(3)%arg_real = error
+ call catch_exception(1)
+ !
+ end if
+ !
+ inv_mat_c = inv_mat_c/plus_grand
+ !
+ end subroutine inverse_c
+ !****if* src/kinematic/inverse_matrice/inverse_rescue
+ ! NAME
+ !
+ ! Subroutine inverse_rescue
+ !
+ ! USAGE
+ !
+ ! call inverse_rescue(mat,inv_mat,error,pinch1,pinch2)
+ !
+ ! DESCRIPTION
+ !
+ ! The role of this routine is just to reduce the size the input
+ ! matrix mat if pinch1 and/or pinch2 is/are present
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real/complex (type ki) array of rank 2
+ ! * pinch1 -- an integer (optional), specified a pinch
+ ! * pinch2 -- an integer (optional), specified a pinch
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * inv_mat -- a real/compelx (type ki) array of rank 2, same shape, the inverse
+ ! of the matrix mat
+ ! * error -- a real (type ki), the estimation of the error of the numerical inversion
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine inverse_rescue_r(mat_r,inv_mat_r,error,pin1,pin2)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat_r
+ real(ki), intent(out), dimension(size(mat_r,1),size(mat_r,1)) :: inv_mat_r
+ real(ki), intent(out) :: error
+ integer, intent(in) :: pin1,pin2
+ !
+ integer :: i,n_dim
+ logical, dimension(size(mat_r,1),size(mat_r,1)) :: masque
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: f2
+ real(ki), dimension(:,:), allocatable :: true_mat_r,true_inv_mat_r
+ real(ki), dimension(:), allocatable :: true_vect_r
+ integer, dimension(2) :: tab_pinch
+ integer :: nb_pinch
+ !
+ tab_pinch = (/pin1,pin2/)
+ nb_pinch = count(mask=tab_pinch /= -1)
+ masque = .true.
+ !
+ n_dim = size(mat_r,1)-nb_pinch
+ !
+ allocate(true_mat_r(n_dim,n_dim))
+ allocate(true_inv_mat_r(n_dim,n_dim))
+ allocate(true_vect_r(n_dim*n_dim))
+ !
+ select case (nb_pinch)
+ !
+ case(0)
+ !
+ true_mat_r = mat_r
+ !
+ case(1)
+ !
+ i = maxval(tab_pinch)
+ masque(i,:) = .false.
+ masque(:,i) = .false.
+ true_vect_r = pack(mat_r,mask=masque)
+ true_mat_r = reshape(source=true_vect_r,shape=(/n_dim,n_dim/))
+ !
+ case(2)
+ !
+ masque(pin1,:) = .false.
+ masque(:,pin1) = .false.
+ masque(pin2,:) = .false.
+ masque(:,pin2) = .false.
+ true_vect_r = pack(mat_r,mask=masque)
+ true_mat_r = reshape(source=true_vect_r,shape=(/n_dim,n_dim/))
+ !
+ case default
+ !
+ !
+ end select
+ !
+ call inverse_true(true_mat_r,true_inv_mat_r,error)
+ !
+ f2(:,:) = 0._ki
+ true_vect_r = pack(true_inv_mat_r,.true.)
+ inv_mat_r = unpack(true_vect_r,masque,f2)
+ !
+ deallocate(true_mat_r)
+ deallocate(true_inv_mat_r)
+ deallocate(true_vect_r)
+ !
+ end subroutine inverse_rescue_r
+ !
+ subroutine inverse_rescue_c(mat_c,inv_mat_c,error,pin1,pin2)
+ !
+ complex(ki), intent(in), dimension(:,:) :: mat_c
+ complex(ki), intent(out), dimension(size(mat_c,1),size(mat_c,1)) :: inv_mat_c
+ real(ki), intent(out) :: error
+ integer, intent(in) :: pin1,pin2
+ !
+ integer :: i,n_dim
+ logical, dimension(size(mat_c,1),size(mat_c,1)) :: masque
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: f2
+ complex(ki), dimension(:,:), allocatable :: true_mat_c,true_inv_mat_c
+ complex(ki), dimension(:), allocatable :: true_vect_c
+ integer, dimension(2) :: tab_pinch
+ integer :: nb_pinch
+ !
+ tab_pinch = (/pin1,pin2/)
+ nb_pinch = count(mask=tab_pinch /= -1)
+ masque = .true.
+ !
+ n_dim = size(mat_c,1)-nb_pinch
+ !
+ allocate(true_mat_c(n_dim,n_dim))
+ allocate(true_inv_mat_c(n_dim,n_dim))
+ allocate(true_vect_c(n_dim*n_dim))
+ !
+ select case (nb_pinch)
+ !
+ case(0)
+ !
+ true_mat_c = mat_c
+ !
+ case(1)
+ !
+ i = maxval(tab_pinch)
+ masque(i,:) = .false.
+ masque(:,i) = .false.
+ true_vect_c = pack(mat_c,mask=masque)
+ true_mat_c = reshape(source=true_vect_c,shape=(/n_dim,n_dim/))
+ !
+ case(2)
+ !
+ masque(pin1,:) = .false.
+ masque(:,pin1) = .false.
+ masque(pin2,:) = .false.
+ masque(:,pin2) = .false.
+ true_vect_c = pack(mat_c,mask=masque)
+ true_mat_c = reshape(source=true_vect_c,shape=(/n_dim,n_dim/))
+ !
+ case default
+ !
+ !
+ end select
+ !
+ call inverse_true(true_mat_c,true_inv_mat_c,error)
+ !
+ f2(:,:) = czero
+ true_vect_c = pack(true_inv_mat_c,.true.)
+ inv_mat_c = unpack(true_vect_c,masque,f2)
+ !
+ deallocate(true_mat_c)
+ deallocate(true_inv_mat_c)
+ deallocate(true_vect_c)
+ !
+ end subroutine inverse_rescue_c
+ !
+ !****if* src/kinematic/inverse_matrice/inverse_true
+ ! NAME
+ !
+ ! Subroutine inverse_true
+ !
+ ! USAGE
+ !
+ ! call inverse_true(mat,inv_mat,error)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine uses a Gauss pivot method with partial pivoting to inverse M a nXn matrix.
+ ! It returns an estimation of the error by computing the two matrices abs(1 - M^(-1) M)
+ ! and abs(1 - M M^(-1)). The error is the greatest element of these two matrices.
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real/complex (type ki) array of rank 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * inv_mat -- a real/complex (type ki) array of rank 2, same shape, the inverse
+ ! of the matrix mat
+ ! * error -- a real (type ki), the estimation of the error of the numerical inversion
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine inverse_true_r(mat_r,inv_mat_r,error)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat_r
+ real(ki), intent(out), dimension(size(mat_r,1),size(mat_r,1)) :: inv_mat_r
+ real(ki), intent(out) :: error
+ !
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: mat1,mat2,unit_mat
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: p_mat,l_mat,u_mat
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: inv_l_mat,inv_u_mat
+ integer :: i,n_dim
+ real(ki) :: max1,max2
+ !integer :: errorflag
+ !
+ n_dim = size(mat_r,1) ! dimension de la matrice
+ unit_mat(:,:) = 0._ki
+ !
+ do i=1,n_dim
+ !
+ unit_mat(i,i) = 1._ki
+ !
+ end do
+ !
+ call lu_decomp(mat_r,p_mat,l_mat,u_mat)
+ call inverse_triangular(l_mat,'inf',inv_l_mat)
+ call inverse_triangular(u_mat,'sup',inv_u_mat)
+ inv_mat_r = matmul(inv_u_mat,inv_l_mat)
+ inv_mat_r = matmul(inv_mat_r,transpose(p_mat))
+ !
+ mat1 = matmul(inv_mat_r,mat_r)
+ mat2 = matmul(mat_r,inv_mat_r)
+ mat1 = abs(mat1-unit_mat)
+ mat2 = abs(mat2-unit_mat)
+ !
+ max1 = maxval(mat1)
+ max2 = maxval(mat2)
+ !
+ error = max(max1,max2)
+ !
+ end subroutine inverse_true_r
+ !
+ subroutine inverse_true_c(mat_c,inv_mat_c,error)
+ !
+ complex(ki), intent(in), dimension(:,:) :: mat_c
+ complex(ki), intent(out), dimension(size(mat_c,1),size(mat_c,1)) :: inv_mat_c
+ real(ki), intent(out) :: error
+ !
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: mat1c,mat2c,unit_mat
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: p_mat,l_mat,u_mat
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: inv_l_mat,inv_u_mat
+ real(ki), dimension(size(mat_c,1),size(mat_c,1)) :: mat1, mat2
+ integer :: i,n_dim
+ real(ki) :: max1,max2
+ !integer :: errorflag
+ !
+ n_dim = size(mat_c,1) ! dimension de la matrice
+ unit_mat(:,:) = czero
+ !
+ do i=1,n_dim
+ !
+ unit_mat(i,i) = cmplx(1._ki,0._ki,ki)
+ !
+ end do
+ !
+ call lu_decomp(mat_c,p_mat,l_mat,u_mat)
+ call inverse_triangular(l_mat,'inf',inv_l_mat)
+ call inverse_triangular(u_mat,'sup',inv_u_mat)
+ inv_mat_c = matmul(inv_u_mat,inv_l_mat)
+ inv_mat_c = matmul(inv_mat_c,transpose(p_mat))
+ !
+ mat1c = matmul(inv_mat_c,mat_c)
+ mat2c = matmul(mat_c,inv_mat_c)
+ mat1 = abs(mat1c-unit_mat)
+ mat2 = abs(mat2c-unit_mat)
+ !
+ max1 = maxval(mat1)
+ max2 = maxval(mat2)
+ !
+ error = max(max1,max2)
+ !
+ end subroutine inverse_true_c
+ !
+ !****if* src/kinematic/inverse_matrice/inverse_greville
+ ! NAME
+ !
+ ! Subroutine inverse_greville
+ !
+ ! USAGE
+ !
+ ! call inverse_greville(mat,inv_mat,error)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine inverses a n x n matrix using the Greville method.
+ ! This method enables to invert singular matrix using the Moore-Penrose definition.
+ ! One builds an iterative process, a rectengular matrix A is defined with the
+ ! first row of the n x n matrix, the the other rows are added step by step
+ ! At each step, the pseudo inverse (Moore-Penrose) A' is built such that
+ ! A A' = transpose(A A')
+ ! A' A = transpose(A' A)
+ ! A' A A' = A'
+ ! A A' A = A
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real/complex (type ki) array of rank 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * inv_mat -- a real/complex (type ki) array of rank 2, same shape, the inverse
+ ! of the matrix mat
+ ! * error -- a real (type ki), the estimation of the error of the numerical inversion
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ ! On construit un processus iteratif : on definit une matrice A qui au
+ ! debut est construit en partant de la premiere colonne
+ ! puis en ajoutant les colonnes une a une.
+ ! Pour chaque etape, on construit le pseudo inverse
+ ! (au sens de Moore-Penrose) A' tel que :
+ ! A A' = transpose(A A')
+ ! A' A = transpose(A' A)
+ ! A' A A' = A'
+ ! A A' A = A
+ ! cette routine retourne une estimation de l'erreur
+ !
+ subroutine inverse_greville_r(mat_r,inv_mat_r,error)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat_r
+ real(ki), intent(out), dimension(size(mat_r,1),size(mat_r,1)) :: inv_mat_r
+ real(ki), intent(out) :: error
+ !
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: id_mat, mat1, mat2
+ real(ki), dimension(size(mat_r,1),1) :: a
+ real(ki), dimension(1,size(mat_r,1)) :: at
+ real(ki), dimension(:,:), allocatable :: ga,ga_prime
+ real(ki), dimension(:,:), allocatable :: gab,gab_prime
+ integer :: k,n_dim
+ integer :: res
+ real(ki) :: denom, max1, max2
+ !
+ n_dim = size(mat_r,1) ! dimension de la matrice
+ !
+ !
+ id_mat = 0._ki
+ do k=1,n_dim
+ id_mat(k,k) = 1._ki
+ end do
+ !
+ ! premiere iteration
+ !
+ allocate(ga(n_dim,1),stat=res)
+ allocate(ga_prime(1,n_dim),stat=res)
+ !
+ a(:,1) = mat_r(:,1) ! premiere colonne de mat
+ ga = a ! A est la 1ere colonne de mat
+ at = transpose(a)
+ denom = sum(matmul(at,a)) ! on utilise sum pour rendre scalaire
+ ! matmul, sinon tableau (1,1)
+ if (sqrt(denom) >= glob_eps) then
+ !
+ ga_prime = at/denom ! cas standard A' pseudo-inverse de A
+ !
+ else
+ !
+ ga_prime(:,:) = 0._ki ! si mat est singuliere
+ !
+ end if
+ !
+ ! autres iterations
+ !
+ do k=2,n_dim
+ !
+ allocate(gab(n_dim,k),stat=res)
+ allocate(gab_prime(k,n_dim),stat=res)
+ !
+ a(:,1) = mat_r(:,k)
+ call compt(n_dim,k-1,a,ga,ga_prime,gab,gab_prime)
+! call verif(n_dim,k,gab,gab_prime,error)
+ !
+ deallocate(ga,stat=res)
+ deallocate(ga_prime,stat=res)
+ !
+ allocate(ga(n_dim,k),stat=res)
+ allocate(ga_prime(k,n_dim),stat=res)
+ !
+ ga = gab
+ ga_prime = gab_prime
+ !
+ deallocate(gab,stat=res)
+ deallocate(gab_prime,stat=res)
+ !
+ end do
+ !
+ inv_mat_r = ga_prime
+ !
+ mat1 = matmul(inv_mat_r,mat_r)
+ mat2 = matmul(mat_r,inv_mat_r)
+ mat1 = abs(mat1-id_mat)
+ mat2 = abs(mat2-id_mat)
+ !
+ max1 = maxval(mat1)
+ max2 = maxval(mat2)
+ !
+ error = max(max1,max2)
+ !
+ end subroutine inverse_greville_r
+ !
+ subroutine inverse_greville_c(mat_c,inv_mat_c,error)
+ !
+ complex(ki), intent(in), dimension(:,:) :: mat_c
+ complex(ki), intent(out), dimension(size(mat_c,1),size(mat_c,1)) :: inv_mat_c
+ real(ki), intent(out) :: error
+ !
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: id_mat, mat1, mat2
+ complex(ki), dimension(size(mat_c,1),1) :: a
+ complex(ki), dimension(1,size(mat_c,1)) :: at
+ complex(ki), dimension(:,:), allocatable :: ga,ga_prime
+ complex(ki), dimension(:,:), allocatable :: gab,gab_prime
+ integer :: k,n_dim
+ integer :: res
+ real(ki) :: denom, max1, max2
+ !
+ n_dim = size(mat_c,1) ! dimension de la matrice
+ !
+ id_mat = czero
+ do k=1,n_dim
+ id_mat(k,k) = cmplx(1._ki,0._ki,ki)
+ end do
+ !
+ ! premiere iteration
+ !
+ allocate(ga(n_dim,1),stat=res)
+ allocate(ga_prime(1,n_dim),stat=res)
+ !
+ a(:,1) = mat_c(:,1) ! premiere colonne de mat
+ ga = a ! A est la 1ere colonne de mat
+ at = conjg(transpose(a))
+ denom = real(sum(matmul(at,a)),ki) ! on utilise sum pour rendre scalaire
+ ! matmul, sinon tableau (1,1)
+ if (sqrt(denom) >= glob_eps) then
+ !
+ ga_prime = at/denom ! cas standard A' pseudo-inverse de A
+ !
+ else
+ !
+ ga_prime(:,:) = czero ! si mat est singuliere
+ !
+ end if
+ !
+ ! autres iterations
+ !
+ do k=2, n_dim
+ !
+ allocate(gab(n_dim,k),stat=res)
+ allocate(gab_prime(k,n_dim),stat=res)
+ !
+ a(:,1) = mat_c(:,k)
+ call compt(n_dim,k-1,a,ga,ga_prime,gab,gab_prime)
+! call verif(n_dim,k,gab,gab_prime,error)
+ !
+ deallocate(ga,stat=res)
+ deallocate(ga_prime,stat=res)
+ !
+ allocate(ga(n_dim,k),stat=res)
+ allocate(ga_prime(k,n_dim),stat=res)
+ !
+ ga = gab
+ ga_prime = gab_prime
+ !
+ deallocate(gab,stat=res)
+ deallocate(gab_prime,stat=res)
+ !
+ end do
+ !
+ inv_mat_c = ga_prime
+ !
+ mat1 = matmul(inv_mat_c,mat_c)
+ mat2 = matmul(mat_c,inv_mat_c)
+ mat1 = abs(mat1-id_mat)
+ mat2 = abs(mat2-id_mat)
+ !
+ max1 = maxval(real(mat1,ki))
+ max2 = maxval(real(mat2,ki))
+ !
+ error = max(max1,max2)
+ end subroutine inverse_greville_c
+ !
+ !****if* src/kinematic/inverse_matrice/compt
+ ! NAME
+ !
+ ! Subroutine compt
+ !
+ ! USAGE
+ !
+ ! call compt(n,k,a,ga,ga_prime,ga_plus,ga_prime_plus)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine is used to iterate the inversion processus
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the shape of the matrix to inverse
+ ! * k -- an integer, number of rows
+ ! * a -- a real/complex (type ki) array of rank 2, its shape is (n,1)
+ ! * ga -- a real/complex (type ki) array of rank 2, its shapes is (n,k)
+ ! * ga_prime -- a real/complex (type ki) array of rank 2, its shapes is (k,n)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * ga_plus -- a real/complex(type ki) array of rank 2, its shape is (n,k+1)
+ ! * ga_prime_plus -- a real/complex(type ki) array of rank 2, its shape is (k+1,n)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ ! cette routine itere le processus, elle recoit en argument les dimensions
+ ! de A at A' ainsi que A et A' et retourne A+ et A'+, A+ a une colonne de
+ ! plus que A et A'+ une ligne de plus que A'
+ !
+ subroutine compt_r(n,k,a,ga,ga_prime,ga_plus,ga_prime_plus)
+ !
+ integer, intent(in) :: n,k
+ real(ki), intent(in), dimension(n,1) :: a
+ real(ki), intent(in), dimension(n,k) :: ga
+ real(ki), intent(in), dimension(k,n) :: ga_prime
+ real(ki), intent(out), dimension(n,k+1) :: ga_plus
+ real(ki), intent(out), dimension(k+1,n) :: ga_prime_plus
+ !
+ real(ki), dimension(k,1) :: d
+ real(ki), dimension(1,k) :: dt
+ real(ki), dimension(n,1) :: c
+ real(ki), dimension(1,n) :: ct
+ real(ki) :: denom
+ !
+ !
+ d = matmul(ga_prime,a)
+ dt = transpose(d)
+ c = a - matmul(ga,d)
+ ct = transpose(c) ! cas standard
+ denom = sum(matmul(ct,c)) ! cas standard
+ !
+ if (sqrt(denom) < glob_eps) then
+ !
+ ct = matmul(dt,ga_prime) ! cas singulier
+ denom = 1._ki + sum(matmul(dt,d)) ! cas singulier
+ !
+ end if
+ !
+ ga_prime_plus(1:k,:) = ga_prime - matmul(d,ct)/denom
+ ga_prime_plus(k+1,:) = ct(1,:)/denom
+ ga_plus(:,1:k) = ga
+ ga_plus(:,k+1) = a(:,1)
+ !
+ end subroutine compt_r
+
+ subroutine compt_c(n,k,a,ga,ga_prime,ga_plus,ga_prime_plus)
+ !
+ integer, intent(in) :: n,k
+ complex(ki), intent(in), dimension(n,1) :: a
+ complex(ki), intent(in), dimension(n,k) :: ga
+ complex(ki), intent(in), dimension(k,n) :: ga_prime
+ complex(ki), intent(out), dimension(n,k+1) :: ga_plus
+ complex(ki), intent(out), dimension(k+1,n) :: ga_prime_plus
+ !
+ complex(ki), dimension(k,1) :: d
+ complex(ki), dimension(1,k) :: dt
+ complex(ki), dimension(n,1) :: c
+ complex(ki), dimension(1,n) :: ct
+ real(ki) :: denom
+ !
+ d = matmul(ga_prime,a)
+ dt = conjg(transpose(d))
+ c = a - matmul(ga,d)
+ ct = conjg(transpose(c)) ! cas standard
+ denom = real(sum(matmul(ct,c)),ki) ! cas standard
+ !
+ if (sqrt(abs(denom)) < glob_eps) then
+ !
+ ct = matmul(dt,ga_prime) ! cas singulier
+ denom = 1._ki + real(sum(matmul(dt,d)),ki) ! cas singulier
+ !
+ end if
+ !
+ ga_prime_plus(1:k,:) = ga_prime - matmul(d,ct)/denom
+ ga_prime_plus(k+1,:) = ct(1,:)/denom
+ ga_plus(:,1:k) = ga
+ ga_plus(:,k+1) = a(:,1)
+ !
+ end subroutine compt_c
+
+ !
+ !****if* src/kinematic/inverse_matrice/verif
+ ! NAME
+ !
+ ! Subroutine verif
+ !
+ ! USAGE
+ !
+ ! call verif(n,k,ga,ga_prime,error)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine verifies the Moor-Penrose conditions, it returns the
+ ! maximum error obtained
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the shape of the matrix to inverse
+ ! * k -- an integer, number of rows
+ ! * ga -- a real/complex(type ki) array of rank 2, its shapes is (n,k)
+ ! * ga_prime -- a real/complex(type ki) array of rank 2, its shapes is (k,n)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * error -- a real(type ki), the maximum error obtained to fulfill the
+ ! Moor-Penrose conditions
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ ! cette routine verifie les differentes conditions de Moor-Penrose,
+ ! elle retourne une erreur qui est le maximum des nombres trouves
+ ! au lieu de 0
+ !
+ subroutine verif_r(n,k,ga,ga_prime,error)
+ !
+ integer, intent(in) :: n,k
+ real(ki), intent(in), dimension(n,k) :: ga
+ real(ki), intent(in), dimension(k,n) :: ga_prime
+ real(ki), intent (out) :: error
+ !
+ real(ki), dimension(n,n) :: mat1
+ real(ki), dimension(k,k) :: mat2
+ real(ki), dimension(n,k) :: mat3
+ real(ki), dimension(k,n) :: mat4
+ real(ki) :: max1,max2,max3,max4
+ !
+ mat1 = matmul(ga,ga_prime)
+ mat2 = matmul(ga_prime,ga)
+ mat3 = abs(matmul(mat1,ga)-ga)
+ mat4 = abs(matmul(mat2,ga_prime)-ga_prime)
+ !
+ mat1 = abs(mat1-transpose(mat1))
+ mat2 = abs(mat2-transpose(mat2))
+ !
+ max1 = maxval(mat1)
+ max2 = maxval(mat2)
+ max3 = maxval(mat3)
+ max4 = maxval(mat4)
+ !
+ error = max(max1,max2,max3,max4)
+ !
+ end subroutine verif_r
+
+ subroutine verif_c(n,k,ga,ga_prime,error)
+ !
+ integer, intent(in) :: n,k
+ complex(ki), intent(in), dimension(n,k) :: ga
+ complex(ki), intent(in), dimension(k,n) :: ga_prime
+ real(ki), intent (out) :: error
+ !
+ complex(ki), dimension(n,n) :: mat1
+ complex(ki), dimension(k,k) :: mat2
+ real(ki), dimension(n,n) :: mat1a
+ real(ki), dimension(k,k) :: mat2a
+ real(ki), dimension(n,k) :: mat3
+ real(ki), dimension(k,n) :: mat4
+ real(ki) :: max1,max2,max3,max4
+ !
+ mat1 = matmul(ga,ga_prime)
+ mat2 = matmul(ga_prime,ga)
+ mat3 = abs(matmul(mat1,ga)-ga)
+ mat4 = abs(matmul(mat2,ga_prime)-ga_prime)
+ !
+ mat1a = abs(mat1-transpose(mat1))
+ mat2a = abs(mat2-transpose(mat2))
+ !
+ max1 = maxval(mat1a)
+ max2 = maxval(mat2a)
+ max3 = maxval(mat3)
+ max4 = maxval(mat4)
+ !
+ error = max(max1,max2,max3,max4)
+ !
+ end subroutine verif_c
+ !
+ !****f* src/kinematic/inverse_matrice/imprime_mat
+ ! NAME
+ !
+ ! Subroutine imprime_mat
+ !
+ ! USAGE
+ !
+ ! call imprime_mat(mat)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine prints a n x n matrix
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real/complex (type ki) array of rank 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! No value returned
+ !
+ ! EXAMPLE
+ !
+ ! WARNING: swapped lines and columns! mat(line, column)
+ !
+ !*****
+ ! cette routine sert a imprimer une matrice carree
+
+ subroutine imprime_mat_p(mat_p)
+ type(s_matrix_poly), intent(inout) :: mat_p
+ !
+ if (associated(mat_p%pt_cmplx)) then
+ call imprime_mat(mat_p%pt_cmplx)
+ elseif (associated(mat_p%pt_real)) then
+ call imprime_mat(mat_p%pt_real)
+ end if
+ !
+ end subroutine imprime_mat_p
+ !
+ !
+ subroutine imprime_mat_r(mat)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat
+ !
+ character(len=11*(size(mat,2)-1)+8+14) :: form
+ integer :: i
+ integer, dimension(2) :: dim
+ !
+ dim = shape(mat)
+ form = '(1x,"[",'//repeat('E17.10,TR2,', dim(2)-1)//'E17.10,"]",1x)'
+
+ do i=1,dim(1)
+ !
+ write (*, fmt=form ) mat(i,:)
+ !
+ end do
+ !
+ end subroutine imprime_mat_r
+ !
+ subroutine imprime_mat_c(matc)
+ !
+ complex(ki), intent(in), dimension(:,:) :: matc
+ !
+
+ character(len=32*(size(matc,2)-1)+30) :: form
+ integer :: i
+ integer, dimension(2) :: dim
+ !
+ dim = shape(matc)
+ form = ""
+ !
+ do i=1,dim(2)-1
+ !
+ form = trim(form)//'"(",e16.10,1x,"I*",e16.10,")",2x'
+ !
+ end do
+ !
+ form = trim(form)//'"(",e16.10,1x,"I*",e16.10,")"'
+ !
+ do i=1,dim(1)
+ !
+ write (*,'(1x,"[",'//form//',"]")') matc(i,:)
+ !
+ end do
+ !
+ end subroutine imprime_mat_c
+ !
+ !****if* src/kinematic/inverse_matrice/inverse_triangular
+ ! NAME
+ !
+ ! Subroutine inverse_triangular
+ !
+ ! USAGE
+ !
+ ! call inverse_triangular(mat,inf_or_sup,inv_mat)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine inverses an upper or lower triangular matrix
+ ! The program assumes that the matrix is lower triangular, if it is upper
+ ! the program works with the transposed matrix
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real/complex (type ki) array of rank 2
+ ! * inf_or_sup -- a string of 3 characters : inf or sup
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * inv_mat -- a real/complex (type ki) array of rank 2, the inverse of the triangular matrix
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine inverse_triangular_r(mat_r,inf_or_sup,inv_mat_r)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat_r
+ character(len=3), intent(in) :: inf_or_sup
+ real(ki), intent(out), dimension(size(mat_r,1),size(mat_r,1)) :: inv_mat_r
+ !
+ logical :: inversible,triangular_sup,triangular_inf
+ integer :: n_dim,i,j,k
+ real(ki) :: somme
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: mat1
+ !
+ n_dim = size(mat_r,1) ! dimension de la matrice
+ inversible = .true.
+ triangular_inf = .false.
+ triangular_sup = .false.
+ inv_mat_r(:,:) = 0._ki
+ !
+ if (inf_or_sup == 'inf') triangular_inf = .true.
+ if (inf_or_sup == 'sup') triangular_sup = .true.
+ !
+ do i=1,n_dim
+ !
+ inversible = inversible .and. .not.(equal_real(mat_r(i,i),0._ki))
+ !
+ end do
+ !
+ if ( (inversible) .and. (triangular_inf .or. triangular_sup) ) then
+ !
+ if (triangular_inf) then
+ !
+ mat1 = mat_r
+ !
+ else
+ !
+ mat1 = transpose(mat_r)
+ !
+ end if
+ !
+ do i=1,n_dim
+ !
+ do j=1,i
+ !
+ if (j == i) then
+ !
+ inv_mat_r(i,j) = 1._ki/mat1(i,i)
+ !
+ else
+ !
+ somme = 0._ki
+ !
+ do k=1,i-1
+ !
+ somme = somme + mat1(i,k)*inv_mat_r(k,j)
+ !
+ end do
+ !
+ inv_mat_r(i,j) = -somme/mat1(i,i)
+ !
+ end if
+ !
+ end do
+ !
+ end do
+ !
+ if (triangular_sup) inv_mat_r = transpose(inv_mat_r)
+ !
+ else
+ !
+ !~ if (.not.(inversible)) write(*,*) 'matrice pas inversible'
+ if (.not.(inversible)) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'alerte, internal error'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'In the LU decomposition'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'One triangular matrix is not invertible'
+ call catch_exception(1)
+ end if
+ !~ if (triangular_inf .and. triangular_sup) write(*,*) 'matrice pas diagonal'
+ if (triangular_inf .and. triangular_sup) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'alerte, internal error'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'In the LU decomposition'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'One matrix is not diagonal'
+ call catch_exception(1)
+ end if
+ !
+ end if
+ !
+ end subroutine inverse_triangular_r
+ !
+ subroutine inverse_triangular_c(mat_c,inf_or_sup,inv_mat_c)
+ !
+ complex(ki), intent(in), dimension(:,:) :: mat_c
+ character(len=3), intent(in) :: inf_or_sup
+ complex(ki), intent(out), dimension(size(mat_c,1),size(mat_c,1)) :: inv_mat_c
+ !
+ logical :: inversible,triangular_sup,triangular_inf
+ integer :: n_dim,i,j,k
+ complex(ki) :: somme
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: mat1
+ !
+ n_dim = size(mat_c,1) ! dimension de la matrice
+ inversible = .true.
+ triangular_inf = .false.
+ triangular_sup = .false.
+ inv_mat_c(:,:) = czero
+ !
+ if (inf_or_sup == 'inf') triangular_inf = .true.
+ if (inf_or_sup == 'sup') triangular_sup = .true.
+ !
+ do i=1,n_dim
+ !
+ inversible = inversible .and. .not.(equal_real(abs(mat_c(i,i)),0._ki))
+ !
+ end do
+ !
+ if ( (inversible) .and. (triangular_inf .or. triangular_sup) ) then
+ !
+ if (triangular_inf) then
+ !
+ mat1 = mat_c
+ !
+ else
+ !
+ mat1 = transpose(mat_c)
+ !
+ end if
+ !
+ do i=1,n_dim
+ !
+ do j=1,i
+ !
+ if (j == i) then
+ !
+ inv_mat_c(i,j) = cmplx(1._ki,0._ki,ki)/mat1(i,i)
+ !
+ else
+ !
+ somme = czero
+ !
+ do k=1,i-1
+ !
+ somme = somme + mat1(i,k)*inv_mat_c(k,j)
+ !
+ end do
+ !
+ inv_mat_c(i,j) = -somme/mat1(i,i)
+ !
+ end if
+ !
+ end do
+ !
+ end do
+ !
+ if (triangular_sup) inv_mat_c = transpose(inv_mat_c)
+ !
+ else
+ !
+ !~ if (.not.(inversible)) write(*,*) 'matrice pas inversible'
+ if (.not.(inversible)) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'alerte, internal error'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'In the LU decomposition'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'One triangular matrix is not invertible'
+ call catch_exception(1)
+ end if
+ !~ if (triangular_inf .and. triangular_sup) write(*,*) 'matrice pas diagonal'
+ if (triangular_inf .and. triangular_sup) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'alerte, internal error'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'In the LU decomposition'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'One matrix is not diagonal'
+ call catch_exception(1)
+ end if
+ !
+ end if
+ !
+ end subroutine inverse_triangular_c
+ !
+ !****if* src/kinematic/inverse_matrice/inverse_diagonal
+ ! NAME
+ !
+ ! Subroutine inverse_diagonal
+ !
+ ! USAGE
+ !
+ ! call inverse_diagonal(mat,inv_mat)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine inverses a diagonal matrix
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real (type ki) array of rank 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * inv_mat -- a real (type ki) array of rank 2, the inverse of the triangular matrix
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine inverse_diagonal(mat,inv_mat)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat
+ real(ki), intent(out), dimension(size(mat,1),size(mat,1)) :: inv_mat
+ !
+ logical :: inversible
+ integer :: n_dim,i
+ !
+ n_dim = size(mat,1) ! dimension de la matrice
+ inversible = .true.
+ inv_mat(:,:) = 0._ki
+ !
+ do i=1,n_dim
+ !
+ inversible = inversible .and. (mat(i,i) /= 0._ki)
+ !
+ end do
+ !
+ if (inversible) then
+ !
+ do i=1,n_dim
+ !
+ inv_mat(i,i) = 1._ki/mat(i,i)
+ !
+ end do
+ !
+ else
+ !
+ !~ write(*,*) 'matrice pas inversible'
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'alerte, internal error'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'In the LU decomposition'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'One diagonal matrix is not invertible'
+ call catch_exception(1)
+ !
+ end if
+ !
+ end subroutine inverse_diagonal
+ !
+ !
+ !****if* src/kinematic/inverse_matrice/lu_decomp
+ ! NAME
+ !
+ ! Subroutine lu_decomp
+ !
+ ! USAGE
+ !
+ ! call lu_decomp(mat,p_mat,l_mat,u_mat)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine writes a symmetric matrix as P L U where P is a
+ ! permutation matrix, L is a lower triangular matrix and
+ ! U is an upper triangular matrix
+ !
+ ! INPUTS
+ !
+ ! * mat -- a real (type ki) array of rank 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * p_mat -- a real (type ki) array of rank 2, the permutation matrix
+ ! * l_mat -- a real (type ki) array of rank 2, the lower triangular matrix
+ ! * u_mat -- a real (type ki) array of rank 2, the upper triangular matrix
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine lu_decomp_r(mat_r,p_mat,l_mat,u_mat)
+ !
+ real(ki), intent(in), dimension(:,:) :: mat_r
+ real(ki), intent(out), dimension(size(mat_r,1),size(mat_r,1)) :: l_mat,u_mat,p_mat
+ !
+ integer :: n_dim,i,j,k
+ integer, dimension(1) :: loc_m
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: mat_b
+ real(ki), dimension(size(mat_r,1),size(mat_r,1)) :: temp_mat,id_mat
+ real(ki), dimension(size(mat_r,1)) :: temp_vec
+ !
+ n_dim = size(mat_r,1) ! dimension de la matrice
+ u_mat(:,:) = 0._ki
+ id_mat(:,:) = 0._ki
+ !
+ do i=1,n_dim
+ !
+ id_mat(i,i) = 1._ki
+ !
+ end do
+ !
+ mat_b = mat_r
+ l_mat(:,:) = 0._ki
+ p_mat = id_mat
+ !
+ do k=1,n_dim-1
+ !
+ ! plus grand element de la colonne k entre les lignes k et n_dim
+ !
+ loc_m = maxloc(abs(mat_b(k:n_dim,k))) + k - 1
+ !
+ ! si ce plus grand element n'est pas sur la ligne k ou bien on ne
+ ! traite pas la derniere ligne, on permute les lignes.
+ ! p_mat garde trace de la permutation
+ !
+ if ( (loc_m(1) /= k) .and.(k /= n_dim) ) then
+ !
+ temp_vec = mat_b(k,:)
+ mat_b(k,:) = mat_b(loc_m(1),:)
+ mat_b(loc_m(1),:) = temp_vec
+ !
+ temp_vec = l_mat(k,:)
+ l_mat(k,:) = l_mat(loc_m(1),:)
+ l_mat(loc_m(1),:) = temp_vec
+ !
+ temp_mat = id_mat
+ temp_mat(k,:) = id_mat(loc_m(1),:)
+ temp_mat(loc_m(1),:) = id_mat(k,:)
+ p_mat = matmul(p_mat,temp_mat)
+ !
+ end if
+ !
+ l_mat(k,k) = 1._ki
+ l_mat(k+1:n_dim,k) = mat_b(k+1:n_dim,k)/mat_b(k,k)
+ !
+ do i=k+1,n_dim
+ !
+ mat_b(i,1:k) = 0._ki
+ !
+ do j=k+1,n_dim
+ !
+ mat_b(i,j) = mat_b(i,j) - l_mat(i,k)*mat_b(k,j)
+ !
+ end do
+ !
+ end do
+ !
+ end do
+ !
+ l_mat(n_dim,n_dim) = 1._ki
+ u_mat = mat_b
+ !
+ end subroutine lu_decomp_r
+ !
+ !
+ subroutine lu_decomp_c(mat_c,p_mat,l_mat,u_mat)
+ !
+ complex(ki), intent(in), dimension(:,:) :: mat_c
+ complex(ki), intent(out), dimension(size(mat_c,1),size(mat_c,1)) :: l_mat,u_mat,p_mat
+ !
+ integer :: n_dim,i,j,k
+ integer, dimension(1) :: loc_m
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: mat_b
+ complex(ki), dimension(size(mat_c,1),size(mat_c,1)) :: temp_mat,id_mat
+ complex(ki), dimension(size(mat_c,1)) :: temp_vec
+ !
+ n_dim = size(mat_c,1) ! dimension de la matrice
+ u_mat(:,:) = czero
+ id_mat(:,:) = czero
+ !
+ do i=1,n_dim
+ !
+ id_mat(i,i) = cmplx(1._ki,0._ki,ki)
+ !
+ end do
+ !
+ mat_b = mat_c
+ l_mat(:,:) = czero
+ p_mat = id_mat
+ !
+ do k=1,n_dim-1
+ !
+ ! plus grand element de la colonne k entre les lignes k et n_dim
+ !
+ loc_m = maxloc(abs(mat_b(k:n_dim,k))) + k - 1
+ !
+ ! si ce plus grand element n'est pas sur la ligne k ou bien on ne
+ ! traite pas la derniere ligne, on permute les lignes.
+ ! p_mat garde trace de la permutation
+ !
+ if ( (loc_m(1) /= k) .and.(k /= n_dim) ) then
+ !
+ temp_vec = mat_b(k,:)
+ mat_b(k,:) = mat_b(loc_m(1),:)
+ mat_b(loc_m(1),:) = temp_vec
+ !
+ temp_vec = l_mat(k,:)
+ l_mat(k,:) = l_mat(loc_m(1),:)
+ l_mat(loc_m(1),:) = temp_vec
+ !
+ temp_mat = id_mat
+ temp_mat(k,:) = id_mat(loc_m(1),:)
+ temp_mat(loc_m(1),:) = id_mat(k,:)
+ p_mat = matmul(p_mat,temp_mat)
+ !
+ end if
+ !
+ l_mat(k,k) = cmplx(1._ki,0._ki,ki)
+ l_mat(k+1:n_dim,k) = mat_b(k+1:n_dim,k)/mat_b(k,k)
+ !
+ do i=k+1,n_dim
+ !
+ mat_b(i,1:k) = czero
+ !
+ do j=k+1,n_dim
+ !
+ mat_b(i,j) = mat_b(i,j) - l_mat(i,k)*mat_b(k,j)
+ !
+ end do
+ !
+ end do
+ !
+ end do
+ !
+ l_mat(n_dim,n_dim) = cmplx(1._ki,0._ki,ki)
+ u_mat = mat_b
+ !
+ end subroutine lu_decomp_c
+ !
+end module inverse_matrice
Index: 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.in (revision 119)
@@ -0,0 +1,535 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/kinematic
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_kinematics_la_LIBADD =
+am_libgolem95_kinematics_la_OBJECTS = \
+ libgolem95_kinematics_la-inverse_matrice.lo \
+ libgolem95_kinematics_la-matrice_s.lo
+libgolem95_kinematics_la_OBJECTS = \
+ $(am_libgolem95_kinematics_la_OBJECTS)
+libgolem95_kinematics_la_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_kinematics_la_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_kinematics_la_SOURCES)
+DIST_SOURCES = $(libgolem95_kinematics_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_kinematics.la
+AM_FCFLAGS = -I$(top_builddir)/src/module
+libgolem95_kinematics_la_SOURCES = inverse_matrice.f90 matrice_s.f90
+libgolem95_kinematics_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = matrice_s.mod inverse_matrice.mod
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kinematic/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/kinematic/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_kinematics.la: $(libgolem95_kinematics_la_OBJECTS) $(libgolem95_kinematics_la_DEPENDENCIES)
+ $(libgolem95_kinematics_la_LINK) $(libgolem95_kinematics_la_OBJECTS) $(libgolem95_kinematics_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_kinematics_la-inverse_matrice.lo: inverse_matrice.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_kinematics_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_kinematics_la-inverse_matrice.lo $(FCFLAGS_f90) `test -f 'inverse_matrice.f90' || echo '$(srcdir)/'`inverse_matrice.f90
+
+libgolem95_kinematics_la-matrice_s.lo: matrice_s.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_kinematics_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_kinematics_la-matrice_s.lo $(FCFLAGS_f90) `test -f 'matrice_s.f90' || echo '$(srcdir)/'`matrice_s.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+matrice_s.o: inverse_matrice.o
+matrice_s.lo: inverse_matrice.lo
+matrice_s.obj: inverse_matrice.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/kinematic/matrice_s.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/kinematic/matrice_s.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/kinematic/matrice_s.f90 (revision 119)
@@ -0,0 +1,2916 @@
+!
+!****h* src/kinematic/matrice_s
+! NAME
+!
+! Module matrice_s
+!
+! USAGE
+!
+! use matrice_s
+!
+! DESCRIPTION
+!
+! This module is used : to reserve some memory in order to pass the S matrix, its
+! shape, the set of propagator labels; to compute the inverse
+! of S matrix and the related quantities : the b's and sumb, also for the
+! reduce matrix (up to 4 X 4). The S matrix is allocated here and also its dimension
+! and it returns the result through the three functions inv_s, b and sumb.
+!
+!
+! OUTPUT
+!
+! This module exports five variables:
+! * dim_s -- an integer, the shape of the initial S matrix
+! * set_ref -- an integer array, the set of initial propagators
+! * s_mat_c -- a complex (type ki) array of rank 2, the S matrix.
+! * s_mat_p -- a derived type, including the S matrix for either real or complex masses
+! and integer-bits encoding the positions of masses with non-vanishing Im-part,
+! and vanishing masses.
+! * s_mat -- A pointer associated with s_mat_c. The user can fill s_mat or s_mat_c with complex or
+! real values.
+!
+! and also eleven functions:
+! * initgolem95 -- calls allocation_s, initializes the cache, associates s_mat.
+! * allocation_s -- to allocate the required memory
+! * deallocation_s -- to deallocate the used memory
+! * preparesmatrix -- fill s_mat_r with the real part of s_mat_c, sets the bit integers in s_mat_p
+! calls init_invs.
+! * init_invs -- to fill all the array for the inverse of the S matrix
+! and the inverse of the reduce S matrix
+! * inv_s -- it contains the inverse of the S matrix
+! * hj -- it contains H matrix (pseudo-inverse of G)
+! * b -- it contains the b coefficients
+! * sumb -- it contains the B coeficient
+! * norma_sumb -- it contains the normalised B coefficient
+! * exitgolem95 -- deallocates memory, clear the cache.
+!
+! Only dim_s and set_ref take a value in this module, not the other variables
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * cache (src/module/cache.f90)
+! * inverse_matrice (src/kinematic/inverse_matrice.f90)
+! * tri_croissant (src/module/tri_croissant.f90)
+! * array (src/module/array.f90)
+! * parametre (src/module/parametre.f90)
+! * s_matrix_type (src/module/s_matrix_type.f90)
+!
+!*****
+!
+module matrice_s
+ !
+ use precision_golem
+ use sortie_erreur
+ use cache
+ use inverse_matrice
+ use tri_croissant
+ use array
+ use parametre
+ use s_matrix_type
+ use constante, only:czero
+ implicit none
+ !
+ !
+ private
+ !
+ integer :: dim_s
+ integer, dimension(:), allocatable :: set_ref
+ integer, dimension(6) :: ref_vector = (/ 1, 2, 3, 4, 5, 6 /)
+ integer :: b_ref
+ real(ki), dimension(:,:), allocatable :: s_mat_r
+ complex(ki), dimension(:,:), allocatable, target :: s_mat_c
+ type(s_matrix_poly) :: s_mat_p
+ complex(ki), dimension(:,:), pointer :: s_mat
+ !
+ public :: dim_s, set_ref, b_ref, s_mat_c, s_mat_p, s_mat
+ !
+ real(ki), dimension(:,:), allocatable :: invs6_r
+ real(ki), dimension(:,:,:), allocatable :: hjj_r
+ real(ki), dimension(:), allocatable :: b6_r
+ real(ki) :: sumb6_r
+ real(ki), dimension(:,:,:), allocatable :: invs5_r
+ real(ki), dimension(:,:), allocatable :: b5_r
+ real(ki), dimension(:), allocatable :: sumb5_r
+ real(ki), dimension(:,:,:,:), allocatable :: invs4_r
+ real(ki), dimension(:,:,:), allocatable :: b4_r
+ real(ki), dimension(:,:), allocatable :: sumb4_r
+ real(ki), dimension(:,:), allocatable :: norma_sumb4_r
+
+ complex(ki), dimension(:,:), allocatable :: invs6_c
+ complex(ki), dimension(:,:,:), allocatable :: hjj_c
+ complex(ki), dimension(:), allocatable :: b6_c
+ complex(ki) :: sumb6_c
+ complex(ki), dimension(:,:,:), allocatable :: invs5_c
+ complex(ki), dimension(:,:), allocatable :: b5_c
+ complex(ki), dimension(:), allocatable :: sumb5_c
+ complex(ki), dimension(:,:,:,:), allocatable :: invs4_c
+ complex(ki), dimension(:,:,:), allocatable :: b4_c
+ complex(ki), dimension(:,:), allocatable :: sumb4_c
+ complex(ki), dimension(:,:), allocatable :: norma_sumb4_c
+ integer :: err
+ !
+ public :: allocation_s, deallocation_s, init_invs, inv_s, hj, b, sumb, norma_sumb
+ public :: initgolem95, preparesmatrix, prepare_s_matrix_local, exitgolem95
+ !
+ interface put_to_zero
+ !
+ module procedure put_to_zero_r, put_to_zero_c
+ !
+ end interface
+ !
+ contains
+ !
+ !****f* src/kinematic/matrice_s/initgolem95
+ ! NAME
+ !
+ ! Subroutine initgolem95
+ !
+ ! USAGE
+ !
+ ! call initgolem95(dim, opt_set)
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine is the first of three macro functions which needs to be called by the user.
+ ! It allocates memory for all internal matrices needed in subsequent calculations.
+ ! The caching system is initialized.
+ ! A pointer s_mat is associated with a complex matrix s_mat_c.
+ ! This is the s matrix which has to be filled after initgolem95() is called.
+ ! The argument 'dim' sets the maximal number of external legs.
+ ! An optional array for the numbering of propagators can be given.
+ ! The default is set to (/ 1, ... , dim /)
+ !
+ ! INPUTS
+ !
+ ! * dim -- an integer, the maximal number of external legs
+ ! * opt_set -- an optional integer array for the numbering of propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! A call to allocation_s is made, implying all side effects given there.
+ ! The caching system is initialized.
+ ! A pointer 's_mat' is associated with the global matrix s_mat_c.
+ ! The internal parameter rmass_or_cmass_par is set to cmass. If a purely real
+ ! s matrix is given by the user it will be set to rmass in the call of
+ ! preparesmatrix.
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine initgolem95(dim, opt_set)
+ !
+ integer, intent(in) :: dim
+ integer, dimension(:), optional, intent(in) :: opt_set
+ !
+ rmass_or_cmass_par = cmass
+ !
+ call allocation_s(dim)
+ !
+ if (present(opt_set) ) then
+ !
+ set_ref(:) = opt_set(:)
+ !
+ else
+ !
+ set_ref(:) = ref_vector(1:dim)
+ !
+ end if
+ !
+ b_ref = packb(set_ref)
+ !
+ call allocate_cache(dim)
+ !
+ s_mat => s_mat_c
+ !
+ end subroutine initgolem95
+ !
+ !****f* src/kinematic/matrice_s/allocation_s
+ ! NAME
+ !
+ ! Subroutine allocation_s
+ !
+ ! USAGE
+ !
+ ! call allocation_s(dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine reserves the memory for several objects.
+ ! dim_s is an integer, invs6 a real(type ki) array of rank 2
+ ! hjj a real (type ki) array of rank 3, b6 a real (type ki) array of rank 1,
+ ! sumb6 a real (type ki), invs5 a real (type ki) array of rank 3,
+ ! b5 a real (type ki) array of rank 2, sumb5 a real (type ki) array of rank 1,
+ ! invs4 a real (type ki) array of rank 4, b4 a real (type ki) array of rank 3,
+ ! sumb4 a real (type ki) array of rank 2
+ ! norma_sumb4 a real (type ki) array of rank 2
+ ! In case of rmass_or_cmass_par==cmass, there complex copies of each preceding array
+ ! are also allocated.
+ !
+ ! After memory allocation, s_mat_p is then assigned the matrix s_mat_c or s_mat_r,
+ ! respectively. The corresponding pointers in s_mat_p are associated or nullified.
+ ! In case a complex matrix is assigned, there will be also a pointer associated with
+ ! a real matrix, which has entries according to the real part of the complex matrix.
+ !
+ ! INPUTS
+ !
+ ! * dim -- an integer, the maximal number of external legs
+ !
+ ! SIDE EFFECTS
+ !
+ ! This routine modify the value of the variable dim_s
+ ! It initialises invs6, hjj, b6, sumb6, invs5, b5, sumb5,
+ ! invs4, b4, sumb4, norma_sumb4 to zero
+ ! It associates the global objects s_mat_p with s_mat_r or s_mat_c.
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine allocation_s(dim)
+ !
+ integer, intent(in) :: dim
+ !
+ if (rmass_or_cmass_par%rmass_selected) then
+ !
+ call allocation_s_r(dim)
+ s_mat_p = assign_s_matrix(s_mat_r)
+ !
+ else if (rmass_or_cmass_par%cmass_selected) then
+ !
+ call allocation_s_r(dim)
+ call allocation_s_c(dim)
+ s_mat_p = assign_s_matrix(s_mat_c,s_mat_r)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'rmass_or_cmass_par has wrong value'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine allocation_s
+ !
+ subroutine allocation_s_r(dim)
+ !
+ integer, intent(in) :: dim
+ integer :: err
+ !
+ dim_s = dim
+ !
+ allocate(s_mat_c(dim_s,dim_s),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for s_mat'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(s_mat_r(dim_s,dim_s),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for s_mat'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(set_ref(dim_s),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for set_ref'
+ call catch_exception(0)
+ !
+ end if
+ !
+ select case(dim)
+ !
+ case(6)
+ !
+ allocate(invs6_r(6,6),hjj_r(6,6,6),b6_r(6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_r(6,6,6),b5_r(6,6),sumb5_r(6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_r(6,6,6,6),b4_r(6,6,6),sumb4_r(6,6),norma_sumb4_r(6,6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(5)
+ !
+ allocate(invs6_r(1,1),hjj_r(1,1,1),b6_r(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_r(5,5,1),b5_r(5,1),sumb5_r(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_r(5,5,1,5),b4_r(5,1,5),sumb4_r(1,5),norma_sumb4_r(1,5),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(4)
+ !
+ allocate(invs6_r(1,1),hjj_r(1,1,1),b6_r(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(4)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_r(1,1,1),b5_r(1,1),sumb5_r(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(4)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_r(4,4,1,1),b4_r(4,1,1),sumb4_r(1,1),norma_sumb4_r(1,1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(4)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(1,2,3)
+ ! in these cases invsn, hjj, bn, sumbn are of no use, one allocates the
+ ! minimum
+ !
+ allocate(invs6_r(1,1),hjj_r(1,1,1),b6_r(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(3)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_r(1,1,1),b5_r(1,1),sumb5_r(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(3)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_r(1,1,1,1),b4_r(1,1,1),sumb4_r(1,1),norma_sumb4_r(1,1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(3)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the argument dim has the value: %d0'
+ tab_erreur_par(2)%arg_int = dim
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'which is not correct, must be 1 <= dim <= 6'
+ call catch_exception(0)
+ !
+ end select
+ !
+ invs6_r = 0._ki
+ b6_r = 0._ki
+ sumb6_r = 0._ki
+ hjj_r = 0._ki
+ !
+ invs5_r = 0._ki
+ b5_r = 0._ki
+ sumb5_r = 0._ki
+ !
+ invs4_r = 0._ki
+ b4_r = 0._ki
+ sumb4_r = 0._ki
+ norma_sumb4_r = 0._ki
+ !
+ end subroutine allocation_s_r
+ !
+ subroutine allocation_s_c(dim)
+ !
+ integer, intent(in) :: dim
+ integer :: err
+ !
+ dim_s = dim
+ !
+ select case(dim)
+ !
+ case(6)
+ !
+ allocate(invs6_c(6,6),hjj_c(6,6,6),b6_c(6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_c(6,6,6),b5_c(6,6),sumb5_c(6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_c(6,6,6,6),b4_c(6,6,6),sumb4_c(6,6),norma_sumb4_c(6,6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(5)
+ !
+ allocate(invs6_c(1,1),hjj_c(1,1,1),b6_c(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_c(5,5,1),b5_c(5,1),sumb5_c(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_c(5,5,1,5),b4_c(5,1,5),sumb4_c(1,5),norma_sumb4_c(1,5),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(4)
+ !
+ allocate(invs6_c(1,1),hjj_c(1,1,1),b6_c(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(4)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_c(1,1,1),b5_c(1,1),sumb5_c(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(4)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_c(4,4,1,1),b4_c(4,1,1),sumb4_c(1,1),norma_sumb4_c(1,1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(4)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(1,2,3)
+ ! in these cases invsn, hjj, bn, sumbn are of no use, one allocates the
+ ! minimum
+ !
+ allocate(invs6_c(1,1),hjj_c(1,1,1),b6_c(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(3)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs5_c(1,1,1),b5_c(1,1),sumb5_c(1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(3)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(invs4_c(1,1,1,1),b4_c(1,1,1),sumb4_c(1,1),norma_sumb4_c(1,1),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s case(3)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the argument dim has the value: %d0'
+ tab_erreur_par(2)%arg_int = dim
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'which is not correct, must be 1 <= dim <= 6'
+ call catch_exception(0)
+ !
+ end select
+ !
+ invs6_c = czero
+ b6_c = czero
+ sumb6_c = czero
+ hjj_c = czero
+ !
+ invs5_c = czero
+ b5_c = czero
+ sumb5_c = czero
+ !
+ invs4_c = czero
+ b4_c = czero
+ sumb4_c = czero
+ norma_sumb4_c = czero
+ !
+ end subroutine allocation_s_c
+ !
+ !
+ !****f* src/kinematic/matrice_s/preparesmatrix
+ ! NAME
+ !
+ ! Subroutine preparesmatrix
+ !
+ ! USAGE
+ !
+ ! call preparesmatrix()
+ ! call prepare_s_matrix_local(s_mat_p_loc,set_ref_loc)
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine prepares the global or local s_mat_p object, consisting
+ ! of pointers to s_mat_c and s_mat_r and integer bits b_cmplx and b_zero.
+ ! A call to init_invs is made to fill the inverse matrices needed
+ ! in the form factor calculations.
+ ! If the user has defined a purely real s matrix, the internal parameter
+ ! rmass_or_cmass_par is set to rmass and only the real branch of the library
+ ! is used.
+ ! In the complex case, form factors which are not affected by complex
+ ! masses will be called with a sub matrix of s_mat_r, the real part of s_mat_c.
+ ! The routine also sets the bits for complex mass and zero mass-
+ ! entries.
+ ! The subroutine prepare_s_matrix_local is used internally to prepare local type
+ ! s_matrix_poly objects. This subroutine does not interact with the inverse matrices
+ ! and the caching system.
+ !
+ ! INPUTS
+ !
+ ! For prepare_s_matrix_local, s_mat_p and set_ref need to be given.
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine preparesmatrix()
+ !
+ rmass_or_cmass_par = cmass
+ if (.not. associated(s_mat_p%pt_cmplx) ) s_mat_p%pt_cmplx => s_mat_c
+ !
+ call fill_s_matrix(s_mat_p)
+ call set_s_matrix_bits(s_mat_p,set_ref)
+ !
+ if ( s_mat_p%b_cmplx == 0 ) then
+ !
+ rmass_or_cmass_par = rmass
+ nullify(s_mat_p%pt_cmplx)
+ !
+ end if
+ !
+ call reset_cache()
+ call init_invs()
+ !
+ end subroutine preparesmatrix
+ !
+ subroutine prepare_s_matrix_local(s_mat_poly,set_ref_loc)
+ type(s_matrix_poly),intent (inout) :: s_mat_poly
+ integer, dimension(:) :: set_ref_loc
+ !
+ call fill_s_matrix(s_mat_poly)
+ call set_s_matrix_bits(s_mat_poly,set_ref_loc)
+ !
+ end subroutine prepare_s_matrix_local
+ !
+ !
+ !****f* src/kinematic/matrice_s/deallocation_s
+ ! NAME
+ !
+ ! Subroutine deallocation_s
+ !
+ ! USAGE
+ !
+ ! call deallocation_s()
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine deallocates the memory reserved by the preceeding
+ ! subroutine.
+ ! The pointers in s_mat_p are nullified.
+ !
+ ! INPUTS
+ !
+ ! No input
+ !
+ ! SIDE EFFECTS
+ !
+ ! This routine destroys all the variables initialised in the
+ ! preceeding subroutine as well as any associations in s_mat_p.
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine deallocation_s()
+ !
+ call nullify_s_matrix(s_mat_p)
+ !
+ if (rmass_or_cmass_par%rmass_selected) then
+ !
+ call deallocation_s_r()
+ !
+ else if (rmass_or_cmass_par%cmass_selected) then
+ !
+ call deallocation_s_c()
+ call deallocation_s_r()
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'rmass_or_cmass has wrong value'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine deallocation_s
+
+ subroutine deallocation_s_r()
+ !
+ integer :: err
+ !
+ deallocate(s_mat_r,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for s_mat'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(set_ref,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for s_ref'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(invs6_r,hjj_r,b6_r,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(invs5_r,b5_r,sumb5_r,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(invs4_r,b4_r,sumb4_r,norma_sumb4_r,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ end if
+ !
+ end subroutine deallocation_s_r
+ !
+ subroutine deallocation_s_c()
+ !
+ integer :: err
+ !
+ deallocate(s_mat_c,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for s_mat'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(invs6_c,hjj_c,b6_c,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for invs6 or hjj or b6'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(invs5_c,b5_c,sumb5_c,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for invs5 or b5 or sumb5'
+ call catch_exception(0)
+ end if
+ !
+ deallocate(invs4_c,b4_c,sumb4_c,norma_sumb4_c,stat=err)
+ !
+ if (err /= 0) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine deallocation_s'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for invs4 or b4 or sumb4 or norma_sumb4'
+ call catch_exception(0)
+ end if
+ !
+ end subroutine deallocation_s_c
+ !
+ !****f* src/kinematic/inversion/init_invs
+ ! NAME
+ !
+ ! Subroutine init_invs
+ !
+ ! USAGE
+ !
+ ! call init_invs()
+ !
+ ! DESCRIPTION
+ !
+ ! This function comes in two copies for real masses and complex masses.
+ ! The respective arrays are filled.
+ !
+ ! For a 6 x 6 S matrix, this routine fills the arrays:
+ ! invs6, hjj, b6, sumb6, invs5, b5, sumb5, invs4, b4, sumb4, norma_sumb4
+ !
+ ! For a 5 x 5 S matrix, this routine fills the arrays:
+ ! invs5, b5, sumb5, invs4, b4, sumb4, norma_sumb4
+ !
+ ! For a 4 x 4 S matrix, this routine fills the arrays:
+ ! invs4, b4, sumb4, norma_sumb4
+ !
+ ! One can print a typical error due to the numerical inversion
+ !
+ ! INPUTS
+ !
+ ! No input
+ !
+ ! SIDE EFFECTS
+ !
+ ! This routine modifies the values of the real or complex arrays
+ ! invs6, hjj, b6, sumb6, invs5, b5, sumb5, invs4, b4, sumb4, norma_sumb4
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine init_invs()
+ !
+ !
+ if (rmass_or_cmass_par%cmass_selected) then
+ !
+ call init_invs_c()
+ call init_invs_r()
+ !
+ else if (rmass_or_cmass_par%rmass_selected) then
+ !
+ call init_invs_r()
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case()'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'rmass_or_cmass_par has wrong value'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine init_invs
+ !
+ !
+ subroutine init_invs_r()
+ !
+ integer :: i1,i2,i
+ real(ki), dimension(:,:), allocatable :: temp_mat_r,temp1_mat_r
+ real(ki) :: error6,error5,error4,error
+ real(ki) :: plus_grand
+ !
+ plus_grand = maxval(array=abs(s_mat_r))
+ b_ref = packb(set_ref)
+ !
+ select case(dim_s)
+ !
+ case(6)
+ !
+ allocate(temp_mat_r(6,6),temp1_mat_r(6,6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for temp_mat or temp1_mat'
+ call catch_exception(0)
+ !
+ end if
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 6-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ origine_inv_info_par = '6x6 matrix'
+ call inverse(s_mat_r,invs6_r,error6)
+ !
+ b6_r(:) = sum(invs6_r,dim=1)
+ sumb6_r = sum(b6_r)
+ !
+ do i=1,6
+ !
+ do i1=1,6
+ !
+ do i2=1,6
+ !
+ hjj_r(i1,i2,i) = -2._ki*( invs6_r(i1,i2) &
+ - invs6_r(i,i1)*b6_r(i2)/b6_r(i) &
+ - invs6_r(i,i2)*b6_r(i1)/b6_r(i) &
+ + invs6_r(i,i)*b6_r(i1)*b6_r(i2) &
+ /b6_r(i)**2 )
+ !
+ end do
+ !
+ end do
+ !
+ end do
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 5-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ error5 = 0._ki
+ !
+ do i1=1,6
+ !
+ call put_to_zero(i1,s_mat_r,temp_mat_r)
+ origine_inv_info_par = '5x5 matrix, pinch '//achar(i1+48)
+ !~ call inverse(temp_mat,invs5(:,:,i1),error)
+ call inverse(temp_mat_r,invs5_r(:,:,i1),error,i1)
+ !
+ b5_r(:,i1) = sum(invs5_r(:,:,i1),dim=1)
+ sumb5_r(i1) = sum(b5_r(:,i1))
+ error5 = max(error,error5)
+ !
+ end do
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 4-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ error4 = 0._ki
+ !
+ do i1=1,6
+ !
+ call put_to_zero(i1,s_mat_r,temp_mat_r)
+ !
+ do i2=i1,6
+ !
+ if (i2 /= i1) then
+ !
+ call put_to_zero(i2,temp_mat_r,temp1_mat_r)
+ origine_inv_info_par = '4x4 matrix, pinch '//achar(i1+48)//' '//achar(i2+48)
+ !~ call inverse(temp1_mat,invs4(:,:,i1,i2),error)
+ call inverse(temp1_mat_r,invs4_r(:,:,i1,i2),error,i1,i2)
+ !
+ b4_r(:,i1,i2) = sum(invs4_r(:,:,i1,i2),dim=1)
+ sumb4_r(i1,i2) = sum(b4_r(:,i1,i2))
+ norma_sumb4_r(i1,i2) = sumb4_r(i1,i2)*plus_grand
+ error4 = max(error,error4)
+ !
+ end if
+ !
+ end do
+ !
+ end do
+ !
+ error = max(error6,error5,error4)
+ !
+ deallocate(temp_mat_r,temp1_mat_r,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for temp_mat or temp1_mat'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(5)
+ !
+ allocate(temp_mat_r(5,5),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for temp_mat'
+ call catch_exception(0)
+ !
+ end if
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 5-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ origine_inv_info_par = '5x5 matrix'
+ call inverse(s_mat_r,invs5_r(:,:,1),error5)
+ b5_r(:,1) = sum(invs5_r(:,:,1),dim=1)
+ sumb5_r(1) = sum(b5_r(:,1))
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 4-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ error4 = 0._ki
+ !
+ do i1=1,5
+ !
+ call put_to_zero(i1,s_mat_r,temp_mat_r)
+ origine_inv_info_par = '4x4 matrix, pinch '//achar(i1+48)
+ !~ call inverse(temp_mat,invs4(:,:,1,i1),error)
+ call inverse(temp_mat_r,invs4_r(:,:,1,i1),error,i1)
+ !
+ b4_r(:,1,i1) = sum(invs4_r(:,:,1,i1),dim=1)
+ sumb4_r(1,i1) = sum(b4_r(:,1,i1))
+ norma_sumb4_r(1,i1) = sumb4_r(1,i1)*plus_grand
+ error4 = max(error,error4)
+ !
+ end do
+ !
+ error = max(error5,error4)
+ !
+ deallocate(temp_mat_r,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for temp_mat'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(4)
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 4-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ origine_inv_info_par = '4x4 matrix'
+ call inverse(s_mat_r,invs4_r(:,:,1,1),error4)
+ b4_r(:,1,1) = sum(invs4_r(:,:,1,1),dim=1)
+ sumb4_r(1,1) = sum(b4_r(:,1,1))
+ norma_sumb4_r(1,1) = sumb4_r(1,1)*plus_grand
+ !
+ error = error4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'called with dim_s = %d0. Nothing done in this case!'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(2)
+ !
+ end select
+ !
+ end subroutine init_invs_r
+ !
+ subroutine init_invs_c()
+ !
+ integer :: i1,i2,i
+ complex(ki), dimension(:,:), allocatable :: temp_mat_c,temp1_mat_c
+ real(ki) :: error6,error5,error4,error
+ real(ki) :: plus_grand
+ !
+ plus_grand = max(maxval( array=abs( real(s_mat_c,ki) ) ), maxval( array=abs( aimag(s_mat_c) ) ) )
+ b_ref = packb(set_ref)
+ !
+ select case(dim_s)
+ !
+ case(6)
+ !
+ allocate(temp_mat_c(6,6),temp1_mat_c(6,6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case(6)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for temp_mat or temp1_mat'
+ call catch_exception(0)
+ !
+ end if
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 6-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ origine_inv_info_par = '6x6 matrix'
+ call inverse(s_mat_c,invs6_c,error6)
+ !
+ b6_c(:) = sum(invs6_c,dim=1)
+ sumb6_c = sum(b6_c)
+ !
+ do i=1,6
+ !
+ do i1=1,6
+ !
+ do i2=1,6
+ !
+ hjj_c(i1,i2,i) = -2._ki*( invs6_c(i1,i2) &
+ - invs6_c(i,i1)*b6_c(i2)/b6_c(i) &
+ - invs6_c(i,i2)*b6_c(i1)/b6_c(i) &
+ + invs6_c(i,i)*b6_c(i1)*b6_c(i2) &
+ /b6_c(i)**2 )
+ !
+ end do
+ !
+ end do
+ !
+ end do
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 5-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ error5 = 0._ki
+ !
+ do i1=1,6
+ !
+ call put_to_zero(i1,s_mat_c,temp_mat_c)
+ origine_inv_info_par = '5x5 matrix, pinch '//achar(i1+48)
+ !~ call inverse(temp_mat,invs5(:,:,i1),error)
+ call inverse(temp_mat_c,invs5_c(:,:,i1),error,i1)
+ !
+ b5_c(:,i1) = sum(invs5_c(:,:,i1),dim=1)
+ sumb5_c(i1) = sum(b5_c(:,i1))
+ error5 = max(error,error5)
+ !
+ end do
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 4-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ error4 = 0._ki
+ !
+ do i1=1,6
+ !
+ call put_to_zero(i1,s_mat_c,temp_mat_c)
+ !
+ do i2=i1,6
+ !
+ if (i2 /= i1) then
+ !
+ call put_to_zero(i2,temp_mat_c,temp1_mat_c)
+ origine_inv_info_par = '4x4 matrix, pinch '//achar(i1+48)//' '//achar(i2+48)
+ !~ call inverse(temp1_mat,invs4(:,:,i1,i2),error)
+ call inverse(temp1_mat_c,invs4_c(:,:,i1,i2),error,i1,i2)
+ !
+ b4_c(:,i1,i2) = sum(invs4_c(:,:,i1,i2),dim=1)
+ sumb4_c(i1,i2) = sum(b4_c(:,i1,i2))
+ norma_sumb4_c(i1,i2) = sumb4_c(i1,i2)*plus_grand
+ error4 = max(error,error4)
+ !
+ end if
+ !
+ end do
+ !
+ end do
+ !
+ error = max(error6,error5,error4)
+ !
+ deallocate(temp_mat_c,temp1_mat_c,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for temp_mat or temp1_mat'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(5)
+ !
+ allocate(temp_mat_c(5,5),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for temp_mat'
+ call catch_exception(0)
+ !
+ end if
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 5-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ origine_inv_info_par = '5x5 matrix'
+ call inverse(s_mat_c,invs5_c(:,:,1),error5)
+ b5_c(:,1) = sum(invs5_c(:,:,1),dim=1)
+ sumb5_c(1) = sum(b5_c(:,1))
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 4-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ error4 = 0._ki
+ !
+ do i1=1,5
+ !
+ call put_to_zero(i1,s_mat_c,temp_mat_c)
+ origine_inv_info_par = '4x4 matrix, pinch '//achar(i1+48)
+ !~ call inverse(temp_mat,invs4(:,:,1,i1),error)
+ call inverse(temp_mat_c,invs4_c(:,:,1,i1),error,i1)
+ !
+ b4_c(:,1,i1) = sum(invs4_c(:,:,1,i1),dim=1)
+ sumb4_c(1,i1) = sum(b4_c(:,1,i1))
+ norma_sumb4_c(1,i1) = sumb4_c(1,i1)*plus_grand
+ error4 = max(error,error4)
+ !
+ end do
+ !
+ error = max(error5,error4)
+ !
+ deallocate(temp_mat_c,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs case(5)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for temp_mat'
+ call catch_exception(0)
+ !
+ end if
+ !
+ case(4)
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!! 4-point functions
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ origine_inv_info_par = '4x4 matrix'
+ call inverse(s_mat_c,invs4_c(:,:,1,1),error4)
+ b4_c(:,1,1) = sum(invs4_c(:,:,1,1),dim=1)
+ sumb4_c(1,1) = sum(b4_c(:,1,1))
+ norma_sumb4_c(1,1) = sumb4_c(1,1)*plus_grand
+ !
+ error = error4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine init_invs'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'called with dim_s = %d0. Nothing done in this case!'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(2)
+ !
+ end select
+ !
+ end subroutine init_invs_c
+ !
+ !****if* src/kinematic/inversion/put_to_zero
+ ! NAME
+ !
+ ! Subroutine put_to_zero
+ !
+ ! USAGE
+ !
+ ! call put_to_zero(i,mati,matf)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine put to 0 the line and the column i of the square matrix mati
+ ! It returns a square matrix matf of dim n x n (n being the
+ ! dimension of mati). It is overloaded with a real and complex version.
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer, the value of the line/column to be put to zero
+ ! * mati -- an real/complex (type ki) array of rank 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * matf -- an real/copmplex (type ki) array of rank 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+
+ subroutine put_to_zero_r(i,mati,matf)
+ !
+ integer, intent(in) :: i
+ real(ki), dimension(:,:), intent(in) :: mati
+ real(ki), dimension(size(mati,1),size(mati,2)), intent(out) :: matf
+ !
+ integer :: n
+ !
+ n = size(mati,1) ! la matrice mati est carree
+ matf = mati
+ matf(i,:) = 0._ki
+ matf(:,i) = 0._ki
+ !
+ end subroutine put_to_zero_r
+ !
+ subroutine put_to_zero_c(i,mati,matf)
+ !
+ integer, intent(in) :: i
+ complex(ki), dimension(:,:), intent(in) :: mati
+ complex(ki), dimension(size(mati,1),size(mati,2)), intent(out) :: matf
+ !
+ integer :: n
+ !
+ n = size(mati,1) ! la matrice mati est carree
+ matf = mati
+ matf(i,:) = czero
+ matf(:,i) = czero
+ !
+ end subroutine put_to_zero_c
+ !
+ !****f* src/kinematic/inversion/inv_s
+ ! NAME
+ !
+ ! Function inv_s
+ !
+ ! USAGE
+ !
+ ! complex = inv_s(i,j,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the generic inverse of the S matrix whatever
+ ! its dimension (<=6)
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer, line number
+ ! * j -- an integer, row number
+ ! * set -- an integer array of rank 1, the set of pinch propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! Warning: Now a complex (type ki) is returned! [TK Sep10]
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function inv_s(i,j,b_pin)
+ !
+ integer, intent (in) :: i,j
+ integer, intent (in) :: b_pin
+ complex(ki) :: inv_s
+ !
+ if (ior(s_mat_p%b_cmplx,b_pin) .eq. b_pin) then
+ !
+ inv_s = cmplx(inv_s_r(i,j,b_pin),0._ki,ki)
+ !
+ else
+ !
+ inv_s = inv_s_c(i,j,b_pin)
+ !
+ end if
+ !
+ end function inv_s
+ !
+ function inv_s_r(i,j,b_pin)
+ !
+ integer, intent (in) :: i,j
+ integer, intent (in) :: b_pin
+ real(ki) :: inv_s_r
+ !
+ integer :: k
+ integer, dimension (1) :: set1
+ integer, dimension (2) :: set2
+ integer :: dim_set
+ !
+ ! This code is called very often and consumes a lot of time.
+ ! I think that justifies to rearrange things making it less readable
+ ! but more efficient [TR]
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ else
+ dim_set = countb(b_pin)
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ inv_s_r = invs6_r(i,j)
+ !
+ else if (dim_set == 1) then
+ !
+ if (b_pin < 256) then
+ k = bit_sets(b_pin*8)
+ else
+ set1 = unpackb(b_pin,dim_set)
+ k = set1(1)
+ end if
+ !
+ if ( (i == k) .or. (j == k) ) then
+ !
+ inv_s_r = 0._ki
+ !
+ else
+ !
+ inv_s_r = invs5_r(i,j,k)
+ !
+ end if
+ !
+ else if (dim_set == 2) then
+ !
+ if (b_pin < 256) then
+ set2 = bit_sets(b_pin*8:b_pin*8+dim_set-1)
+ else
+ set2 = unpackb(b_pin,dim_set)
+ end if
+ if ( (set2(1) == i) .or. (set2(1) == j) .or. &
+ & (set2(2) == i) .or. (set2(2) == j)) then
+ inv_s_r = 0._ki
+ elseif (set2(1) < set2(2)) then
+ inv_s_r = invs4_r(i,j,set2(1),set2(2))
+ else
+ inv_s_r = invs4_r(i,j,set2(2),set2(1))
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function inv_s, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ inv_s_r = invs5_r(i,j,1)
+ !
+ else if (dim_set == 1) then
+ !
+ if (b_pin < 256) then
+ k = bit_sets(b_pin*8)
+ else
+ set1 = unpackb(b_pin,dim_set)
+ k = set1(1)
+ end if
+ !
+ if ( (i == k) .or. (j == k) ) then
+ !
+ inv_s_r = 0._ki
+ !
+ else
+ !
+ inv_s_r = invs4_r(i,j,1,k)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function inv_s, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ inv_s_r = invs4_r(i,j,1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function inv_s, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+
+ ! to please the compiler:
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function invs'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ end function inv_s_r
+ !
+ function inv_s_c(i,j,b_pin)
+ !
+ integer, intent (in) :: i,j
+ integer, intent (in) :: b_pin
+ complex(ki) :: inv_s_c
+ !
+ integer :: k
+ integer, dimension (1) :: set1
+ integer, dimension (2) :: set2
+ integer :: dim_set
+ !
+ ! This code is called very often and consumes a lot of time.
+ ! I think that justifies to rearrange things making it less readable
+ ! but more efficient [TR]
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ else
+ dim_set = countb(b_pin)
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ inv_s_c = invs6_c(i,j)
+ !
+ else if (dim_set == 1) then
+ !
+ if (b_pin < 256) then
+ k = bit_sets(b_pin*8)
+ else
+ set1 = unpackb(b_pin,dim_set)
+ k = set1(1)
+ end if
+ !
+ if ( (i == k) .or. (j == k) ) then
+ !
+ inv_s_c = czero
+ !
+ else
+ !
+ inv_s_c = invs5_c(i,j,k)
+ !
+ end if
+ !
+ else if (dim_set == 2) then
+ !
+ if (b_pin < 256) then
+ set2 = bit_sets(b_pin*8:b_pin*8+dim_set-1)
+ else
+ set2 = unpackb(b_pin,dim_set)
+ end if
+ if ( (set2(1) == i) .or. (set2(1) == j) .or. &
+ & (set2(2) == i) .or. (set2(2) == j)) then
+ inv_s_c = czero
+ elseif (set2(1) < set2(2)) then
+ inv_s_c = invs4_c(i,j,set2(1),set2(2))
+ else
+ inv_s_c = invs4_c(i,j,set2(2),set2(1))
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function inv_s, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ inv_s_c = invs5_c(i,j,1)
+ !
+ else if (dim_set == 1) then
+ !
+ if (b_pin < 256) then
+ k = bit_sets(b_pin*8)
+ else
+ set1 = unpackb(b_pin,dim_set)
+ k = set1(1)
+ end if
+ !
+ if ( (i == k) .or. (j == k) ) then
+ !
+ inv_s_c = czero
+ !
+ else
+ !
+ inv_s_c = invs4_c(i,j,1,k)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function inv_s, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ inv_s_c = invs4_c(i,j,1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function inv_s, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function invs'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end select
+ end function inv_s_c
+ !
+ !****f* src/kinematic/inversion/hj
+ ! NAME
+ !
+ ! Function hj
+ !
+ ! USAGE
+ !
+ ! complex = hj(i,j,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the H matrix (pseudo-inverse of G) (dim=6)
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer, line number
+ ! * j -- an integer, row number
+ ! * set -- an integer array of rank 1, the set of pinch propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! Warning: Now a complex (type ki) is returned! [TK Sep10]
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function hj(i,j,b_pin)
+ !
+ integer, intent (in) :: i,j
+ integer, intent (in) :: b_pin
+ complex(ki) :: hj
+ !
+ if (ior(s_mat_p%b_cmplx,b_pin) .eq. b_pin) then
+ !
+ hj = cmplx(hj_r(i,j,b_pin),0._ki,ki)
+ !
+ else
+ !
+ hj = hj_c(i,j,b_pin)
+ !
+ end if
+ !
+ end function hj
+ !
+ function hj_r(i,j,b_pin)
+ !
+ integer, intent (in) :: i,j
+ integer, intent (in) :: b_pin
+ real(ki) :: hj_r
+ !
+ integer :: k
+ integer, dimension(1) :: set
+ integer :: dim_set
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ !
+ !allocate(set(1:dim_set))
+ k = bit_sets(b_pin*8)
+ !
+ else
+ k = 0
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ !
+ !allocate(set(1:dim_set))
+ set = unpackb(b_pin,1)
+ k = set(1)
+ !
+ else
+ k = 0
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 1) then
+ if ( (i == k) .or. (j == k) ) then
+ !
+ hj_r = 0._ki
+ !
+ else
+ !
+ hj_r = hjj_r(i,j,k)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hj, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hj'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end select
+ end function hj_r
+ !
+ function hj_c(i,j,b_pin)
+ !
+ integer, intent (in) :: i,j
+ integer, intent (in) :: b_pin
+ complex(ki) :: hj_c
+ !
+ integer :: k
+ integer, dimension(1) :: set
+ integer :: dim_set
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ !
+ !allocate(set(1:dim_set))
+ k = bit_sets(b_pin*8)
+ !
+ else
+ k = 0
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ !
+ !allocate(set(1:dim_set))
+ set = unpackb(b_pin,1)
+ k = set(1)
+ !
+ else
+ k = 0
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 1) then
+ if ( (i == k) .or. (j == k) ) then
+ !
+ hj_c = czero
+ !
+ else
+ !
+ hj_c = hjj_c(i,j,k)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hj, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hj'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end select
+ end function hj_c
+ !
+ !****f* src/kinematic/inversion/b
+ ! NAME
+ !
+ ! Function b
+ !
+ ! USAGE
+ !
+ ! complex = b(i,set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the b coefficients whatever the S matrix dimension (<=6)
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer, label of the b coefficients
+ ! * set -- an integer array of rank 1, the set of pinch propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! Warning: Now a complex (type ki) is returned! [TK Sep10]
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function b(i,b_pin)
+ !
+ integer, intent (in) :: i
+ integer, intent (in) :: b_pin
+ complex(ki) :: b
+ !
+ if (ior(s_mat_p%b_cmplx,b_pin) .eq. b_pin) then
+ !
+ b = cmplx(b_r(i,b_pin),0._ki,ki)
+ !
+ else
+ !
+ b = b_c(i,b_pin)
+ !
+ end if
+ !
+ end function b
+ !
+ function b_r(i,b_pin)
+ !
+ integer, intent (in) :: i
+ integer, intent (in) :: b_pin
+ real(ki) :: b_r
+ !
+ integer :: k
+ integer, dimension (2) :: set
+ integer :: dim_set
+ !
+ ! dim_set is maximal of size 2
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ set = reshape(unpackb(b_pin,dim_set),(/2/),(/0/))
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ b_r = b6_r(i)
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ !
+ if (i == k) then
+ !
+ b_r = 0._ki
+ !
+ else
+ !
+ b_r = b5_r(i,k)
+ !
+ end if
+ !
+ else if (dim_set == 2) then
+ if ((set(1) == i) .or. (set(2) == i)) then
+ b_r = 0._ki
+ elseif (set(1) < set(2)) then
+ b_r = b4_r(i,set(1),set(2))
+ else
+ b_r = b4_r(i,set(2),set(1))
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ b_r = b5_r(i,1)
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ !
+ if (i == k) then
+ !
+ b_r = 0._ki
+ !
+ else
+ !
+ b_r = b4_r(i,1,k)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ b_r = b4_r(i,1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end select
+ !
+ end function b_r
+ !
+ function b_c(i,b_pin)
+ !
+ integer, intent (in) :: i
+ integer, intent (in) :: b_pin
+ complex(ki) :: b_c
+ !
+ integer :: k
+ integer, dimension (2) :: set
+ integer :: dim_set
+ !
+ ! dim_set is lower or equal 2
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ set = reshape(unpackb(b_pin,dim_set),(/2/),(/0/))
+ end if
+ end if
+ !
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ b_c = b6_c(i)
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ !
+ if (i == k) then
+ !
+ b_c = czero
+ !
+ else
+ !
+ b_c = b5_c(i,k)
+ !
+ end if
+ !
+ else if (dim_set == 2) then
+ if ((set(1) == i) .or. (set(2) == i)) then
+ b_c = czero
+ elseif (set(1) < set(2)) then
+ b_c = b4_c(i,set(1),set(2))
+ else
+ b_c = b4_c(i,set(2),set(1))
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ b_c = b5_c(i,1)
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ !
+ if (i == k) then
+ !
+ b_c = czero
+ !
+ else
+ !
+ b_c = b4_c(i,1,k)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ b_c = b4_c(i,1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function b'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end select
+ !
+ end function b_c
+ !
+ !****f* src/kinematic/inversion/sumb
+ ! NAME
+ !
+ ! Function sumb
+ !
+ ! USAGE
+ !
+ ! complex = sumb(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the B coefficient whatever the S matrix dimension (<=6)
+ !
+ ! INPUTS
+ !
+ ! * set -- an integer array of rank 1, the set of pinch propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! Warning: Now a complex (type ki) is returned! [TK Sep10]
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function sumb(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ complex(ki) :: sumb
+ !
+ if (ior(s_mat_p%b_cmplx,b_pin) .eq. b_pin) then
+ !
+ sumb = cmplx(sumb_r(b_pin),0._ki,ki)
+ !
+ else
+ !
+ sumb = sumb_c(b_pin)
+ !
+ end if
+ !
+ end function sumb
+ !
+ function sumb_r(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ real(ki) :: sumb_r
+ !
+ integer :: k
+ integer, dimension (2) :: set
+ integer :: dim_set
+ !
+ ! dim_set is maximal of size 2
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ set = reshape(unpackb(b_pin,dim_set),(/2/),(/0/))
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ sumb_r = sumb6_r
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ sumb_r = sumb5_r(k)
+ !
+ else if (dim_set == 2) then
+ !
+ if (set(1) .lt. set(2)) then
+ sumb_r = sumb4_r(set(1),set(2))
+ else
+ sumb_r = sumb4_r(set(2),set(1))
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ sumb_r = sumb5_r(1)
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ sumb_r = sumb4_r(1,k)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ sumb_r = sumb4_r(1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end select
+ !
+ end function sumb_r
+ !
+ function sumb_c(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ complex(ki) :: sumb_c
+ !
+ integer :: k
+ integer, dimension (2) :: set
+ integer :: dim_set
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set = (/0,0/)
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ set = reshape(unpackb(b_pin,dim_set),(/2/),(/0/))
+ else
+ set = (/0,0/)
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ sumb_c = sumb6_c
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ sumb_c = sumb5_c(k)
+ !
+ else if (dim_set == 2) then
+ !
+ if (set(1) .lt. set(2)) then
+ sumb_c = sumb4_c(set(1),set(2))
+ else
+ sumb_c = sumb4_c(set(2),set(1))
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ sumb_c = sumb5_c(1)
+ !
+ else if (dim_set == 1) then
+ !
+ k = set(1)
+ sumb_c = sumb4_c(1,k)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ sumb_c = sumb4_c(1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function sumb'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ end function sumb_c
+ !
+ !****f* src/kinematic/inversion/norma_sumb
+ ! NAME
+ !
+ ! Function norma_sumb
+ !
+ ! USAGE
+ !
+ ! complex = norma_sumb(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the B coefficient whatever the S matrix dimension (<=6)
+ ! divided by the greatest (in absolute value) element of the S matrix
+ !
+ ! INPUTS
+ !
+ ! * set -- an integer array of rank 1, the set of pinch propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! Warning: Now a complex (type ki) is returned! [TK Sep10]
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function norma_sumb(b_pin)
+ !
+ integer, intent(in) :: b_pin
+ complex(ki) :: norma_sumb
+ !
+ if (ior(s_mat_p%b_cmplx,b_pin) .eq. b_pin) then
+ !
+ norma_sumb = cmplx(norma_sumb_r(b_pin),0._ki,ki)
+ !
+ else
+ !
+ norma_sumb = norma_sumb_c(b_pin)
+ !
+ end if
+ !
+ end function norma_sumb
+ !
+ function norma_sumb_r(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ real(ki) :: norma_sumb_r
+ !
+ integer :: k
+ integer, dimension (2) :: set
+ integer :: dim_set
+ !
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set = 0
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ set = reshape(unpackb(b_pin,dim_set),(/2/),(/0/))
+ else
+ set = 0
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 2) then
+ if (set(1).lt.set(2)) then
+ norma_sumb_r = norma_sumb4_r(set(1),set(2))
+ else
+ norma_sumb_r = norma_sumb4_r(set(2),set(1))
+ end if
+ !
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 1) then
+ !
+ k = set(1)
+ norma_sumb_r = norma_sumb4_r(1,k)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ norma_sumb_r = norma_sumb4_r(1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ end function norma_sumb_r
+ !
+ function norma_sumb_c(b_pin)
+ !
+ integer, intent (in) :: b_pin
+ complex(ki) :: norma_sumb_c
+ !
+ integer :: k
+ integer, dimension (2) :: set
+ integer :: dim_set
+ !
+ if (b_pin < 256) then
+ dim_set = bit_count(b_pin)
+ if (dim_set /= 0) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set = (/0,0/)
+ end if
+ else
+ dim_set = countb(b_pin)
+ if (dim_set /= 0) then
+ set = reshape(unpackb(b_pin,dim_set),(/2/),(/0/))
+ else
+ set = (/0,0/)
+ end if
+ end if
+ !
+ select case(dim_s)
+ !
+ case(6) ! case where we start with a 6-point amplitude
+ !
+ if (dim_set == 2) then
+ if (set(1).lt.set(2)) then
+ norma_sumb_c = norma_sumb4_c(set(1),set(2))
+ else
+ norma_sumb_c = norma_sumb4_c(set(2),set(1))
+ end if
+ !
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb, for 6-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case(5) ! case where we start with a 5-point amplitude
+ !
+ if (dim_set == 1) then
+ !
+ k = set(1)
+ norma_sumb_c = norma_sumb4_c(1,k)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb, for 5-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case(4) ! case where we start with a 4-point amplitude
+ !
+ if (dim_set == 0) then
+ !
+ norma_sumb_c = norma_sumb4_c(1,1)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb, for 4-point'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the array set has not the right dimension: %d0'
+ tab_erreur_par(2)%arg_int = dim_set
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function norma_sumb'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the dimension of the S matrix is not&
+ & correct %d0'
+ tab_erreur_par(2)%arg_int = dim_s
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ end function norma_sumb_c
+ !
+ !
+ !****f* src/kinematic/matrice_s/exitgolem95
+ ! NAME
+ !
+ ! Subroutine exitgolem95
+ !
+ ! USAGE
+ !
+ ! call exitgolem95()
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine should be called at the end of the form factor calculation.
+ ! It frees all memory previously allocated, it clears the cache and nullifies pointers.
+ !
+ ! INPUTS
+ !
+ ! SIDE EFFECTS
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ subroutine exitgolem95()
+ !
+ rmass_or_cmass_par = cmass
+ !
+ nullify(s_mat)
+ !
+ call deallocation_s()
+ !
+ call clear_cache()
+ !
+ end subroutine exitgolem95
+ !
+end module matrice_s
Index: 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.dep (revision 119)
@@ -0,0 +1,4 @@
+# Module dependencies
+matrice_s.o: inverse_matrice.o
+matrice_s.lo: inverse_matrice.lo
+matrice_s.obj: inverse_matrice.obj
Index: 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/kinematic/Makefile.am (revision 119)
@@ -0,0 +1,11 @@
+noinst_LTLIBRARIES=libgolem95_kinematics.la
+
+AM_FCFLAGS=-I$(top_builddir)/src/module
+
+libgolem95_kinematics_la_SOURCES= inverse_matrice.f90 matrice_s.f90
+libgolem95_kinematics_la_FCFLAGS=$(AM_FCFLAGS)
+
+nodist_pkginclude_HEADERS= matrice_s.mod inverse_matrice.mod
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/module/kronecker.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/kronecker.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/kronecker.f90 (revision 119)
@@ -0,0 +1,135 @@
+!
+!****h* src/module/kronecker
+! NAME
+!
+! Module kronecker
+!
+! USAGE
+!
+! use kronecker
+!
+! DESCRIPTION
+!
+! This module contains two functions delta and deltab which correspond
+! respectively to the Kronecker symbol \delta_{ij}
+! and 1-\delta_{ij}. These two functions have two integer arguments and
+! return an integer
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * delta -- the Kronecker symbol
+! * deltab -- 1-delta
+!
+! USES
+!
+! No uses
+!
+!*****
+module kronecker
+ !
+ implicit none
+ !
+ contains
+ !
+ !****f* src/module/kronecker/delta
+ ! NAME
+ !
+ ! Function delta
+ !
+ ! USAGE
+ !
+ ! integer = delta(i,j)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the Kronecker symbol \delta_{ij}
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer
+ ! * j -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an integer 0 or 1
+ !
+ ! EXAMPLE
+ !
+ ! k = delta(2,3) --> k = 0
+ ! k = delta(3,3) --> k = 1
+ !
+ !*****
+ function delta(i,j)
+ !
+ integer, intent (in) :: i
+ integer, intent (in) :: j
+ integer :: delta
+ !
+ if (i == j) then
+ !
+ delta = 1
+ !
+ else
+ !
+ delta = 0
+ !
+ end if
+ !
+ end function delta
+ !
+ !****f* src/module/kronecker/deltab
+ ! NAME
+ !
+ ! Function deltab
+ !
+ ! USAGE
+ !
+ ! integer = deltab(i,j)
+ !
+ ! DESCRIPTION
+ !
+ ! This is one minus the Kronecker symbol, 1-\delta_{ij}
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer
+ ! * j -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an integer 0 or 1
+ !
+ ! EXAMPLE
+ !
+ ! k = deltab(2,3) --> k = 1
+ ! k = deltab(3,3) --> k = 0
+ !
+ !*****
+ function deltab(i,j)
+ !
+ integer, intent (in) :: i
+ integer, intent (in) :: j
+ integer :: deltab
+ !
+ if (i == j) then
+ !
+ deltab = 0
+ !
+ else
+ !
+ deltab = 1
+ !
+ end if
+ !
+ end function deltab
+ !
+end module kronecker
Index: 95/branches/golem95_without_olo_cmake/src/module/precision_golem.f90.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/precision_golem.f90.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/precision_golem.f90.in (revision 119)
@@ -0,0 +1,37 @@
+!
+!****h* src/module/precision_golem
+! NAME
+!
+! Module precision_golem
+!
+! USAGE
+!
+! use precision_golem
+!
+! DESCRIPTION
+!
+! This module defines the parameter ki which gives the representation
+! of the real and complex numbers in golem
+!
+! OUTPUT
+!
+! The integer parameter ki
+! The integer parameter ki_avh, which is the real kind used in avh_olo
+! The integer parameter ki_lt, which is the real kind used in LoopTools
+!
+! USES
+!
+! No uses
+!
+!*****
+module precision_golem
+ use avh_olo_kinds, only: ki_avh => kindr2
+ implicit none
+ private
+ !
+ integer, parameter, public :: ki=@fortran_real_kind@
+@case_with_lt@integer, parameter, public :: ki_lt=@lt_real_kind@
+
+ public :: ki_avh
+end module precision_golem
+
Index: 95/branches/golem95_without_olo_cmake/src/module/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/Makefile.in (revision 119)
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in $(srcdir)/precision_golem.f90.in
+subdir = src/module
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = precision_golem.f90
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_module_la_LIBADD =
+am_libgolem95_module_la_OBJECTS = precision_golem.lo tri.lo array.lo \
+ parametre.lo constante.lo s_matrix_type.lo equal.lo \
+ multiply_div.lo sortie_erreur.lo cache.lo form_factor_type.lo \
+ kronecker.lo z_log.lo spinor.lo translate.lo zdilog.lo
+libgolem95_module_la_OBJECTS = $(am_libgolem95_module_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_module_la_SOURCES)
+DIST_SOURCES = $(libgolem95_module_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_module.la
+libgolem95_module_la_SOURCES = precision_golem.f90 \
+ tri.f90 array.f90 parametre.f90 constante.f90 \
+ s_matrix_type.f90 equal.f90 multiply_div.f90 \
+ sortie_erreur.f90 cache.f90 \
+ form_factor_type.f90 kronecker.f90 z_log.f90\
+ spinor.f90 translate.f90 zdilog.f90
+
+nodist_pkginclude_HEADERS = precision_golem.mod \
+ tri_croissant.mod array.mod \
+ cache.mod constante.mod s_matrix_type.mod dilogarithme.mod \
+ equal.mod form_factor_type.mod kronecker.mod logarithme.mod \
+ multiply_div.mod parametre.mod \
+ sortie_erreur.mod spinor.mod translate.mod
+
+AM_FCFLAGS = \
+ -I$(top_builddir)/avh_olo-2.2.1
+
+CLEANFILES = $(nodist_pkginclude_HEADERS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/module/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/module/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+precision_golem.f90: $(top_builddir)/config.status $(srcdir)/precision_golem.f90.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_module.la: $(libgolem95_module_la_OBJECTS) $(libgolem95_module_la_DEPENDENCIES)
+ $(FCLINK) $(libgolem95_module_la_OBJECTS) $(libgolem95_module_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+cache.o: sortie_erreur.o
+cache.lo: sortie_erreur.lo
+cache.obj: sortie_erreur.obj
+equal.o: constante.o parametre.o sortie_erreur.o
+equal.lo: constante.lo parametre.lo sortie_erreur.lo
+equal.obj: constante.obj parametre.obj sortie_erreur.obj
+form_factor_type.o: constante.o
+form_factor_type.lo: constante.lo
+form_factor_type.obj: constante.obj
+s_matrix_type.o: constante.o equal.o sortie_erreur.o
+s_matrix_type.lo: constante.lo equal.lo sortie_erreur.lo
+s_matrix_type.obj: constante.obj equal.obj sortie_erreur.obj
+sortie_erreur.o: array.o parametre.o
+sortie_erreur.lo: array.lo parametre.lo
+sortie_erreur.obj: array.obj parametre.obj
+spinor.o: constante.o
+spinor.lo: constante.lo
+spinor.obj: constante.obj
+translate.o: sortie_erreur.o
+translate.lo: sortie_erreur.lo
+translate.obj: sortie_erreur.obj
+z_log.o: constante.o equal.o sortie_erreur.o
+z_log.lo: constante.lo equal.lo sortie_erreur.lo
+z_log.obj: constante.obj equal.obj sortie_erreur.obj
+zdilog.o: constante.o equal.o sortie_erreur.o z_log.o
+zdilog.lo: constante.lo equal.lo sortie_erreur.lo z_log.lo
+zdilog.obj: constante.obj equal.obj sortie_erreur.obj z_log.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/module/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/Makefile.dep (revision 119)
@@ -0,0 +1,28 @@
+# Module dependencies
+cache.o: sortie_erreur.o
+cache.lo: sortie_erreur.lo
+cache.obj: sortie_erreur.obj
+equal.o: constante.o parametre.o sortie_erreur.o
+equal.lo: constante.lo parametre.lo sortie_erreur.lo
+equal.obj: constante.obj parametre.obj sortie_erreur.obj
+form_factor_type.o: constante.o
+form_factor_type.lo: constante.lo
+form_factor_type.obj: constante.obj
+s_matrix_type.o: constante.o equal.o sortie_erreur.o
+s_matrix_type.lo: constante.lo equal.lo sortie_erreur.lo
+s_matrix_type.obj: constante.obj equal.obj sortie_erreur.obj
+sortie_erreur.o: array.o parametre.o
+sortie_erreur.lo: array.lo parametre.lo
+sortie_erreur.obj: array.obj parametre.obj
+spinor.o: constante.o
+spinor.lo: constante.lo
+spinor.obj: constante.obj
+translate.o: sortie_erreur.o
+translate.lo: sortie_erreur.lo
+translate.obj: sortie_erreur.obj
+z_log.o: constante.o equal.o sortie_erreur.o
+z_log.lo: constante.lo equal.lo sortie_erreur.lo
+z_log.obj: constante.obj equal.obj sortie_erreur.obj
+zdilog.o: constante.o equal.o sortie_erreur.o z_log.o
+zdilog.lo: constante.lo equal.lo sortie_erreur.lo z_log.lo
+zdilog.obj: constante.obj equal.obj sortie_erreur.obj z_log.obj
Index: 95/branches/golem95_without_olo_cmake/src/module/s_matrix_type.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/s_matrix_type.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/s_matrix_type.f90 (revision 119)
@@ -0,0 +1,298 @@
+!
+!****h* src/module/s_matrix_type
+! NAME
+!
+! Module s_matrix_type
+!
+! USAGE
+!
+! use s_matrix_type
+!
+! DESCRIPTION
+!
+! This module contains a type definition for the kinematic s_matrix,
+! intended to mimic a run-time polymorphism.
+!
+! OUTPUT
+!
+! This module exports the derived type:
+! * s_matrix_poly
+!
+! One function:
+! * assign_s_matrix -- associates the pointers in the s_matrix to a given real or complex matrix
+!
+! Subroutines:
+! * nullify_s_matrix -- nullifies the pointers
+! * set_s_matrix_bits -- sets an integer which describes the positions of complex masses in the s matrix.
+! sets an integer which describes the positions of zero mass entries.
+! * fill_s_matrix -- fills the real array associated with a complex array.
+!
+! USES
+!
+! * precision_golem (src/module/preci_double.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * equal (src/module/equal.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module s_matrix_type
+ !
+ use precision_golem, only: ki
+ use sortie_erreur
+ use equal
+ use constante, only : zero
+ !
+ implicit none
+ !
+ !
+ !****t* src/module/s_matrix_type/s_matrix_poly
+ ! NAME
+ ! s_matrix_poly
+ !
+ ! SYNOPSIS
+ ! type s_matrix_poly
+ !
+ ! SOURCE
+ type s_matrix_poly
+ !
+ real(ki), dimension(:,:), pointer :: pt_real
+ complex(ki), dimension(:,:), pointer :: pt_cmplx
+ integer :: b_cmplx, b_zero
+ !
+ end type s_matrix_poly
+ !
+ ! NOTES
+ ! * pt_real points to a real array (s_mat_r) if associated.
+ ! * pt_cmplx points to a complex array (s_mat_c) if associated
+ ! * b_cmplx is a bit-integer encoding the positions of
+ ! complex mass entries in the S matrix.
+ ! * b_zero is a bit-integer encoding the positions of
+ ! vanishing masses.
+ !
+ !****
+ !
+ interface assign_s_matrix
+ !
+ module procedure assign_s_matrix_r
+ module procedure assign_s_matrix_c
+ !
+ end interface
+ !
+ !
+ private
+ !
+ !
+ public :: assign_s_matrix, set_s_matrix_bits, nullify_s_matrix, fill_s_matrix,s_matrix_poly
+ !
+ !
+contains
+ !
+ !
+ !
+ !****f* src/module/s_matrix_type/assign_s_matrix
+ ! NAME
+ !
+ ! assign_s_matrix
+ !
+ ! USAGE
+ !
+ ! assign_s_matrix(s_mat_r)
+ ! assign_s_matrix(s_mat_c,s_mat_r)
+ !
+ ! DESCRIPTION
+ !
+ ! This function associates the global (type s_matrix_poly) s_mat_p
+ ! with the given real or complex input matrix. In the case a complex
+ ! matrix is given, a real matrix, which will contain the real part of the
+ ! complex matrix, has also be given as an argument.
+ !
+ ! INPUTS
+ !
+ ! A real and a complex matrix. Or just a real matrix.
+ !
+ !
+ ! RETURN VALUE
+ !
+ ! a type (s_matrix_poly) is returned.
+ !
+ !
+ !*****
+ !
+ function assign_s_matrix_r(s_mat_r) result (s_mat_p)
+ real(ki), dimension(:,:), target, intent(in) :: s_mat_r
+ type(s_matrix_poly) :: s_mat_p
+ !
+ s_mat_p%pt_real => s_mat_r
+ nullify(s_mat_p%pt_cmplx)
+ s_mat_p%b_cmplx = 0
+ s_mat_p%b_zero = -1
+ !
+ end function assign_s_matrix_r
+ !
+ !
+ function assign_s_matrix_c(s_mat_c, s_mat_r) result (s_mat_p)
+ complex(ki), dimension(:,:), target, intent(in) :: s_mat_c
+ real(ki), dimension(:,:), target, intent(in) :: s_mat_r
+ type(s_matrix_poly) :: s_mat_p
+ !
+ s_mat_p%pt_cmplx => s_mat_c
+ s_mat_p%pt_real => s_mat_r
+ s_mat_p%b_cmplx = -1
+ s_mat_p%b_zero = -1
+ !
+ end function assign_s_matrix_c
+ !
+ !****f* src/module/s_matrix_type/fill_s_matrix
+ ! NAME
+ !
+ ! Subroutine fill_s_matrix
+ !
+ ! USAGE
+ !
+ ! call fill_s_matrix(s_mat_p)
+ !
+ ! DESCRIPTION
+ !
+ ! This procedure fills the associated real array with the
+ ! real entries of a complex s_matrix if the corresponding
+ ! pointer to the complex array is associated.
+ !
+ ! INPUTS
+ !
+ ! * a type (s_matrix_poly) object
+ !
+ ! RETURN VALUE
+ !
+ ! none
+ !
+ !
+ !*****
+ !
+ subroutine fill_s_matrix(s_mat_p)
+ type(s_matrix_poly) :: s_mat_p
+ !
+ if (associated(s_mat_p%pt_cmplx) ) then
+ !
+ s_mat_p%pt_real = real(s_mat_p%pt_cmplx,ki)
+ !
+ end if
+ !
+ end subroutine fill_s_matrix
+ !
+ !****f* src/module/s_matrix_type/set_s_matrix_bits
+ ! NAME
+ !
+ ! Subroutine set_s_matrix_bits
+ !
+ ! USAGE
+ !
+ ! call set_s_matrix_bits(s_mat_p,set_ref)
+ !
+ ! DESCRIPTION
+ !
+ ! This procedure checks the diagonal of the given matrix for complex
+ ! entries with non-vanishing imaginary part and vanishing masses as well.
+ ! The results are encoded in bit-integers included in the derived type s_mat_p.
+ !
+ ! INPUTS
+ !
+ ! * a type (s_matrix_poly) object
+ ! * a reference set of numbers associated with the diagonal entries.
+ ! (typically an array (/1,2,...,n/) ).
+ !
+ ! RETURN VALUE
+ !
+ ! none
+ !
+ !
+ !*****
+ !
+ subroutine set_s_matrix_bits(s_mat_poly,set_ref)
+ type(s_matrix_poly), intent (inout) :: s_mat_poly
+ integer, intent(in), dimension(:) :: set_ref
+ integer, dimension(size(set_ref)) :: position_c, position_r
+ complex(ki), dimension(size(set_ref)) :: diagonal
+ real(ki), dimension(size(set_ref)) :: diag_imag, diag_real
+ integer :: i,n
+ !
+ n = size(set_ref)
+ position_c = 0
+ position_r = 0
+ !
+ if (associated(s_mat_poly%pt_cmplx)) then
+ !
+ do i = 1, n
+ diagonal(i) = s_mat_poly%pt_cmplx(i,i)
+ end do
+ !
+ diag_imag = aimag(diagonal)
+ !
+ if (minval(diag_imag) .lt. 0._ki) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine set_s_matrix_bits:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The S matrix contains masses with positive imaginary part!'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'This might lead to wrong results!'
+ call catch_exception(0)
+ stop
+ !
+ end if
+ !
+ where (diag_imag .gt. 2.0_ki*epsilon(1.0_ki)) position_c = set_ref
+ ! twice epsilon to give consistency with for rounding-error size imaginary parts
+ where (position_c .ne. 0) position_c = ibset(0,pos=position_c)
+ s_mat_poly%b_cmplx = sum (position_c)
+ end if
+ !
+ do i = 1, n
+ diag_real(i) = s_mat_poly%pt_real(i,i)
+ end do
+ !
+ where ( (position_c == 0) .and. (equal_real(diag_real,zero) ) ) position_r = set_ref
+ !
+ where (position_r .ne. 0) position_r = ibset(0,pos=position_r)
+ s_mat_poly%b_zero = sum (position_r)
+ !
+ end subroutine set_s_matrix_bits
+ !
+ !
+ !****f* src/module/s_matrix_type/nullify_s_matrix
+ ! NAME
+ !
+ ! Subroutine nullify_s_matrix
+ !
+ ! USAGE
+ !
+ ! nullify_s_matrix(s_mat_p)
+ !
+ ! DESCRIPTION
+ !
+ ! This procedure nullifies the pointers in the input object.
+ !
+ ! INPUTS
+ !
+ ! * type (s_matrix_poly) object
+ !
+ ! RETURN VALUE
+ !
+ ! none
+ !
+ !
+ !*****
+ !
+ subroutine nullify_s_matrix(s_mat_p)
+ type(s_matrix_poly) :: s_mat_p
+ !
+ if (associated(s_mat_p%pt_real)) then
+ nullify(s_mat_p%pt_real)
+ end if
+ !
+ if (associated(s_mat_p%pt_cmplx)) then
+ nullify(s_mat_p%pt_cmplx)
+ end if
+ !
+ end subroutine nullify_s_matrix
+ !
+end module s_matrix_type
Index: 95/branches/golem95_without_olo_cmake/src/module/zdilog.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/zdilog.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/zdilog.f90 (revision 119)
@@ -0,0 +1,683 @@
+!****h* src/module/dilogarithme
+! NAME
+!
+! Module dilogarithme
+!
+! USAGE
+!
+! use dilogarithme
+!
+! DESCRIPTION
+!
+! This module provides two public routines to compute the dilogarithm with
+! real and complex argument
+!
+! OUTPUT
+!
+! It exports:
+! * zdilog -- a function which returns the dilogarithm with real (or complex) argument
+! * cdilog -- a function which returns the dilogarithm with complex argument
+!
+! NOTES
+!
+! zdilog can be called with complex argument and parameter s. If the imaginary part vanishes,
+! zdilog with real argument is called. Here, s becomes important.
+!
+! USES
+!
+! * precision_golem (src/module/precision.f90)
+! * constante (src/module/constante.f90)
+! * logarithme (src/module/z_log.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * equal (src/module/equal.f90)
+!
+!*****
+module dilogarithme
+ !
+ use precision_golem
+ use constante, only : un,pi,pi6,pi12,zero,czero,cun
+ use logarithme, only : z_log,z_log2
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use equal
+ !
+ implicit none
+ !
+ private
+ real(ki), parameter :: zeta2 = 1.6449340668482264364724151666460252_ki
+ ! bern_glob contient B_k(0)/(k+1)!
+ real(ki), dimension (0:20), parameter :: bern_glob = (/ &
+ 1.00000000000000000000000000000000_ki,&
+ -0.25000000000000000000000000000000_ki,&
+ 0.02777777777777777777777777777778_ki,&
+ -0.00027777777777777777777777777778_ki,&
+ 0.00000472411186696900982615268330_ki,&
+ -0.00000009185773074661963550852440_ki,&
+ 0.00000000189788699889709990720092_ki,&
+ -0.00000000004064761645144225526806_ki,&
+ 0.00000000000089216910204564525552_ki,&
+ -0.00000000000001993929586072107569_ki,&
+ 0.00000000000000045189800296199182_ki,&
+ -0.00000000000000001035651761218125_ki,&
+ 0.00000000000000000023952186210262_ki,&
+ -0.00000000000000000000558178587433_ki,&
+ 0.00000000000000000000013091507554_ki,&
+ -0.00000000000000000000000308741980_ki,&
+ 0.00000000000000000000000007315976_ki,&
+ -0.00000000000000000000000000174085_ki,&
+ 0.00000000000000000000000000004158_ki,&
+ -0.00000000000000000000000000000100_ki,&
+ 0.00000000000000000000000000000002_ki&
+ /)
+ integer :: imax_glob = ki+ki/4 ! determine how many elements of the array
+ ! bern_glob have to be taken as a function of ki
+
+ interface zdilog
+ !
+ module procedure zdilog_r
+ module procedure zdilog_c
+ !
+ end interface
+ !
+ public :: zdilog, cdilog
+ !
+ contains
+ !
+ !****f* src/module/dilogarithme/zdilog
+ ! NAME
+ !
+ ! Function zdilog
+ !
+ ! USAGE
+ !
+ ! complex = zdilog(a,s)
+ !
+ ! DESCRIPTION
+ !
+ ! This function returns the dilogarithm of a complex z, this complex number
+ ! has the specific form: z = a + i lambda s where lambda << 1.
+ ! a can now be complex. If the imaginary part vanishes, the sign of s is relevant.
+ !
+ ! INPUTS
+ !
+ ! * a -- a real/complex (type ki), the argument
+ ! * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function zdilog_r(a,s)
+ !
+ real(ki), intent(in) :: a,s
+ complex(ki) :: zdilog_r
+ !
+ if (abs(s) == un) then
+ !
+ if (a <= un) then
+ !
+ zdilog_r = dilog(a)
+ !
+ else
+ !
+ zdilog_r = -dilog(1._ki/a)-pi6-0.5_ki*z_log2(-a,-s)
+ !
+ endif
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in zdilog :'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the second argument must be 1. or -1. %f0'
+ tab_erreur_par(2)%arg_real = s
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ endif
+ !
+ end function zdilog_r
+ !
+ function zdilog_c(a,s)
+ !
+ complex(ki), intent(in) :: a
+ real(ki), intent(in) :: s
+ complex(ki) :: zdilog_c
+ !
+ if (equal_real(aimag(a),zero) ) then
+ !
+ zdilog_c = zdilog_r(real(a,ki),s)
+ !
+ else
+ !
+ zdilog_c = cdilog(a)
+ !
+ end if
+ !
+ end function zdilog_c
+ !****if* src/module/dilogarithme/dilog
+ ! NAME
+ !
+ ! Function dilog
+ !
+ ! USAGE
+ !
+ ! real = dilog(x)
+ !
+ ! DESCRIPTION
+ !
+ ! This function return the dilogarithm of a real x for x < 1
+ !
+ ! INPUTS
+ !
+ ! * x -- a real (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a real (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function dilog(x)
+ !
+ real(ki), intent (in) :: x
+ real(ki) :: dilog
+ !
+ real(ki), parameter :: un_demi = 0.5_ki
+ real(ki) :: arg, temp_ln, add_on, s, temp, ln_arg
+ integer :: i
+ !
+ if ( equal_real(x,zero) ) then
+ !
+ dilog = zero
+ !
+ else if ( equal_real(x,un) ) then
+ !
+ dilog = pi6
+ !
+ else if ( equal_real(x,-un) ) then
+ !
+ dilog = -pi12
+ !
+ else if ( equal_real(x,un_demi) ) then
+ !
+ dilog = pi12 - 0.5_ki*log(2._ki)**2
+ !
+ else
+ !
+ if (x < -un) then
+ !
+ arg = 1._ki/(1._ki-x)
+ s = un
+ temp_ln = log(1._ki-x)
+ add_on = -pi6 + temp_ln*( 0.5_ki*temp_ln - log(-x) )
+ !
+ else if ( x < zero) then
+ !
+ arg = x/(x - 1._ki)
+ s = -un
+ add_on = -0.5_ki*log(1._ki-x)*log(1._ki-x)
+ !
+ else if ( x < un_demi) then
+ !
+ arg = x
+ s = un
+ add_on = 0._ki
+ !
+ else if ( x < un ) then
+ !
+ arg = 1._ki-x
+ s = -un
+ add_on = pi6 - log(x)*log(1._ki-x)
+ !
+ else
+ !
+
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in dilog :'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'dilog(x) called for x >= 1: x=%f0'
+ tab_erreur_par(2)%arg_real = x
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ln_arg = -log(1._ki-arg)
+ temp = 1._ki
+ dilog = bern_glob(0) + bern_glob(1)*ln_arg
+ !
+ do i = 2,imax_glob
+ !
+ temp = temp*ln_arg*ln_arg
+ dilog = dilog + bern_glob(i)*temp
+ !
+ end do
+ !
+ dilog = dilog*ln_arg
+ dilog = s*dilog + add_on
+ !
+ end if
+ !
+ end function dilog
+ !
+ !****f* src/module/dilogarithme/cdilog
+ ! NAME
+ !
+ ! Function cdilog
+ !
+ ! USAGE
+ !
+ ! complex = cdilog(z)
+ !
+ ! DESCRIPTION
+ !
+ ! This function return the dilogarithm of a complex z, taken from T. Binoth
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ ! adapted from Binoth's program
+ ! modified 10.5.2010: set Im part to zero if < delta to avoid
+ ! errors at z=(1._ki,delta)
+ function cdilog(z)
+ !
+ complex(ki), intent (in) :: z
+ complex(ki) :: cdilog
+ real(ki) :: delta
+ !
+ delta=10._ki*epsilon(1._ki)
+ !
+ if ( (real(z)<1._ki+delta).and.(real(z)>1._ki-delta).and.(abs(aimag(z))< 0.000000045 ) ) then
+ cdilog = zeta2
+ !
+ else if (z == czero) then
+ !
+ cdilog = czero
+ !
+ else if (z == cun) then
+ !
+ cdilog = zeta2
+ !
+ else if(abs(z) <= 0.5_ki) then
+ !
+ cdilog = cdilog6(z)
+ !
+ else if(real(z) < 0._ki) then
+ !
+ cdilog = cdilog2(z)
+ !
+ ! > 0 changed to >=0 Feb 14, 2011
+ else if(real(z) >= 0._ki) then
+ !
+ cdilog = cdilog3(z)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in function cdilog :'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the argument z is not in the good range : %z0'
+ tab_erreur_par(2)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ end function cdilog
+ !
+ !****if* src/module/dilogarithme/cdilog2
+ ! NAME
+ !
+ ! Function cdilog2
+ !
+ ! USAGE
+ !
+ ! complex = cdilog2(z)
+ !
+ ! DESCRIPTION
+ !
+ ! Transform the dilog function with Re(z) < 0 to a dilog with Re(z) >= 0
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function cdilog2(z)
+ !
+ complex(ki), intent(in) :: z
+ complex(ki) :: cdilog2
+ !
+ if(real(z) >= 0._ki) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'spence function error in cdilog2 at z = %z0'
+ tab_erreur_par(1)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ else !if(real(z) < 0._ki) then
+ !
+ cdilog2 = - cdilog3(1._ki - z) &
+ - (log(z))*(log(1._ki - z)) + zeta2
+ !
+ endif
+ !
+ end function cdilog2
+ !
+ !****if* src/module/dilogarithme/cdilog3
+ ! NAME
+ !
+ ! Function cdilog3
+ !
+ ! USAGE
+ !
+ ! complex = cdilog3(z)
+ !
+ ! DESCRIPTION
+ !
+ ! Transform the dilog function with Re(z) >= 0 to a dilog with Re(z)>=0 & |z|<=1
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function cdilog3(z)
+ !
+ complex(ki), intent(in) :: z
+ complex(ki) :: cdilog3
+ !
+ if(real(z) < 0._ki) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'spence function error in cdilog3 at z = %z0'
+ tab_erreur_par(1)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ else if(abs(z) <= 1._ki) then
+ !
+ cdilog3 = cdilog4(z)
+ !
+ else ! if(abs(z) > 1._ki) then
+ !
+ cdilog3 = - cdilog4(1._ki /z) &
+ - 1._ki /2._ki * (log(-z))**2 - zeta2
+ !
+ endif
+ !
+ end function cdilog3
+ !
+ !****if* src/module/dilogarithme/cdilog4
+ ! NAME
+ !
+ ! Function cdilog4
+ !
+ ! USAGE
+ !
+ ! complex = cdilog4(z)
+ !
+ ! DESCRIPTION
+ !
+ ! Separate the case |z| < 1/2 and |z| >= 1/2
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function cdilog4(z)
+ !
+ complex(ki), intent(in) :: z
+ complex(ki) :: cdilog4
+ complex(ki) :: z1, z2, z3, z4
+ !
+ if(real(z) < 0._ki) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'spence function error 1 in cdilog4 at z = %z0'
+ tab_erreur_par(1)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ else if(abs(z) > 1._ki) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'spence function error 2 in cdilog4 at z = %z0'
+ tab_erreur_par(1)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ else if(abs(z) <= 0.5_ki) then
+ !
+ cdilog4 = cdilog6(z)
+ !
+ else ! if(abs(z) > 0.5_ki) then
+ !
+ z1 = sqrt(sqrt(z))
+ z2 = sqrt(1._ki + sqrt(z))
+ z3 = sqrt(z)
+ z4 = 1._ki + sqrt(z)
+ !
+ cdilog4 = 2*( &
+ 2*( cdilog5(z1) + cdilog5(1._ki /(1._ki + z1)) &
+ + cdilog5(1._ki /z2) + cdilog5(1._ki /(1._ki + 1._ki/z2)) &
+ - (log(1._ki + z1))*(log(z1)) &
+ - (log(1._ki + 1._ki /z2))*(log(1._ki /z2)) &
+ + 1._ki /2._ki * (log(1._ki + z1))**2 &
+ + 1._ki /2._ki * (log(1._ki + 1._ki /z2))**2 &
+ - 2*zeta2 &
+ ) &
+ - (log(z4))*(log(z3)) &
+ + 1._ki /2._ki * (log(z4))**2 &
+ - zeta2 &
+ )
+ endif
+ !
+ end function cdilog4
+ !
+ !****if* src/module/dilogarithme/cdilog5
+ ! NAME
+ !
+ ! Function cdilog5
+ !
+ ! USAGE
+ !
+ ! complex = cdilog5(z)
+ !
+ ! DESCRIPTION
+ !
+ ! compute the case |z| >= 1/2 and arg(z) <= Pi/8
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function cdilog5(z)
+ !
+ complex(ki), intent(in) :: z
+ complex(ki) :: cdilog5
+ !
+ if(abs(z) > (1._ki + 1.e-3_ki)) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'spence function error in cdilog5 at z = %z0'
+ tab_erreur_par(1)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ else if(abs(z) <= 0.5_ki) then
+ !
+ ! this had been a place giving an error, as we didn't expect it ever to be entered. However, for z near to (1,0), but just outside the range we give (very rare), we can still enter here. Neverthelesss, the function is well-behaved here so this shouldn't cause any trouble.
+ cdilog5 = cdilog6(z)
+
+ !
+ else if(abs(aimag(log(z))) > pi/8._ki .and. .not.equal_real(abs(aimag(log(z))),pi/8._ki) ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'spence function error in cdilog5 at z = %z0'
+ tab_erreur_par(1)%arg_comp = z
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ else
+ !
+ cdilog5 = - cdilog6(1._ki - z) &
+ - log(z)*log(1._ki - z) + zeta2
+ !
+ end if
+ !
+ end function cdilog5
+ !
+ !****if* src/module/dilogarithme/cdilog6
+ ! NAME
+ !
+ ! Function cdilog6
+ !
+ ! USAGE
+ !
+ ! complex = cdilog6(z)
+ !
+ ! DESCRIPTION
+ !
+ ! compute the case |z| <= 1/2
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the argument of the dilogarithm
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function cdilog6(z)
+ !
+ complex(ki), intent (in) :: z
+ complex(ki) :: cdilog6
+ !
+ complex(ki) :: lnz,temp
+ integer :: i
+ !
+ lnz = -log(1._ki-z)
+ temp = 1._ki
+ cdilog6 = bern_glob(0)+bern_glob(1)*lnz
+ !
+ do i = 2,imax_glob
+ !
+ temp = temp*lnz*lnz
+ cdilog6 = cdilog6 + bern_glob(i)*temp
+ !
+ end do
+ !
+ cdilog6 = cdilog6*lnz
+ !
+ end function cdilog6
+ !
+end module dilogarithme
Index: 95/branches/golem95_without_olo_cmake/src/module/sortie_erreur.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/sortie_erreur.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/sortie_erreur.f90 (revision 119)
@@ -0,0 +1,284 @@
+!****h* src/module/sortie_erreur
+! NAME
+!
+! Module sortie_erreur
+!
+! USAGE
+!
+! use sortie_erreur
+!
+! DESCRIPTION
+!
+! This module is used to generate error exception or to print some information from
+! a function/subroutine
+!
+! OUTPUT
+!
+! This module exports:
+! * erreur -- derived type
+! * tab_erreur_par -- an array of 7 derived type erreur
+! * catch_exception -- a subroutine to perform an action depending on the level
+! * print_type -- a subroutine to print the type erreur
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+!
+!*****
+module sortie_erreur
+ !
+ use precision_golem
+ use parametre, only : if_print_info_par,if_print_warn_par,not_enough_accuracy_par
+ use array, only : unpackb
+ implicit none
+ !
+ private
+ !
+ !****t* src/module/sortie_erreur/erreur
+ ! NAME
+ !
+ ! erreur -- derived type, to print error/info
+ !
+ ! SYNOPSIS
+ !
+ ! type erreur
+ !
+ ! SOURCE
+ !
+ type erreur
+ !
+ character(len=256) :: chaine
+ logical :: a_imprimer = .false.
+ integer :: arg_int
+ real(ki) :: arg_real
+ complex(ki) :: arg_comp
+ character(len=32) :: arg_char
+ integer, dimension(2) :: arg_int_tab
+ !
+ end type erreur
+ !
+ ! NOTES
+ !
+ ! * set erreur%a_imprimer = .true. to print it
+ ! * arg_in_tab(1) : packb(tab), arg_int_tab(2) : size(tab)
+ !
+ !****
+ !
+ integer :: max_err = 7
+ !
+ ! an array of 7 derived type is reserved
+ !
+ type(erreur), dimension(7), save :: tab_erreur_par
+ character (len=132),save :: origine_info_par = "" ! the type of function which are integrated
+ real(ki),save :: num_grand_b_info_par = 0._ki ! the numerator of B
+ real(ki),save :: denom_grand_b_info_par = 0._ki ! the denominator of B
+ character (len=22),save :: origine_inv_info_par = "" ! the size of the matrix to inverse
+ !
+ public :: erreur,tab_erreur_par,catch_exception
+ public :: origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ public :: origine_inv_info_par
+ !
+ contains
+ !
+ !****f* src/module/sortie_erreur/catch_exception
+ ! NAME
+ !
+ ! Subroutine catch_exception
+ !
+ ! USAGE
+ !
+ ! call catch_exception(level)
+ !
+ ! DESCRIPTION
+ !
+ ! For the error exception
+ ! This routine prints on the unit 0 (stderr for fortran)
+ ! the array tab_erreur_par
+ !
+ ! INPUTS
+ !
+ ! * level -- a integer : 0 the program stops, 1 warning, 2 info
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! write on the unit 0 (stderr for fortran) : level=0,1
+ ! or write on the unit 12 : level=2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine catch_exception(level)
+ !
+ integer, intent(in) :: level
+ !
+ integer :: unit
+ integer :: i
+ !
+ select case(level)
+ !
+ case(0)
+ !
+ unit = 0
+ !
+ write(unit,*) '+++++++++++++++ERROR+++++++++++++++++++++++'
+ write(unit,*) 'The program stops because'
+ !
+ do i=1,max_err
+ !
+ if (tab_erreur_par(i)%a_imprimer) call print_type(unit,tab_erreur_par(i))
+ !
+ end do
+ !
+ stop
+ !
+ case(1)
+ !
+ unit = 0
+ !
+ if (if_print_warn_par) then
+ !
+ write(unit,*) '+++++++++++++++WARNING+++++++++++++++++++++++'
+ !
+ do i=1,max_err
+ !
+ if (tab_erreur_par(i)%a_imprimer) then
+ call print_type(unit,tab_erreur_par(i))
+ tab_erreur_par(i)%a_imprimer = .false.
+ end if
+ !
+ end do
+ write(unit,*) 'Type of Feynman integrals :',trim(origine_info_par)
+ write(unit,*) 'Numerator of B :',num_grand_b_info_par
+ write(unit,*) 'Denominator of B :',denom_grand_b_info_par
+ write(unit,*) 'Type of matrix :',trim(origine_inv_info_par)
+ !
+ end if
+ !
+ not_enough_accuracy_par = .true.
+ !
+ case(2)
+ !
+ if (if_print_info_par) then
+ !
+ unit = 12
+ !
+ write(unit,*) '+++++++++++++++++INFO++++++++++++++++++++++'
+ !
+ do i=1,max_err
+ !
+ if (tab_erreur_par(i)%a_imprimer) then
+ call print_type(unit,tab_erreur_par(i))
+ tab_erreur_par(i)%a_imprimer = .false.
+ end if
+ !
+ end do
+ !
+ else
+ !
+ do i=1,max_err
+ !
+ tab_erreur_par(i)%a_imprimer = .false.
+ !
+ end do
+ !
+ end if
+ !
+ case default
+ !
+ unit = 0
+ !
+ write(unit,*) 'The level argument of the routine catch_exception must be less or equal than 2'
+ write(unit,*) 'this argument is :',level
+ !
+ stop
+ !
+ end select
+ !
+ end subroutine catch_exception
+ !
+ !****if* src/module/sortie_erreur/print_type
+ ! NAME
+ !
+ ! Subroutine print_type
+ !
+ ! USAGE
+ !
+ ! call print_type(unit,type_err)
+ !
+ ! DESCRIPTION
+ !
+ ! For the error exception
+ ! This routine prints on the unit 0 (stderr for fortran)
+ ! a string of characters and an integer/real/complex/string of
+ ! characters or an array of integers/reals
+ !
+ ! INPUTS
+ !
+ ! * unit -- an integer, the unit where to print
+ ! * type_err -- type(erreur), the derived type which will printed
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! write on the unit unit
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine print_type(unit,type_err)
+ !
+ integer, intent(in) :: unit
+ type(erreur), intent(in) :: type_err
+ !
+ integer :: i
+ character(len=3), dimension(5) :: car =(/'%d0','%f0','%z0','%c0','%d1'/)
+ integer, dimension(5) :: l
+ !
+ do i=1,size(l)
+ !
+ l(i) = index(trim(type_err%chaine),car(i))
+ !
+ end do
+ !
+ if (maxval(l) == 0) then
+ !
+ write(unit,*) trim(type_err%chaine)
+ !
+ else if (l(1) /= 0) then
+ !
+ write(unit,*) type_err%chaine(1:l(1)-1),type_err%arg_int
+ !
+ else if (l(2) /= 0) then
+ !
+ write(unit,*) type_err%chaine(1:l(2)-1),type_err%arg_real
+ !
+ else if (l(3) /= 0) then
+ !
+ write(unit,*) type_err%chaine(1:l(3)-1),type_err%arg_comp
+ !
+ else if (l(4) /= 0) then
+ !
+ write(unit,*) type_err%chaine(1:l(4)-1),type_err%arg_char
+ !
+ else if (l(5) /= 0) then
+ !
+ write(unit,*) type_err%chaine(1:l(5)-1),unpackb(type_err%arg_int_tab(1),type_err%arg_int_tab(2))
+ !
+ end if
+ !
+ end subroutine print_type
+ !
+end module sortie_erreur
Index: 95/branches/golem95_without_olo_cmake/src/module/translate.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/translate.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/translate.f90 (revision 119)
@@ -0,0 +1,101 @@
+!
+!****h* src/module/translate
+! NAME
+!
+! Module translate
+!
+! USAGE
+!
+! use translate
+!
+! DESCRIPTION
+!
+! This module is used to translate an array of n (=2m) reals into an array
+! of m complexs
+!
+! OUTPUT
+!
+! It exports:
+! * to_complex -- a subroutine to translate an array of n (=2m) reals into an array
+! of m complexs
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!*****
+module translate
+ !
+ use precision_golem
+ use sortie_erreur
+ implicit none
+ !
+ private
+ public :: to_complex
+ contains
+ !
+ !****f* src/module/translate/to_complex
+ ! NAME
+ !
+ ! Subroutine to_complex
+ !
+ ! USAGE
+ !
+ ! call to_complex(t,z)
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine transforms an array of reals of rank 1 and shape 2*m
+ ! t in an array of complexs of size m z, it returns z(i) = t(i) + i_*t(i+1).
+ ! If size of t is odd, the subroutine to_complex returns an error
+ !
+ ! INPUTS
+ !
+ ! * t -- a real array (type ki) of rank 1
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * z -- a complex array (type ki) of rank 1 and shape size(t)/2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine to_complex(t,z)
+ !
+ real(ki), intent(in), dimension(:) :: t
+ complex(ki), intent(out) ,dimension(:) :: z
+ !
+ integer :: dim_t,i,j
+ !
+ dim_t = size(t)
+ !
+ if (mod(dim_t,2) == 0) then
+ !
+ do i = 1,dim_t,2
+ !
+ j = (i+1)/2
+ z(j) = cmplx(t(i),t(i+1),ki)
+ !
+ end do
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in subroutine to_complex'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The size of the first argument array is odd %d0'
+ tab_erreur_par(2)%arg_int = dim_t
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine to_complex
+ !
+end module translate
Index: 95/branches/golem95_without_olo_cmake/src/module/constante.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/constante.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/constante.f90 (revision 119)
@@ -0,0 +1,59 @@
+!****h* src/module/constante
+! NAME
+!
+! Module constante
+!
+! USAGE
+!
+! use constante
+!
+! DESCRIPTION
+!
+! This module is used to get the values of different constants
+!
+! OUTPUT
+!
+! This module exports 13 parameters
+! * pi -- a real (type ki), pi
+! * gammae -- a real (type ki), the Euler constant
+! * i_ -- a complex (type ki), the square root of -1
+! * pi3 -- a real (type ki), pi**2/3
+! * pi6 -- a real (type ki), pi**2/6
+! * pi12 -- a real (type ki), pi**2/12
+! * un -- a real (type ki), 1
+! * zero -- a real (type ki), 0
+! * czero -- a complex (type ki), (0,0)
+! * cun -- a complex (type ki), (1,0)
+! * b_null -- an integer 0
+! * s_null -- an array with shape 0
+! * nullarray -- the same as s_null !!!!!!
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+module constante
+ !
+ use precision_golem
+ implicit none
+ !
+ private :: ki
+ !
+ real(ki), parameter :: pi = 3.1415926535897932384626433832795028841&
+ &971693993751_ki
+ real(ki), parameter :: gammae = 0.577215664901532860606512090082402&
+ &4310421593359399_ki
+ real(ki), parameter :: pi3 = pi**2/3.0_ki
+ real(ki), parameter :: pi6 = pi**2/6.0_ki
+ real(ki), parameter :: pi12 = pi**2/12.0_ki
+ real(ki), parameter :: un = 1._ki
+ real(ki), parameter :: zero = 0._ki
+ complex(ki), parameter :: i_ = (0._ki,1._ki)
+ complex(ki), parameter :: czero = (0.0_ki,0.0_ki)
+ complex(ki), parameter :: cun = (1._ki,0._ki)
+ integer, parameter :: b_null = 0
+ integer, dimension(0), parameter :: s_null = 0
+ integer, dimension(0), parameter :: nullarray = 0
+ !
+end module constante
Index: 95/branches/golem95_without_olo_cmake/src/module/tri.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/tri.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/tri.f90 (revision 119)
@@ -0,0 +1,280 @@
+!
+!****h* src/module/tri_croissant
+! NAME
+!
+! Module tri_croissant
+!
+! USAGE
+!
+! use tri_croissant
+!
+! DESCRIPTION
+!
+! This module is used to sort an integer array or shift its elements by certain amount
+!
+! OUTPUT
+!
+! This module exports:
+! * tri_int -- a subroutine to sort out an integer array
+! * shift_param -- a subroutine to shift (modulo n) the elements of an integer array
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+module tri_croissant
+ !
+ use precision_golem
+ implicit none
+ !
+ private
+ !
+ !
+ public :: tri_int2, tri_int3, tri_int4, shift_param, exchange_param
+ !
+ !
+ contains
+ !
+ !****f* src/module/tri_croissant/tri_int
+ ! NAME
+ !
+ ! Subroutine tri_int
+ !
+ ! USAGE
+ !
+ ! call tri_int(t_in,t_out)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine sorts in increasing order an integer array t_int and put the
+ ! result in the integer array t_out
+ !
+ ! INPUTS
+ !
+ ! * t_int -- an integer array of rank 1, the array to sort
+ !
+ ! SIDE EFFECTS
+ !
+ ! NONE
+ !
+ ! RETURN VALUE
+ !
+ ! * t_out -- an integer array of rank 1, the sorted array
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ ! on trie par ordre croissant le tableau t_in et
+ ! on met le resultat dans t_out. On utilise les procedures
+ ! compare et exchange
+
+ pure subroutine tri_int2(t_in,t_out)
+ implicit none
+ integer, intent(in), dimension(2) :: t_in
+ integer, intent(out), dimension(2) :: t_out
+ integer, dimension(2) :: tmp
+
+ if (t_in(1) < t_in(2)) then
+ tmp(1) = t_in(1)
+ tmp(2) = t_in(2)
+ else
+ tmp(1) = t_in(2)
+ tmp(2) = t_in(1)
+ end if
+ t_out(:) = tmp(:)
+ end subroutine tri_int2
+
+ pure subroutine tri_int3(t_in,t_out)
+ implicit none
+ integer, intent(in), dimension(3) :: t_in
+ integer, intent(out), dimension(3) :: t_out
+ integer, dimension(3) :: tmp
+
+ tmp(:) = t_in(:)
+
+ if (tmp(1) > tmp(3)) then
+ if (tmp(1) < tmp(2)) then
+ t_out(:) = tmp((/3,1,2/))
+ else
+ if (tmp(2) > tmp(3)) then
+ t_out(:) = tmp((/3,2,1/))
+ else
+ t_out(:) = tmp((/2,3,1/))
+ end if
+ end if
+ else
+ if (tmp(2) < tmp(1)) then
+ t_out(:) = tmp((/2,1,3/))
+ else
+ if (tmp(2) < tmp(3)) then
+ t_out(:) = tmp((/1,2,3/))
+ else
+ t_out(:) = tmp((/1,3,2/))
+ end if
+ end if
+ end if
+ end subroutine tri_int3
+
+ subroutine tri_int4(t_in,t_out)
+ implicit none
+ !
+ integer, intent(in), dimension(4) :: t_in
+ integer, intent(out), dimension(4) :: t_out
+ !
+ integer :: j,i,alpha,beta
+ !
+
+ t_out(1) = t_in(1)
+ do i=2,4
+ alpha = t_in(i)
+
+ do j=1,i-1
+ if (alpha < t_out(j)) then
+ beta = t_out(j)
+ t_out(j) = alpha
+ alpha = beta
+ end if
+ end do
+ t_out(i) = alpha
+ end do
+ end subroutine tri_int4
+ !
+ !****f* src/module/tri_croissant/shift_param
+ ! NAME
+ !
+ ! Subroutine shift_param
+ !
+ ! USAGE
+ !
+ ! call shift_param(z_param_ini,shift,modd,z_param_out)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine shifts the array z_param_ini of Feynman parameters
+ ! the shift is done as following:
+ ! z --> z+shift if z+shift <= modd
+ ! else mod(z+shift-1,modd)+1 if z+shift > modd
+ ! the result is put into the array z_param_out
+ !
+ ! INPUTS
+ !
+ ! * z_param_ini -- an integer array of rank 1, the array to shift
+ ! * shift -- an integer, the value of the shift
+ ! * modd -- an integer, the shift is made modulo modd
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * z_param_out -- an integer array of rank 1, the shifted array
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine shift_param(z_param_ini,shift,modd,z_param_out)
+ !
+ integer, intent(in) :: shift,modd
+ integer, intent(in), dimension(modd) :: z_param_ini
+ integer, intent(out), dimension(modd) :: z_param_out
+ !
+ integer, dimension(modd) :: temp
+ !
+ where (z_param_ini .ne. 0)
+ temp(:) = modulo(z_param_ini(:)+shift-1, modd) + 1
+ elsewhere
+ temp(:) = 0
+ endwhere
+ !
+ select case(modd)
+ case(1)
+ z_param_out = temp
+ case(2)
+ call tri_int2(temp,z_param_out)
+ case(3)
+ call tri_int3(temp,z_param_out)
+ case(4)
+ call tri_int4(temp,z_param_out)
+ case default
+ print*, "shift_param: unimplemented value of modd: ", modd
+ stop
+ end select
+ !
+ end subroutine shift_param
+ !
+ !
+ !****f* src/module/tri_croissant/exchange_param
+ ! NAME
+ !
+ ! Subroutine exchange_param
+ !
+ ! USAGE
+ !
+ ! call exchange_param(z_param_ini,tab,modd,z_param_out)
+ !
+ ! DESCRIPTION
+ !
+ ! This routine exchanges in the array z_param_ini of Feynman parameters
+ ! the label tab(1) with the label tab(2)
+ ! the result is put into the array z_param_out
+ !
+ ! INPUTS
+ !
+ ! * z_param_ini -- an integer array of rank 1, the array to shift
+ ! * tab -- an integer array of rank 1, the two labels to exchange
+ ! * modd -- an integer, the shift is made modulo modd
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! * z_param_out -- an integer array of rank 1, the shifted array
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine exchange_param(z_param_ini,tab,modd,z_param_out)
+ !
+ integer, intent(in) :: modd
+ integer, dimension(2), intent(in) :: tab
+ integer, intent(in), dimension(modd) :: z_param_ini
+ integer, intent(out), dimension(modd) :: z_param_out
+ !
+ integer, dimension(modd) :: temp
+ !
+ where (z_param_ini == tab(1))
+ temp = tab(2)
+ elsewhere (z_param_ini == tab(2))
+ temp = tab(1)
+ elsewhere
+ temp = z_param_ini
+ end where
+ !
+ select case(modd)
+ case(1)
+ z_param_out = temp
+ case(2)
+ call tri_int2(temp,z_param_out)
+ case(3)
+ call tri_int3(temp,z_param_out)
+ case(4)
+ call tri_int4(temp,z_param_out)
+ case default
+ print*, "shift_param: modd too large: ", modd
+ stop
+ end select
+ !
+ end subroutine exchange_param
+ !
+end module tri_croissant
+!
Index: 95/branches/golem95_without_olo_cmake/src/module/form_factor_type.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/form_factor_type.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/form_factor_type.f90 (revision 119)
@@ -0,0 +1,761 @@
+! NAME
+! SYNOPSIS
+!****h* src/module/form_factor_type
+! NAME
+!
+! Module form_factor_type
+!
+! USAGE
+!
+! use form_factor_type
+!
+! DESCRIPTION
+!
+! This module contains two type definitions : the form factors and
+! epsilon type. This module overloads the *, /, +, -, = and ** operators
+!
+! OUTPUT
+!
+! This module exports two types:
+! * form_factor -- define the type of the fom factors
+! * epsilon_type -- define the type for object having an epsilon expansion
+!
+! five operators:
+! * * -- overload of the multiplication operator for form_factor and epsilon_type object
+! * / -- overload of the division operator for form_factor and epsilon_type object
+! * + -- overload of the addition operator for form_factor and epsilon_type object
+! * - -- overload of the subtraction operator for form_factor and epsilon_type object
+! * = -- overload of the assignment operator for form_factor and epsilon_type object
+! * ** -- overload of the power operator for form_factor and epsilon_type object
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * constante (src/module/constante.f90)
+!
+!
+! AUTHOR
+! Thomas Reiter
+!
+! CREATION DATE
+! Oct 19, 2007
+!
+!*****
+module form_factor_type
+ !
+ use precision_golem, only: ki
+ use constante
+ !
+ implicit none
+ !
+ private :: ki
+ !
+ !****t* src/module/form_factor_type/form_factor
+ ! NAME
+ ! form_factor -- represents the result of a form factor
+ !
+ ! SYNOPSIS
+ ! type form_factor
+ !
+ ! SOURCE
+ type form_factor
+ complex(ki) :: a
+ complex(ki) :: b
+ complex(ki) :: c
+ end type form_factor
+ !
+ ! NOTES
+ ! * a is the coefficient of the 1/epsilon^2 pole
+ ! * b is the coefficient of the 1/epsilon pole
+ ! * c is the coefficient of the finite term
+ !****
+ !
+ !****t* src/module/form_factor_type/epsilon_type
+ ! NAME
+ ! epsilon_type -- a type that represents positive
+ ! powers of epsilon
+ !
+ ! SYNOPSIS
+ ! type epsilon_type
+ !
+ ! SOURCE
+ type epsilon_type
+ complex(ki) :: coefficient
+ integer :: power
+ end type epsilon_type
+ !
+ !****
+ !
+ !****t* src/module/form_factor_type/eps
+ ! NAME
+ ! eps -- singleton object of the epsilon-type.
+ !
+ ! SYNOPSIS
+ ! type(epsilon_type), parameter :: eps
+ !
+ ! SOURCE
+ type(epsilon_type), parameter :: eps = epsilon_type(1.0, 1)
+ !
+ ! EXAMPLE
+ ! type(form_factor) :: ff1 = a20((/.../))
+ ! type(form_factor) :: ff2 = eps * ff1
+ !****
+
+ !****** src/module/form_factor_type/multiplication
+ ! NAME
+ ! c * ff -- Multiplication of a form_factor with a scalar
+ !
+ ! SYNOPSIS
+ interface operator(*)
+ !****
+ module procedure mul_complex_ff
+ module procedure mul_ff_complex
+ module procedure mul_real_ff
+ module procedure mul_ff_real
+ module procedure mul_integer_ff
+ module procedure mul_ff_integer
+ module procedure mul_ff_eps
+ module procedure mul_eps_ff
+ module procedure mul_eps_eps
+ module procedure mul_eps_real
+ module procedure mul_eps_complex
+ module procedure mul_eps_integer
+ module procedure mul_real_eps
+ module procedure mul_complex_eps
+ module procedure mul_integer_eps
+ end interface
+ !
+ private :: mul_complex_ff, mul_ff_complex
+ private :: mul_real_ff, mul_ff_real
+ private :: mul_integer_ff, mul_ff_integer
+ private :: mul_ff_eps, mul_eps_ff, mul_eps_eps
+ private :: mul_eps_real, mul_real_eps
+ private :: mul_eps_complex, mul_complex_eps
+ private :: mul_eps_integer, mul_integer_eps
+ !
+ !****** src/module/form_factor_type/division
+ ! NAME
+ ! ff / c -- Division of a form_factor by a scalar
+ !
+ ! SYNOPSIS
+ interface operator(/)
+ !****
+ module procedure div_ff_complex
+ module procedure div_ff_real
+ module procedure div_ff_integer
+ end interface
+ !
+ private :: div_ff_complex, div_ff_real, div_ff_integer
+ !
+ !****** src/module/form_factor_type/sum
+ ! NAME
+ ! ff + x, + ff -- Sums involving form_factor(s)
+ !
+ ! SYNOPSIS
+ interface operator(+)
+ !****
+ module procedure add_complex_ff
+ module procedure add_ff_complex
+ module procedure add_real_ff
+ module procedure add_ff_real
+ module procedure add_integer_ff
+ module procedure add_ff_integer
+ module procedure add_ff_ff
+ module procedure plus_ff
+ end interface
+
+ private :: add_complex_ff, add_ff_complex
+ private :: add_real_ff, add_ff_real
+ private :: add_integer_ff, add_ff_integer
+ private :: add_ff_ff, plus_ff
+
+ !****** src/module/form_factor_type/subtraction
+ ! NAME
+ ! ff - x, - ff -- Subtractions involving form_factor(s)
+ !
+ ! SYNOPSIS
+ interface operator(-)
+ !****
+ module procedure sub_complex_ff
+ module procedure sub_ff_complex
+ module procedure sub_real_ff
+ module procedure sub_ff_real
+ module procedure sub_integer_ff
+ module procedure sub_ff_integer
+ module procedure sub_ff_ff
+ module procedure minus_ff
+ end interface
+
+ private :: sub_complex_ff, sub_ff_complex
+ private :: sub_real_ff, sub_ff_real
+ private :: sub_integer_ff, sub_ff_integer
+ private :: sub_ff_ff, minus_ff
+
+
+ !****** src/module/form_factor_type/assignment
+ ! NAME
+ ! ff = x -- Assignment to a form_factor
+ !
+ ! SYNOPSIS
+ interface assignment(=)
+ !
+ ! NOTES
+ ! In the assignment of a complex array the RHS must have the form
+ ! (/ a, b, c /).
+ ! In the assignment of a real array the RHS must have the form
+ ! (/ real(a), aimag(a), real(b), aimag(b), real(c), aimag(c) /).
+ ! The later form reflects the convention in the form factors of Golem90.
+ !****
+ module procedure assign_ff_complex
+ module procedure assign_ff_real
+ module procedure assign_ff_integer
+ module procedure assign_ff_complex_array3
+ module procedure assign_ff_real_array6
+ end interface
+
+ private :: assign_ff_complex, assign_ff_real, assign_ff_integer
+ private :: assign_ff_complex_array3, assign_ff_real_array6
+
+ interface operator(**)
+ module procedure pow_eps_int
+ end interface
+
+ private :: pow_eps_int
+contains
+
+ pure elemental function mul_complex_ff(x, ff) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = x * ff%a
+ r%b = x * ff%b
+ r%c = x * ff%c
+ !
+ end function mul_complex_ff
+ !
+ pure elemental function mul_ff_complex(ff, x) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = x * ff%a
+ r%b = x * ff%b
+ r%c = x * ff%c
+ !
+ end function mul_ff_complex
+ !
+ pure elemental function mul_real_ff(x, ff) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = z * ff%a
+ r%b = z * ff%b
+ r%c = z * ff%c
+ !
+ end function mul_real_ff
+ !
+ pure elemental function mul_ff_real(ff, x) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = z * ff%a
+ r%b = z * ff%b
+ r%c = z * ff%c
+ !
+ end function mul_ff_real
+ !
+ pure elemental function mul_integer_ff(x, ff) result(r)
+ implicit none
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = z * ff%a
+ r%b = z * ff%b
+ r%c = z * ff%c
+ !
+ end function mul_integer_ff
+ !
+ pure elemental function mul_ff_integer(ff, x) result(r)
+ !
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = z * ff%a
+ r%b = z * ff%b
+ r%c = z * ff%c
+ !
+ end function mul_ff_integer
+ !
+ pure elemental function pow_eps_int(eps, power) result(r)
+ !
+ type(epsilon_type), intent(in) :: eps
+ integer, intent(in) :: power
+ type(epsilon_type) :: r
+ !
+ r%coefficient = eps%coefficient ** power
+ r%power = power * eps%power
+ !
+ end function pow_eps_int
+
+ pure elemental function mul_eps_ff(x, ff) result(r)
+ !
+ type(epsilon_type), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ if (x%power >= 3) then
+ !
+ r%a = 0.0_ki
+ r%b = 0.0_ki
+ r%c = 0.0_ki
+ !
+ elseif (x%power == 2) then
+ !
+ r%a = 0.0_ki
+ r%b = 0.0_ki
+ r%c = x%coefficient * ff%a
+ !
+ else
+ !
+ r%a = 0.0_ki
+ r%b = x%coefficient * ff%a
+ r%c = x%coefficient * ff%b
+ !
+ end if
+ !
+ end function mul_eps_ff
+ !
+ pure elemental function mul_ff_eps(ff, x) result(r)
+ !
+ type(epsilon_type), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ if (x%power >= 3) then
+ !
+ r = 0.0_ki
+ !
+ elseif (X%power == 2) then
+ !
+ r%a = 0.0_ki
+ r%b = 0.0_ki
+ r%c = x%coefficient * r%a
+ !
+ else
+ !
+ r%a = 0.0_ki
+ r%b = x%coefficient * ff%a
+ r%c = x%coefficient * ff%b
+ !
+ end if
+ !
+ end function mul_ff_eps
+ !
+ pure elemental function mul_eps_eps(eps1, eps2) result(r)
+ !
+ type(epsilon_type), intent(in) :: eps1, eps2
+ type(epsilon_type) :: r
+ !
+ r%coefficient = eps1%coefficient * eps2%coefficient
+ r%power = eps1%power + eps2%power
+ !
+ end function mul_eps_eps
+ !
+ pure elemental function mul_eps_complex(eps, x) result(r)
+ !
+ type(epsilon_type), intent(in) :: eps
+ complex(ki), intent(in) :: x
+ type(epsilon_type) :: r
+ !
+ r%power = eps%power
+ r%coefficient = x * eps%coefficient
+ !
+ end function mul_eps_complex
+ !
+ pure elemental function mul_complex_eps(x, eps) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(epsilon_type), intent(in) :: eps
+ type(epsilon_type) :: r
+ !
+ r%power = eps%power
+ r%coefficient = x * eps%coefficient
+ !
+ end function mul_complex_eps
+ !
+ pure elemental function mul_eps_real(eps, x) result(r)
+ !
+ type(epsilon_type), intent(in) :: eps
+ real(ki), intent(in) :: x
+ type(epsilon_type) :: r
+ !
+ r%power = eps%power
+ r%coefficient = x * eps%coefficient
+ !
+ end function mul_eps_real
+ !
+ pure elemental function mul_real_eps(x, eps) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(epsilon_type), intent(in) :: eps
+ type(epsilon_type) :: r
+ !
+ r%power = eps%power
+ r%coefficient = x * eps%coefficient
+ !
+ end function mul_real_eps
+ !
+ pure elemental function mul_eps_integer(eps, x) result(r)
+ !
+ type(epsilon_type), intent(in) :: eps
+ integer, intent(in) :: x
+ type(epsilon_type) :: r
+ !
+ r%power = eps%power
+ r%coefficient = cmplx(x, 0, ki) * eps%coefficient
+ !
+ end function mul_eps_integer
+ !
+ pure elemental function mul_integer_eps(x, eps) result(r)
+ !
+ integer, intent(in) :: x
+ type(epsilon_type), intent(in) :: eps
+ type(epsilon_type) :: r
+ !
+ r%power = eps%power
+ r%coefficient = cmplx(x, 0, ki) * eps%coefficient
+ !
+ end function mul_integer_eps
+
+ pure elemental function div_ff_complex(ff, x) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = ff%a / x
+ r%b = ff%b / x
+ r%c = ff%c / x
+ !
+ end function div_ff_complex
+ !
+ pure elemental function div_ff_real(ff, x) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = ff%a / z
+ r%b = ff%b / z
+ r%c = ff%c / z
+ !
+ end function div_ff_real
+ !
+ pure elemental function div_ff_integer(ff, x) result(r)
+ !
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = ff%a / z
+ r%b = ff%b / z
+ r%c = ff%c / z
+ !
+ end function div_ff_integer
+ !
+ pure elemental function add_complex_ff(x, ff) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c + x
+ !
+ end function add_complex_ff
+ !
+ pure elemental function add_ff_complex(ff, x) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c + x
+ !
+ end function add_ff_complex
+ !
+ pure elemental function add_real_ff(x, ff) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c + z
+ !
+ end function add_real_ff
+ !
+ pure elemental function add_ff_real(ff, x) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c + z
+ !
+ end function add_ff_real
+ !
+ pure elemental function add_integer_ff(x, ff) result(r)
+ !
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c + z
+ !
+ end function add_integer_ff
+ !
+ pure elemental function add_ff_integer(ff, x) result(r)
+ !
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c + z
+ !
+ end function add_ff_integer
+ !
+ pure elemental function add_ff_ff(x, ff) result(r)
+ !
+ type(form_factor), intent(in) :: ff, x
+ type(form_factor) :: r
+ !
+ r%a = ff%a + x%a
+ r%b = ff%b + x%b
+ r%c = ff%c + x%c
+ !
+ end function add_ff_ff
+ !
+ pure elemental function plus_ff(ff) result(r)
+ !
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r = ff
+ !
+ end function plus_ff
+ !
+ pure elemental function sub_complex_ff(x, ff) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = ff%a
+ r%b = ff%b
+ r%c = x - ff%c
+ !
+ end function sub_complex_ff
+ !
+ pure elemental function sub_ff_complex(ff, x) result(r)
+ !
+ complex(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c - x
+ !
+ end function sub_ff_complex
+ !
+ pure elemental function sub_real_ff(x, ff) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = z - ff%c
+ !
+ end function sub_real_ff
+ !
+ pure elemental function sub_ff_real(ff, x) result(r)
+ !
+ real(ki), intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0.0_ki, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c - z
+ !
+ end function sub_ff_real
+ !
+ pure elemental function sub_integer_ff(x, ff) result(r)
+ !
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = z - ff%c
+ !
+ end function sub_integer_ff
+ !
+ pure elemental function sub_ff_integer(ff, x) result(r)
+ !
+ integer, intent(in) :: x
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ complex(ki) :: z
+ !
+ z = cmplx(x, 0, ki)
+ r%a = ff%a
+ r%b = ff%b
+ r%c = ff%c - z
+ !
+ end function sub_ff_integer
+ !
+ pure elemental function sub_ff_ff(ff, x) result(r)
+ !
+ type(form_factor), intent(in) :: ff, x
+ type(form_factor) :: r
+ !
+ r%a = ff%a - x%a
+ r%b = ff%b - x%b
+ r%c = ff%c - x%c
+ !
+ end function sub_ff_ff
+ !
+ pure elemental function minus_ff(ff) result(r)
+ !
+ type(form_factor), intent(in) :: ff
+ type(form_factor) :: r
+ !
+ r%a = -ff%a
+ r%b = -ff%b
+ r%c = -ff%c
+ !
+ end function minus_ff
+ !
+ !~ pure elemental subroutine assign_ff_complex(ff, x)
+ pure subroutine assign_ff_complex(ff, x)
+ !
+ type(form_factor), intent(out) :: ff
+ complex(ki), intent(in) :: x
+ !
+ ff%a = (0.0_ki, 0.0_ki)
+ ff%b = (0.0_ki, 0.0_ki)
+ ff%c = x
+ !
+ end subroutine assign_ff_complex
+ !
+ !~ pure elemental subroutine assign_ff_real(ff, x)
+ pure subroutine assign_ff_real(ff, x)
+ !
+ type(form_factor), intent(out) :: ff
+ real(ki), intent(in) :: x
+ !
+ ff%a = (0.0_ki, 0.0_ki)
+ ff%b = (0.0_ki, 0.0_ki)
+ ff%c = cmplx(x, 0.0_ki, ki)
+ !
+ end subroutine assign_ff_real
+ !
+ !~ pure elemental subroutine assign_ff_integer(ff, x)
+ pure subroutine assign_ff_integer(ff, x)
+ !
+ type(form_factor), intent(out) :: ff
+ integer, intent(in) :: x
+ !
+ ff%a = (0.0_ki, 0.0_ki)
+ ff%b = (0.0_ki, 0.0_ki)
+ ff%c = cmplx(x, 0, ki)
+ !
+ end subroutine assign_ff_integer
+ !
+ pure subroutine assign_ff_complex_array3(ff, x)
+ !
+ type(form_factor), intent(out) :: ff
+ complex(ki), dimension(1:3), intent(in) :: x
+ !
+ ff%a = x(1)
+ ff%b = x(2)
+ ff%c = x(3)
+ !
+ end subroutine assign_ff_complex_array3
+ !
+ pure subroutine assign_ff_real_array6(ff, x)
+ !
+ type(form_factor), intent(out) :: ff
+ real(ki), dimension(1:6), intent(in) :: x
+ !
+ ff%a = x(1) + i_ * x(2)
+ ff%b = x(3) + i_ * x(4)
+ ff%c = x(5) + i_ * x(6)
+ !
+ end subroutine assign_ff_real_array6
+ !
+end module form_factor_type
Index: 95/branches/golem95_without_olo_cmake/src/module/cache.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/cache.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/cache.f90 (revision 119)
@@ -0,0 +1,359 @@
+!
+!****h* src/module/cache
+! NAME
+!
+! Module cache
+!
+! USAGE
+!
+! use cache
+!
+! DESCRIPTION
+!
+! This module is used to reserve some memory to store already computed four/three
+! point functions
+!
+! OUTPUT
+!
+! This module exports three routines:
+! * allocate_cache -- to reserve the memory
+! * reset_cache -- to force the re-computation of the cache arrays
+! * clear_cache -- to clear the reserved memory
+!
+! USES
+!
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!
+!*****
+module cache
+ !
+ use precision_golem
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ implicit none
+ !
+ private :: ki
+ !
+ integer, private :: err
+ logical, dimension(:,:,:,:,:), allocatable :: computed_f4p_np2
+ complex(ki),dimension(:,:,:,:,:), allocatable :: results_f4p_np2
+ logical, dimension(:,:,:), allocatable :: computed_f4p_np4
+ complex(ki),dimension(:,:,:,:), allocatable :: results_f4p_np4
+ logical, dimension(:,:,:,:,:,:), allocatable :: computed_f3p
+ real(ki),dimension(:,:,:,:,:,:,:), allocatable :: results_f3p
+ logical, dimension(:,:,:,:,:,:), allocatable :: computed_f3p_np2
+ real(ki),dimension(:,:,:,:,:,:,:), allocatable :: results_f3p_np2
+ !
+ ! everything public except err, ki
+ !public :: allocate_cache, reset_cache, clear_cache
+ !
+ contains
+ !
+ !****f* src/module/cache/allocate_cache
+ ! NAME
+ !
+ ! Subroutine allocate_cache
+ !
+ ! USAGE
+ !
+ ! call allocate_cache(dim_s)
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine allocates the necessary memory to store
+ ! the n+2/n+4 four point functions and the n/n+2 three point functions
+ !
+ ! INPUTS
+ !
+ ! * dim_s -- an integer, the dimension of the S matrix
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ subroutine allocate_cache(dim_s)
+ !
+ integer, intent(in) :: dim_s
+ !
+ allocate(computed_f4p_np2(0:dim_s,0:dim_s,0:dim_s,0:dim_s,0:dim_s),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for computed_f4p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(computed_f4p_np4(0:dim_s,0:dim_s,0:dim_s),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for computed_f4p_np4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(computed_f3p(0:dim_s,0:dim_s,0:dim_s,0:3,0:3,0:3),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for computed_f3p'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(computed_f3p_np2(0:dim_s,0:dim_s,0:dim_s,0:3,0:3,0:3),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for computed_f3p_np2'
+ call catch_exception(0)
+ !
+ end if
+ computed_f4p_np2 = .false.
+ computed_f4p_np4 = .false.
+ computed_f3p = .false.
+ computed_f3p_np2 = .false.
+ !
+ allocate(results_f4p_np2(0:dim_s,0:dim_s,0:dim_s,0:dim_s,0:dim_s),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for results_f4p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(results_f4p_np4(0:dim_s,0:dim_s,0:dim_s,2),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for computed_f4p_np4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(results_f3p(0:dim_s,0:dim_s,0:dim_s,0:3,0:3,0:3,6),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for results_f3p'
+ call catch_exception(0)
+ !
+ end if
+ !
+ allocate(results_f3p_np2(0:dim_s,0:dim_s,0:dim_s,0:3,0:3,0:3,4),stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine allocate_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot allocate memory for results_f3p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine allocate_cache
+ !
+ !
+ !****f* src/module/cache/reset_cache
+ ! NAME
+ !
+ ! Subroutine reset_cache
+ !
+ ! USAGE
+ !
+ ! call reset_cache()
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine forces the cache arrays to be computed again
+ !
+ ! INPUTS
+ !
+ ! No inputs
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ subroutine reset_cache()
+ !
+ computed_f4p_np2 = .false.
+ computed_f4p_np4 = .false.
+ computed_f3p = .false.
+ computed_f3p_np2 = .false.
+ !
+ end subroutine reset_cache
+ !
+ !
+ !
+ !****f* src/module/cache/clear_cache
+ ! NAME
+ !
+ ! Subroutine clear_cache
+ !
+ ! USAGE
+ !
+ ! call clear_cache()
+ !
+ ! DESCRIPTION
+ !
+ ! This subroutine deallocates the reserved memory to store
+ ! the n+2/n+4 four point functions and the n/n+2 three point functions.
+ !
+ ! INPUTS
+ !
+ ! No inputs
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! No return value
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ subroutine clear_cache()
+ !
+ deallocate(computed_f4p_np2,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for computed_f4p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(results_f4p_np2,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for results_f4p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(computed_f4p_np4,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for computed_f4p_np4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(results_f4p_np4,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for results_f4p_np4'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(computed_f3p,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for computed_f3p'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(results_f3p,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for results_f3p'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(computed_f3p_np2,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for computed_f3p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ deallocate(results_f3p_np2,stat=err)
+ !
+ if (err /= 0) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In subroutine clear_cache'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'cannot deallocate memory for results_f3p_np2'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end subroutine clear_cache
+ !
+end module cache
Index: 95/branches/golem95_without_olo_cmake/src/module/equal.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/equal.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/equal.f90 (revision 119)
@@ -0,0 +1,303 @@
+!
+!****h* src/module/equal
+! NAME
+!
+! Module equal
+!
+! USAGE
+!
+! use equal
+!
+! DESCRIPTION
+!
+! This module is used to compare two objects
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * equal_real -- to compare two reals
+! * cut_s -- sets the momentum s equal to zero, if the ratio s/M or the absoulute value
+! is smaller than some global parameters.
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * parametre (src/module/parametre.f90)
+! * constante (src/module/constante.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!*****
+module equal
+ !
+ use precision_golem
+ use parametre, only: cut_s_over_m, cut_s_abs
+ use constante, only: zero, czero
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ implicit none
+ !
+ private
+ !
+ interface cut_s
+ !
+ module procedure cut_s_s
+ module procedure cut_s_sm_r, cut_s_sm_c
+ module procedure cut_s_smm_r, cut_s_smm_c
+ !
+ end interface
+ !
+ public :: equal_real, cut_s, of_order_of
+ !
+ contains
+ !
+ !****f* src/module/equal/equal_real
+ ! NAME
+ !
+ ! Function equal_real
+ !
+ ! USAGE
+ !
+ ! logical = equal_real(xa,xb,echelle)
+ !
+ ! DESCRIPTION
+ !
+ ! This function compares two real (of same kind) by computing their
+ ! difference and compares it to epsilon (of the same kind)
+ ! true if | xa - xb | <= echelle*epsilon, false otherwise
+ !
+ ! INPUTS
+ !
+ ! * xa -- a real of type ki
+ ! * xb -- a real of type ki
+ ! * echelle -- a real of type ki (optional)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a logical
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ pure elemental function equal_real(xa,xb,echelle)
+ implicit none
+ !
+ real(ki), intent(in) :: xa,xb
+ real(ki), intent(in), optional :: echelle
+ logical equal_real
+ !
+ real(ki) :: my_epsilon
+ !
+ my_epsilon = epsilon(1._ki)
+ if (present(echelle)) my_epsilon=echelle*my_epsilon
+ equal_real = abs(xa-xb) <= my_epsilon
+ !
+ end function equal_real
+ !
+ !
+ !****f* src/module/equal/cut_s
+ ! NAME
+ !
+ ! subroutine cut_s
+ !
+ ! USAGE
+ !
+ ! call cut_s(s,m1,m2)
+ ! call cut_s(s,m)
+ ! call cut_s(s)
+ !
+ ! DESCRIPTION
+ !
+ ! This function sets s to zero, if either of the following conditions is fulfilled.
+ ! abs(s) is smaller than cut_s_abs.
+ ! abs(s/Sum(m)) is smaller than cut_s_over_m.
+ ! Calling this routine improves stability in the form factor calculations.
+ !
+ ! INPUTS
+ !
+ ! * s -- a real of type ki
+ ! * m, m1, m2 -- real/complex type
+ !
+ ! SIDE EFFECTS
+ !
+ ! Possible change of s to zero.
+ !
+ ! RETURN VALUE
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ subroutine cut_s_smm_r(s,mass1,mass2)
+ implicit none
+ real(ki), intent(inout) :: s
+ real(ki), intent(in) :: mass1, mass2
+ !
+ real(ki) :: sum_mass
+ !
+ sum_mass = mass1 + mass2
+ call cut_s(s, sum_mass)
+ !
+ end subroutine cut_s_smm_r
+ !
+ subroutine cut_s_sm_r(s,mass)
+ implicit none
+ real(ki), intent(inout) :: s
+ real(ki), intent(in) :: mass
+ !
+ if (equal_real(mass,zero)) then
+ !
+ call cut_s(s)
+ !
+ else if ( abs(s/mass) .le. cut_s_over_m) then
+ !
+ s = zero
+ !
+ else if ( abs(s) .le. cut_s_abs ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in cut_s: s is set to zero because its absolute value is lower than cut_s_abs!'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The ratio s/Mass is not lower than the parameter cut_s_over_m!'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 's= %f0'
+ tab_erreur_par(3)%arg_real = s
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'mass= %f0'
+ tab_erreur_par(4)%arg_real = mass
+ !
+ call catch_exception(1)
+ !
+ s = zero
+ !
+ end if
+ !
+ end subroutine cut_s_sm_r
+ !
+ subroutine cut_s_s(s)
+ implicit none
+ real(ki), intent(inout) :: s
+ !
+ if ( s /= zero) then
+ !
+ if ( abs(s) .le. cut_s_abs ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in cut_s: s is set to zero because its absolute value is lower than cut_s_abs!'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 's= %f0'
+ tab_erreur_par(2)%arg_real = s
+ !
+ call catch_exception(1)
+ !
+ s = zero
+ !
+ end if
+ !
+ end if
+ !
+ end subroutine cut_s_s
+ !
+ subroutine cut_s_smm_c(s,mass1,mass2)
+ implicit none
+ real(ki), intent(inout) :: s
+ complex(ki), intent(in) :: mass1, mass2
+ !
+ real(ki) :: sum_mass
+ !
+ sum_mass = real(mass1 + mass2,ki)
+ call cut_s(s, sum_mass)
+ !
+ end subroutine cut_s_smm_c
+ !
+ subroutine cut_s_sm_c(s,mass_c)
+ implicit none
+ real(ki), intent(inout) :: s
+ complex(ki), intent(in) :: mass_c
+ !
+ real(ki) :: mass
+ !
+ mass = real(mass_c,ki)
+ !
+ if (equal_real(mass,zero)) then
+ !
+ call cut_s(s)
+ !
+ else if ( abs(s/mass) .le. cut_s_over_m) then
+ !
+ s = zero
+ !
+ else if ( abs(s) .le. cut_s_abs ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in cut_s: s is set to zero because its absolute value is lower than cut_s_abs!'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The ratio s/Mass is not lower than the parameter cut_s_over_m!'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 's= %f0'
+ tab_erreur_par(3)%arg_real = s
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'mass= %f0'
+ tab_erreur_par(4)%arg_real = mass
+ !
+ call catch_exception(1)
+ !
+ s = zero
+ !
+ end if
+ !
+ end subroutine cut_s_sm_c
+ !
+ !
+ !****f* src/module/equal/of_order_of
+ ! NAME
+ !
+ ! Function of_order_of
+ !
+ ! USAGE
+ !
+ ! logical = of_order_of(xa,xb,echelle)
+ !
+ ! DESCRIPTION
+ !
+ ! This function compares two real (of same kind) by computing their
+ ! difference and compares it to a scale (of the same kind)
+ ! true if | xa - xb | <= echelle*scale, false otherwise
+ !
+ ! INPUTS
+ !
+ ! * xa -- a real of type ki
+ ! * xb -- a real of type ki
+ ! * echelle -- a real of type ki (optional)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a logical
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function of_order_of(xa,xb,echelle)
+ implicit none
+ !
+ real(ki), intent(in) :: xa,xb
+ real(ki), intent(in), optional :: echelle
+ logical of_order_of
+ !
+ real(ki) :: my_scale
+ !
+ my_scale = 10._ki
+ if (present(echelle)) my_scale = my_scale*echelle
+ of_order_of = abs(xa-xb) <= my_scale
+ !
+ end function of_order_of
+ !
+end module equal
Index: 95/branches/golem95_without_olo_cmake/src/module/z_log.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/z_log.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/z_log.f90 (revision 119)
@@ -0,0 +1,560 @@
+!****h* src/module/logarithme
+! NAME
+!
+! Module logarithme
+!
+! USAGE
+!
+! use logarithme
+!
+! DESCRIPTION
+!
+! This module provides three public routines to compute the logarithm,
+! the logarithm squared and a special function (generalisation of ln(1-z)/z)
+! assuming that the argument is of the type z = a + i lambda s, where
+! lambda > 0 and << 1 and s = +/- 1. a can be a complex type. If its
+! imaginary part vanishes, the sign of s becomes relevant.
+!
+!
+! OUTPUT
+!
+! It exports:
+! * z_log -- a function which returns the logarithm with a complex argument
+! * z_log2 -- a function which returns the logarithm squared with a complex argument
+! * q -- a recursive function which a generalisation of ln(1-z)/z
+!
+! NOTES
+!
+! z_log (and z_log2) can be called with complex argument and parameter s. If the imaginary part vanishes,
+! z_log (or z_log2) with real argument is called. Here, s becomes important.
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+! * constante (src/module/constante.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * equal (src/module/equal.f90)
+!
+!*****
+module logarithme
+ !
+ use precision_golem
+ use constante, only : pi,i_,un, zero
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use equal
+ !
+ implicit none
+ !
+ private
+ !
+ real(ki), parameter :: small_glob = 5.e-1_ki
+ !
+ interface z_log
+ !
+ module procedure z_log_r, z_log_c
+ !
+ end interface
+ !
+ interface z_log2
+ !
+ module procedure z_log2_r, z_log2_c
+ !
+ end interface
+ !
+ interface q
+ !
+ module procedure q_r, q_c
+ !
+ end interface
+ !
+ public :: z_log,z_log2,q,eta
+ !
+ contains
+ !
+ !****f* src/module/logarithme/z_log
+ ! NAME
+ !
+ ! Function z_log
+ !
+ ! USAGE
+ !
+ ! complex = z_log(a,s)
+ !
+ ! DESCRIPTION
+ !
+ ! Compute the ln(z) with z = a + i lambda s
+ !
+ ! INPUTS
+ !
+ ! * a -- a real/complex (type ki), the argument
+ ! * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! NOTES
+ !
+ ! If the imaginary part of the argument vanishes, the sign of s becomes relevant.
+ !
+ !
+ !*****
+ !
+ function z_log_r(a,s)
+ !
+ real(ki), intent(in) :: a,s
+ complex(ki) :: z_log_r
+ !
+ if (abs(s) == 1._ki) then
+ !
+ if (a > 0._ki) then
+ !
+ z_log_r = cmplx(log(a), 0.0_ki, ki)
+ !
+ else
+ !
+ ! z_log_r = log(-a)+i_*pi*s
+ z_log_r = cmplx(log(-a), pi*s, ki)
+ !
+ endif
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in z_log:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the second argument must be 1. or -1. %f0'
+ tab_erreur_par(2)%arg_real = s
+ call catch_exception(0)
+ !
+ ! to please the compiler:
+ stop
+ !
+ endif
+ !
+ end function z_log_r
+ !
+ !
+ function z_log_c(a,s)
+ !
+ complex(ki), intent(in) :: a
+ real(ki), intent(in) :: s
+ complex(ki) :: z_log_c
+ !
+
+ if (equal_real(aimag(a),zero) ) then
+ !
+ z_log_c = z_log_r(real(a,ki),s)
+ !
+ else
+ !
+ z_log_c = log(a)
+ !
+ end if
+ !
+ end function z_log_c
+ !
+ !****f* src/module/logarithme/z_log2
+ ! NAME
+ !
+ ! Function z_log2
+ !
+ ! USAGE
+ !
+ ! complex = z_log2(a,s)
+ !
+ ! DESCRIPTION
+ !
+ ! Compute the ln(z)^2 with z = a + i lambda s
+ !
+ ! INPUTS
+ !
+ ! * a -- a real/complex (type ki), the argument
+ ! * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! NOTES
+ !
+ ! If the imaginary part of the argument vanishes, the sign of s becomes relevant.
+ !
+ !
+ !
+ !*****
+ !
+ function z_log2_r(a,s)
+ !
+ real(ki), intent(in) :: a,s
+ complex(ki) :: z_log2_r
+
+ real(ki) :: lga
+ !
+ if (abs(s) == 1._ki) then
+ !
+ if (a > 0._ki) then
+ !
+ lga = log(a)
+ z_log2_r = cmplx(lga*lga, 0.0_ki, ki)
+ !
+ else
+ !
+ ! z_log2_r = log(-a)**2-pi**2+2._ki*pi*i_*s*log(-a)
+ lga = log(-a)
+ z_log2_r = cmplx((lga+pi)*(lga-pi), 2.0_ki*pi*s*lga, ki)
+ !
+ endif
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in z_log2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the second argument must be 1. or -1. %f0'
+ tab_erreur_par(2)%arg_real = s
+ call catch_exception(0)
+ !
+ ! to please the compiler:
+ stop
+ !
+ endif
+ !
+ end function z_log2_r
+ !
+ function z_log2_c(a,s)
+ !
+ complex(ki), intent(in) :: a
+ real(ki), intent(in) ::s
+ complex(ki) :: z_log2_c
+ !
+ if (equal_real(aimag(a),zero) ) then
+ !
+ z_log2_c = z_log2_r(real(a,ki),s)
+ !
+ else
+ !
+ z_log2_c = log(a)**2
+ !
+ end if
+ !
+ end function z_log2_c
+ !
+ !****f* src/module/logarithme/q
+ ! NAME
+ !
+ ! Function q
+ !
+ ! USAGE
+ !
+ ! complex = q(n,x,s)
+ !
+ ! DESCRIPTION
+ !
+ ! It computes the function q defined recusively by
+ ! q_n(X) = (q_{n-1}(X)+1/(n-1))/X
+ ! with q_1(X) = ln(1-X)/X
+ ! assuming that X = x + i*s*lambda and s=+/- 1,
+ ! Care is taken for small values of x.
+ ! For x < small_glob
+ ! q_n(x) = -( 1/n + \sum_{j=n+1}^\infinity x^{j-n}/j )
+ ! Note that in this case there is no imaginary part.
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the order of q
+ ! * x -- a real/complex (type ki), the real part
+ ! * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! NOTES
+ !
+ ! This function can now be called with complex x. If the imaginary part vanishes,
+ ! the evaluation is switched to the version with real x and the original entry for
+ ! s becomes relevant.
+ !
+ !
+ !
+ !*****
+ !
+ recursive function q_r(n,x,s) result(resq)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: x,s
+ complex(ki) :: resq
+ !
+ integer :: nm1
+ real(ki) :: tt,temp,expo_x,denom
+ !
+ if (abs(x) > small_glob) then
+ !
+ if (n == 1) then
+ resq = z_log(un-x,-s)/x
+ else
+ nm1 = n - 1
+ resq = (q_r(nm1,x,s) + 1._ki/real(nm1,ki))/x
+ end if
+ !
+ else ! no imaginary part in this case
+ !
+ denom = real(n,ki)
+ tt = 1._ki/denom
+ expo_x = un
+ temp = 10._ki !artificial value to enter into the loop
+ !
+ do while(abs(tt-temp) >= epsilon(x))
+ !
+ temp = tt
+ expo_x = x*expo_x
+ denom = denom + un
+ tt = tt + expo_x/denom
+ !
+ end do
+ !
+ resq = cmplx(-tt,0._ki,ki)
+ !
+ end if
+ !
+ end function q_r
+ !
+ recursive function q_c(n,x,s) result(resq)
+ !
+ integer, intent(in) :: n
+ complex(ki), intent(in) :: x
+ real(ki), intent (in) :: s
+ complex(ki) :: resq
+ !
+ integer :: nm1
+ complex(ki) :: tt,temp,denom,expo_x
+ !
+ if (equal_real(aimag(x), zero)) then
+ !
+ resq = q_r(n,real(x,ki),s)
+ !
+ else if (abs(x) > small_glob) then
+ !
+ if (n == 1) then
+ !
+ resq = z_log((cmplx(un,0._ki,ki) - x),-s)/x
+ !
+ else
+ !
+ nm1 = n - 1
+ resq = (q_c(nm1,x,s) + 1._ki/real(nm1,ki))/x
+ !
+ end if
+ !
+ else
+ !
+ denom = cmplx(real(n,ki),0._ki,ki)
+ tt = 1._ki/denom
+ expo_x = cmplx(un,0._ki,ki)
+ temp = cmplx(10._ki,0._ki,ki) !artificial value to enter into the loop
+ !
+ do while(abs(tt-temp) >= epsilon(real(x,ki)))
+ !
+ temp = tt
+ expo_x = x*expo_x
+ denom = denom + cmplx(un,0._ki,ki)
+ tt = tt + expo_x/denom
+ !
+ end do
+ !
+ resq = -tt
+ !
+ end if
+ !
+ end function q_c
+ !
+ !****f* src/module/logarithme/eta
+ ! NAME
+ !
+ ! Function eta
+ !
+ ! USAGE
+ !
+ ! complex = eta(x,y,z)
+ !
+ ! DESCRIPTION
+ !
+ ! It computes the function eta defined by
+ ! eta(x,y) - ln(x*y) - ln(x) - ln(y)
+ !
+ ! INPUTS
+ !
+ ! * x -- a complex (type ki)
+ ! * y -- a complex (type ki)
+ ! * z -- optional, a complex (type ki) : product x*y
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! NOTES
+ !
+ !
+ !
+ !
+ !*****
+ !
+ !function eta(z1,z2)
+ !!
+ !complex(ki), intent(in) :: z1,z2
+ !complex(ki) :: eta
+ !!
+ !real(ki) :: im1,im2,imt
+ !complex(ki) :: z1n,z2n
+ !real(ki) :: r_max
+ !!
+ !r_max = max(abs(z1),abs(z2))
+ !z1n = z1/r_max
+ !z2n = z2/r_max
+ !im1 = aimag(z1n)
+ !im2 = aimag(z2n)
+ !imt = aimag(z1n*z2n)
+ !!
+ !write(*,*) 'in eta :',imt
+ !!write(*,*) 'in eta 1 :',z1n,z2n
+ !!mettre imt = 0 si trop petit !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!
+ !!if (abs(imt) < epsilon(1._ki)) imt = 0._ki
+ !!
+ !eta = eta_mod(real(z1n,ki),im1,real(z2n,ki),im2,imt)
+ !!
+ !end function eta
+ function eta(z1,z2,z1_z2)
+ !
+ complex(ki), intent(in) :: z1,z2
+ complex(ki), intent(in),optional :: z1_z2
+ complex(ki) :: eta
+ !
+ real(ki) :: im1,im2,imt
+ real(ki) :: re1,re2
+ !
+ im1 = aimag(z1)
+ im2 = aimag(z2)
+ if (present(z1_z2)) then
+ !
+ imt = aimag(z1_z2)
+ !
+ else
+ !
+ imt = aimag(z1*z2)
+ !
+ end if
+ re1 = real(z1,ki)
+ re2 = real(z2,ki)
+ !
+ !write(*,*) 'in eta :',imt
+ !write(*,*) 'in eta 1 :',z1n,z2n
+ !mettre imt = 0 si trop petit !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !
+ !if (abs(imt) < epsilon(1._ki)) imt = 0._ki
+ !
+ if ( (im1 >= 0._ki) .and. (im2 >= 0._ki) .and. (imt < 0._ki) ) then
+ !
+ eta = -2._ki*i_*pi
+ !
+ else if ( (im1 < 0._ki) .and. (im2 < 0._ki) .and. (imt >= 0._ki) ) then
+ !
+ eta = 2._ki*i_*pi
+ !
+ else if ( (im1 == 0._ki) .and. (im2 == 0._ki) &
+ &.and. (re1 > 0._ki) .and. (re2 > 0._ki) ) then
+ !
+ eta = -2._ki*i_*pi
+ !
+ else
+ !
+ eta = 0._ki
+ !
+ end if
+ !
+ end function eta
+ !
+ !
+ !****f* src/module/logarithme/eta_mod
+ ! NAME
+ !
+ ! Function eta_mod
+ !
+ ! USAGE
+ !
+ ! complex = eta_mod(im1,im2,imt)
+ !
+ ! DESCRIPTION
+ !
+ ! It computes the function eta defined by
+ ! eta(x,y) - ln(x*y) - ln(x) - ln(y)
+ ! the argument are Re(x), Im(x), Re(y), Im(y) and Im(x*y)
+ !
+ ! INPUTS
+ !
+ ! * re1 -- a real (type ki)
+ ! * im2 -- a complex (type ki)
+ ! * re2 -- a real (type ki)
+ ! * im2 -- a complex (type ki)
+ ! * imt -- a complex (type ki)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! This function returns a complex (type ki)
+ !
+ ! NOTES
+ !
+ !
+ !
+ !
+ !*****
+ !
+ !function eta_mod(re1,im1,re2,im2,imt)
+ !!
+ !real(ki), intent(in) :: re1,im1,re2,im2,imt
+ !complex(ki) :: eta_mod
+ !!
+ !!write(*,*) 'eta_mod :',re1,im1,re2,im2,imt
+ !if ( (im1 >= 0._ki) .and. (im2 >= 0._ki) .and. (imt < 0._ki) ) then
+ !!
+ !eta_mod = -2._ki*i_*pi
+ !!
+ !else if ( (im1 < 0._ki) .and. (im2 < 0._ki) .and. (imt >= 0._ki) ) then
+ !!
+ !eta_mod = 2._ki*i_*pi
+ !!
+ !else if ( (im1 == 0._ki) .and. (im2 == 0._ki) &
+ !&.and. (re1 > 0._ki) .and. (re2 > 0._ki) ) then
+ !!
+ !eta_mod = -2._ki*i_*pi
+ !!
+ !else
+ !!
+ !eta_mod = 0._ki
+ !!
+ !end if
+ !!
+ !end function eta_mod
+ !
+end module logarithme
Index: 95/branches/golem95_without_olo_cmake/src/module/spinor.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/spinor.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/spinor.f90 (revision 119)
@@ -0,0 +1,616 @@
+!
+!****h* src/module/spinor
+! NAME
+!
+! Module spinor
+!
+! USAGE
+!
+! use spinor
+!
+! DESCRIPTION
+!
+! This module contains all the function to compute the spinorial products,
+! scalar products and epsilon_tensor
+!
+! OUTPUT
+!
+! It exports:
+! * ket -- a function to compute the ket spinor
+! * bra -- a function to compute the bra spinor
+! * pslash -- a function to compute p^{\mu} \gamma_{\mu}
+! * bra_ket -- a function to compute the spinorial product
+! * eps_prod_sca -- a function to compute the scalar product e_i.p_j
+! * eps_prod_eps -- a function to compute the scalar product e_i.e_j
+! * scalar -- a function to compute the scalar product
+! * e_ -- a function to compute the epsilon tensor
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+module spinor
+ !
+ use precision_golem
+ use constante, only : i_
+ implicit none
+ !
+ private
+ !
+ complex(ki), dimension(16), parameter :: g0_col = (/0._ki,0._ki,1._ki,0._ki,&
+ &0._ki,0._ki,0._ki,1._ki,&
+ &1._ki,0._ki,0._ki,0._ki,&
+ &0._ki,1._ki,0._ki,0._ki/)
+ complex(ki), dimension(16), parameter :: g1_col = (/0._ki,0._ki,0._ki,1._ki,&
+ &0._ki,0._ki,1._ki,0._ki,&
+ &0._ki,-1._ki,0._ki,0._ki,&
+ &-1._ki,0._ki,0._ki,0._ki/)
+ complex(ki), dimension(16), parameter :: g2_col = (/0._ki,0._ki,0._ki,1._ki,&
+ &0._ki,0._ki,-1._ki,0._ki,&
+ &0._ki,-1._ki,0._ki,0._ki,&
+ &1._ki,0._ki,0._ki,0._ki/)
+ complex(ki), dimension(16), parameter :: g3_col = (/0._ki,0._ki,1._ki,0._ki,&
+ &0._ki,0._ki,0._ki,-1._ki,&
+ &-1._ki,0._ki,0._ki,0._ki,&
+ &0._ki,1._ki,0._ki,0._ki/)
+ !complex(ki), dimension(4,4), parameter :: gamma0 = reshape(g0_col,(/4,4/))
+ !complex(ki), dimension(4,4), parameter :: gamma1 = reshape(g1_col,(/4,4/))
+ !complex(ki), dimension(4,4), parameter :: gamma2 = i_*reshape(g2_col,(/4,4/))
+ !complex(ki), dimension(4,4), parameter :: gamma3 = reshape(g3_col,(/4,4/))
+ !
+ public ket,bra,pslash,bra_ket,eps_prod_sca,eps_prod_eps,scalar,e_
+ !
+ contains
+ !
+ !****f* src/module/spinor/ket
+ ! NAME
+ !
+ ! Function ket
+ !
+ ! USAGE
+ !
+ ! complex_dim4_1 = ket(p,i)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the spinor using the chinese's paper
+ ! Nucl. Phys. B291 (1987) 392-428 equation A.16
+ ! modified for non physical configuration E < 0.
+ ! The functions bra and ket verify the conditions:
+ ! <-p-|q+> = <p-|-q+> = i <p-|q+>
+ ! <-p+|q-> = <p+|-q-> = i <p+|q->
+ ! <-p-|-q+> = - <p-|q+>
+ ! <-p+|-q-> = - <p+|q->
+ !
+ ! INPUTS
+ !
+ ! * p -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * i -- an integer, the value of the helicity (= 1,-1)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex array (type ki) of rank 2 and shape 4,1
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function ket(p,i)
+ !
+ real(ki), dimension(4), intent(in) :: p
+ integer, intent(in) :: i
+ complex(ki), dimension(4,1) :: ket
+ !
+ real(ki) :: p_plus,p_moins,t1
+ complex(ki) :: p_perp,c1,extra_phase
+ !
+ p_plus = p(1)+p(4)
+ p_moins = p(1)-p(4)
+ p_perp = sign(1._ki,p(1))*(p(2)+i_*p(3))
+ extra_phase = (1._ki,0._ki)
+ !
+ ! for non physical configuration
+ !
+ if (p(1) < 0._ki) then
+ !
+ extra_phase = i_
+ !
+ end if
+ !
+ t1 = sqrt(abs(p_plus))
+ !
+ if (p_plus == 0._ki) then
+ !
+ c1 = sqrt(p_moins)
+ !
+ else
+ !
+ c1 = p_perp/t1
+ !
+ end if
+ !
+ if (i == 1) then
+ !
+ ket(1,:) = extra_phase*t1
+ ket(2,:) = extra_phase*c1
+ ket(3,:) = 0._ki
+ ket(4,:) = 0._ki
+ !
+ else if (i == -1) then
+ !
+ ket(1,:) = 0._ki
+ ket(2,:) = 0._ki
+ ket(3,:) = extra_phase*conjg(c1)
+ ket(4,:) = -extra_phase*t1
+ !
+ end if
+ !
+ end function ket
+ !
+ !****f* src/module/spinor/bra
+ ! NAME
+ !
+ ! Function bra
+ !
+ ! USAGE
+ !
+ ! complex_dim1_4 = bra(p,i)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the spinor bra using
+ ! bra(p) = ket(p)^{\dagger} \gamma_0
+ ! modified for non physical configuration p_0 < 0.
+ ! The functions bra and ket verify the conditions:
+ ! <-p-|q+> = <p-|-q+> = i <p-|q+>
+ ! <-p+|q-> = <p+|-q-> = i <p+|q->
+ ! <-p-|-q+> = - <p-|q+>
+ ! <-p+|-q-> = - <p+|q->
+ !
+ ! INPUTS
+ !
+ ! * p -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * i -- an integer, the value of the helicity (= 1,-1)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex array (type ki) of rank 2 and shape 1,4
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function bra(p,i)
+ !
+ real(ki), dimension(4), intent(in) :: p
+ integer, intent(in) :: i
+ complex(ki), dimension(1,4) :: bra
+ !
+ complex(ki), dimension(1,4) :: tra
+ complex(ki), dimension(4,4) :: gamma0
+
+ gamma0 = reshape(g0_col,(/4,4/))
+ !
+ tra = transpose(ket(p,i))
+ bra = sign(1._ki,p(1))*conjg(tra)
+ bra = matmul(bra,gamma0)
+ !
+ end function bra
+ !
+ !****f* src/module/spinor/pslash
+ ! NAME
+ !
+ ! Function pslash
+ !
+ ! USAGE
+ !
+ ! complex_dim4_4 = pslash(p)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes p_{\mu} \gamma^{\mu}, i.e.
+ ! p0 gamma0 - p1 gamma1 - p2 gamma2 - p3 gamma3
+ ! taking the Chinese convention for the gamma matrices in
+ ! Weyl representation
+ !
+ ! INPUTS
+ !
+ ! * p -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex array (type ki) of rank 2 and shape 4,4
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function pslash(p)
+ !
+ real(ki), dimension(4), intent(in) :: p
+ complex(ki), dimension(4,4) :: pslash
+ !
+ real(ki) :: p_plus,p_moins
+ complex(ki) :: p_perp
+ !
+ p_plus = p(1) + p(4)
+ p_moins = p(1) - p(4)
+ p_perp = p(2) + i_*p(3)
+ !
+ pslash = 0._ki
+ pslash(1,3) = p_plus
+ pslash(1,4) = conjg(p_perp)
+ pslash(2,3) = p_perp
+ pslash(2,4) = p_moins
+ pslash(3,1) = p_moins
+ pslash(3,2) = -conjg(p_perp)
+ pslash(4,1) = -p_perp
+ pslash(4,2) = p_plus
+ !
+ end function pslash
+ !
+ !****f* src/module/spinor/bra_ket
+ ! NAME
+ !
+ ! Function bra_ket
+ !
+ ! USAGE
+ !
+ ! complex = bra_ket(p1,i1,p2,i2,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes <p1 i1|k1slash*k2slash*...*k10slash|p2 i2>
+ ! i1 and i2 = +/- 1 are the helicities
+ ! where the inner argument k1slash,k2slash,...,k10slash are optional
+ !
+ ! INPUTS
+ !
+ ! * p1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * i1 -- an integer, the value of the helicity (= 1,-1)
+ ! * p2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * i2 -- an integer, the value of the helicity (= 1,-1)
+ ! * k1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k3 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k4 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k5 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k6 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k7 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k8 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k9 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ ! * k10 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function bra_ket(p1,i1,p2,i2,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)
+ !
+ real(ki), dimension(4), intent(in) :: p1,p2
+ real(ki), dimension(4), intent(in), optional :: k1,k2,k3,k4,k5,&
+ &k6,k7,k8,k9,k10
+ integer, intent(in) :: i1,i2
+ complex(ki) :: bra_ket
+ !
+ complex(ki), dimension(1,1) :: temp
+ complex(ki), dimension(4,4) :: c_mat
+ complex(ki), dimension(4,1) :: c_col
+ integer :: nb_arg
+ logical :: test
+ !
+ nb_arg = 2
+ ! calcul du nombre d'arguments optionnels
+ if (present(k1)) nb_arg = nb_arg + 1
+ if (present(k2)) nb_arg = nb_arg + 1
+ if (present(k3)) nb_arg = nb_arg + 1
+ if (present(k4)) nb_arg = nb_arg + 1
+ if (present(k5)) nb_arg = nb_arg + 1
+ if (present(k6)) nb_arg = nb_arg + 1
+ if (present(k7)) nb_arg = nb_arg + 1
+ if (present(k8)) nb_arg = nb_arg + 1
+ if (present(k9)) nb_arg = nb_arg + 1
+ if (present(k10)) nb_arg = nb_arg + 1
+ !
+ test = ( (modulo(nb_arg,2) == 0) .and. (i1*i2 == -1) ) .or. &
+ ( (modulo(nb_arg,2) == 1) .and. (i1*i2 == 1) )
+ !
+ if ( test ) then
+ !
+ if (present(k1)) then
+ !
+ c_mat = pslash(k1)
+ !
+ if (present(k2)) c_mat = matmul(c_mat,pslash(k2))
+ if (present(k3)) c_mat = matmul(c_mat,pslash(k3))
+ if (present(k4)) c_mat = matmul(c_mat,pslash(k4))
+ if (present(k5)) c_mat = matmul(c_mat,pslash(k5))
+ if (present(k6)) c_mat = matmul(c_mat,pslash(k6))
+ if (present(k7)) c_mat = matmul(c_mat,pslash(k7))
+ if (present(k8)) c_mat = matmul(c_mat,pslash(k8))
+ if (present(k9)) c_mat = matmul(c_mat,pslash(k9))
+ if (present(k10)) c_mat = matmul(c_mat,pslash(k10))
+ !
+ c_col = matmul(c_mat,ket(p2,i2))
+ temp = matmul(bra(p1,i1),c_col)
+ !
+ else
+ !
+ temp = matmul(bra(p1,i1),ket(p2,i2))
+ !
+ end if
+ !
+ bra_ket = temp(1,1)
+ !
+ else
+ !
+ bra_ket = 0._ki
+ !
+ end if
+ !
+ end function bra_ket
+ !
+ !****f* src/module/spinor/eps_prod_sca
+ ! NAME
+ !
+ ! Function eps_prod_sca
+ !
+ ! USAGE
+ !
+ ! complex = eps_prod_sca(i,r1,p1,p2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes e^i(p1).p2 where r1 is the reference momentum
+ ! be careful that p2 is assumed to be a lightlike vector
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer, the value of the helicity (= 1,-1)
+ ! * r1 -- a real array (type ki) of rank 1, shape 4; the refrence momentum
+ ! * p1 -- a real array (type ki) of rank 1, shape 4; the momentum of the spin 1
+ ! * p2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function eps_prod_sca(i,r1,p1,p2)
+ !
+ integer, intent(in) :: i
+ real(ki), dimension(4), intent(in) :: r1,p1,p2
+ complex(ki) :: eps_prod_sca
+ !
+ complex(ki) :: ctemp,cjtemp
+ real(ki) :: denom
+ !
+ ctemp = bra_ket(r1,-1,p1,1)
+ cjtemp = conjg(ctemp)
+ denom = ctemp*cjtemp*sqrt(2._ki)
+ !
+ if (i == 1) then
+ !
+ eps_prod_sca = bra_ket(r1,-1,p1,-1,p2)*cjtemp/denom
+ !
+ else if (i == -1) then
+ !
+ eps_prod_sca = bra_ket(r1,1,p1,1,p2)*ctemp/denom
+ else
+ !
+ eps_prod_sca = huge(1.0_ki)
+ !
+ end if
+ !
+ end function eps_prod_sca
+ !
+ !****f* src/module/spinor/eps_prod_eps
+ ! NAME
+ !
+ ! Function eps_prod_eps
+ !
+ ! USAGE
+ !
+ ! complex = eps_prod_eps(i1,r1,p1,i2,r2,p2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes e^i(p1).e^j(p) where r1 is the reference momemtum
+ ! for e(p1) and r2 is the reference momemtum for e(p2)
+ !
+ ! INPUTS
+ !
+ ! * i1 -- an integer, the value of the helicity (= 1,-1)
+ ! * r1 -- a real array (type ki) of rank 1, shape 4; the refrence momentum
+ ! * p1 -- a real array (type ki) of rank 1, shape 4; the momentum of the spin 1
+ ! * i2 -- an integer, the value of the helicity (= 1,-1)
+ ! * r2 -- a real array (type ki) of rank 1, shape 4; the refrence momentum
+ ! * p2 -- a real array (type ki) of rank 1, shape 4; the momentum of the spin 1
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function eps_prod_eps(i1,r1,p1,i2,r2,p2)
+ !
+ integer, intent(in) :: i1,i2
+ real(ki), dimension(4), intent(in) :: r1,p1,r2,p2
+ complex(ki) :: eps_prod_eps
+ !
+ complex(ki) :: c1temp,c1jtemp,c2temp,c2jtemp
+ real(ki) :: denom
+ !
+ c1temp = bra_ket(r1,-1,p1,1)
+ c1jtemp = conjg(c1temp)
+ c2temp = bra_ket(r2,-1,p2,1)
+ c2jtemp = conjg(c2temp)
+ denom = c1temp*c1jtemp*c2temp*c2jtemp
+ !
+ if ( (i1 == 1) .and. (i2 == 1) ) then
+ !
+ eps_prod_eps = bra_ket(r2,-1,r1,1)*bra_ket(p1,1,p2,-1) &
+ *c1jtemp*c2jtemp/denom
+ !
+ else if ( (i1 == 1) .and. (i2 == -1) ) then
+ !
+ eps_prod_eps = bra_ket(r2,1,p1,-1)*bra_ket(r1,-1,p2,1) &
+ *c1jtemp*c2temp/denom
+ !
+ else if ( (i1 == -1) .and. (i2 == 1) ) then
+ !
+ eps_prod_eps = bra_ket(r1,1,p2,-1)*bra_ket(r2,-1,p1,1) &
+ *c2jtemp*c1temp/denom
+ !
+ else if ( (i1 == -1) .and. (i2 == -1) ) then
+ !
+ eps_prod_eps = bra_ket(p2,-1,p1,1)*bra_ket(r1,1,r2,-1) &
+ *c1temp*c2temp/denom
+ else
+ eps_prod_eps = huge(1.0_ki)
+ !
+ end if
+ !
+ end function eps_prod_eps
+ !
+ !****f* src/module/spinor/scalar
+ ! NAME
+ !
+ ! Function scalar
+ !
+ ! USAGE
+ !
+ ! real = scalar(p1,p2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function compute the scalar product of two 4 momentum
+ !
+ ! INPUTS
+ !
+ ! * p1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * p2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function scalar(p1,p2)
+ !
+ real(ki), intent (in), dimension(4) :: p1,p2
+ real(ki) :: scalar
+ !
+ scalar = p1(1)*p2(1) - p1(2)*p2(2) - p1(3)*p2(3) - p1(4)*p2(4)
+ !
+ end function scalar
+ !
+ !****f* src/module/spinor/e_
+ ! NAME
+ !
+ ! Function e_
+ !
+ ! USAGE
+ !
+ ! complex = e_(k1,k2,k3,k4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the antisymetric tensor epsilon
+ ! From Thomas Reiter
+ !
+ ! INPUTS
+ !
+ ! * k1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * k2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * k3 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ ! * k4 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ pure function e_(k1,k2,k3,k4)
+ !
+ real(ki), intent (in), dimension(4) :: k1, k2, k3, k4
+ complex(ki) :: e_
+ !
+ real(ki) :: res
+ real(ki) :: k12, k23, k34, k13, k14, k24
+ !
+ k12 = k3(1)*k4(2)-k3(2)*k4(1)
+ k23 = k3(2)*k4(3)-k3(3)*k4(2)
+ k34 = k3(3)*k4(4)-k3(4)*k4(3)
+ k13 = k3(1)*k4(3)-k3(3)*k4(1)
+ k14 = k3(1)*k4(4)-k3(4)*k4(1)
+ k24 = k3(2)*k4(4)-k3(4)*k4(2)
+ !
+ res = k1(1)*(k2(2)*k34 - k2(3)*k24 + k2(4)*k23)&
+ & + k1(2)*(k2(3)*k14 - k2(1)*k34 - k2(4)*k13)&
+ & + k1(3)*(k2(1)*k24 - k2(2)*k14 + k2(4)*k12)&
+ & + k1(4)*(k2(2)*k13 - k2(1)*k23 - k2(3)*k12)
+ !
+ e_ = i_*res
+ !
+ end function e_
+ !
+end module spinor
+!
Index: 95/branches/golem95_without_olo_cmake/src/module/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/Makefile.am (revision 119)
@@ -0,0 +1,19 @@
+noinst_LTLIBRARIES=libgolem95_module.la
+libgolem95_module_la_SOURCES= precision_golem.f90 \
+ tri.f90 array.f90 parametre.f90 constante.f90 \
+ s_matrix_type.f90 equal.f90 multiply_div.f90 \
+ sortie_erreur.f90 cache.f90 \
+ form_factor_type.f90 kronecker.f90 z_log.f90\
+ spinor.f90 translate.f90 zdilog.f90
+nodist_pkginclude_HEADERS= precision_golem.mod \
+ tri_croissant.mod array.mod \
+ cache.mod constante.mod s_matrix_type.mod dilogarithme.mod \
+ equal.mod form_factor_type.mod kronecker.mod logarithme.mod \
+ multiply_div.mod parametre.mod \
+ sortie_erreur.mod spinor.mod translate.mod
+AM_FCFLAGS= \
+ -I$(top_builddir)/avh_olo-2.2.1
+
+CLEANFILES=$(nodist_pkginclude_HEADERS)
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/module/array.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/array.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/array.f90 (revision 119)
@@ -0,0 +1,683 @@
+!
+!****h* src/module/array
+! NAME
+!
+! Module array
+!
+! USAGE
+!
+! use array
+!
+! DESCRIPTION
+!
+! This module contains six functions which enable set manipulations knowing that
+! a set of integers is represented with the digits of an integer. The six functions
+! are : packb, unpackb, pminus, punion, countb and locateb
+!
+! OUTPUT
+!
+! This module exports six functions:
+!
+! * packb -- to transform a set of integers into an integer (unique transformation)
+! * unpackb -- to perform the inverse operation as packb do
+! * pminus -- to subtract two sets
+! * punion -- to add two sets
+! * countb -- to count the number of element of the set
+! * locateb -- to give the location of an element in a set
+!
+! USES
+!
+! none
+!
+!*****
+!
+module array
+ !
+ implicit none
+ !
+ integer, dimension(0:255), parameter :: bit_count = (/0,1,1,2,1,2,2,3,1,2,2,3&
+ &,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2&
+ &,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4&
+ &,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5&
+ &,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6&
+ &,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3&
+ &,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5&
+ &,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8/)
+ !
+ integer, dimension(0:2047), parameter :: bit_sets = (/&
+ &-1,-1,-1,-1,-1,-1,-1,-1,&
+ &0,-1,-1,-1,-1,-1,-1,-1,&
+ &1,-1,-1,-1,-1,-1,-1,-1,&
+ &0,1,-1,-1,-1,-1,-1,-1,&
+ &2,-1,-1,-1,-1,-1,-1,-1,&
+ &0,2,-1,-1,-1,-1,-1,-1,&
+ &1,2,-1,-1,-1,-1,-1,-1,&
+ &0,1,2,-1,-1,-1,-1,-1,&
+ &3,-1,-1,-1,-1,-1,-1,-1,&
+ &0,3,-1,-1,-1,-1,-1,-1,&
+ &1,3,-1,-1,-1,-1,-1,-1,&
+ &0,1,3,-1,-1,-1,-1,-1,&
+ &2,3,-1,-1,-1,-1,-1,-1,&
+ &0,2,3,-1,-1,-1,-1,-1,&
+ &1,2,3,-1,-1,-1,-1,-1,&
+ &0,1,2,3,-1,-1,-1,-1,&
+ &4,-1,-1,-1,-1,-1,-1,-1,&
+ &0,4,-1,-1,-1,-1,-1,-1,&
+ &1,4,-1,-1,-1,-1,-1,-1,&
+ &0,1,4,-1,-1,-1,-1,-1,&
+ &2,4,-1,-1,-1,-1,-1,-1,&
+ &0,2,4,-1,-1,-1,-1,-1,&
+ &1,2,4,-1,-1,-1,-1,-1,&
+ &0,1,2,4,-1,-1,-1,-1,&
+ &3,4,-1,-1,-1,-1,-1,-1,&
+ &0,3,4,-1,-1,-1,-1,-1,&
+ &1,3,4,-1,-1,-1,-1,-1,&
+ &0,1,3,4,-1,-1,-1,-1,&
+ &2,3,4,-1,-1,-1,-1,-1,&
+ &0,2,3,4,-1,-1,-1,-1,&
+ &1,2,3,4,-1,-1,-1,-1,&
+ &0,1,2,3,4,-1,-1,-1,&
+ &5,-1,-1,-1,-1,-1,-1,-1,&
+ &0,5,-1,-1,-1,-1,-1,-1,&
+ &1,5,-1,-1,-1,-1,-1,-1,&
+ &0,1,5,-1,-1,-1,-1,-1,&
+ &2,5,-1,-1,-1,-1,-1,-1,&
+ &0,2,5,-1,-1,-1,-1,-1,&
+ &1,2,5,-1,-1,-1,-1,-1,&
+ &0,1,2,5,-1,-1,-1,-1,&
+ &3,5,-1,-1,-1,-1,-1,-1,&
+ &0,3,5,-1,-1,-1,-1,-1,&
+ &1,3,5,-1,-1,-1,-1,-1,&
+ &0,1,3,5,-1,-1,-1,-1,&
+ &2,3,5,-1,-1,-1,-1,-1,&
+ &0,2,3,5,-1,-1,-1,-1,&
+ &1,2,3,5,-1,-1,-1,-1,&
+ &0,1,2,3,5,-1,-1,-1,&
+ &4,5,-1,-1,-1,-1,-1,-1,&
+ &0,4,5,-1,-1,-1,-1,-1,&
+ &1,4,5,-1,-1,-1,-1,-1,&
+ &0,1,4,5,-1,-1,-1,-1,&
+ &2,4,5,-1,-1,-1,-1,-1,&
+ &0,2,4,5,-1,-1,-1,-1,&
+ &1,2,4,5,-1,-1,-1,-1,&
+ &0,1,2,4,5,-1,-1,-1,&
+ &3,4,5,-1,-1,-1,-1,-1,&
+ &0,3,4,5,-1,-1,-1,-1,&
+ &1,3,4,5,-1,-1,-1,-1,&
+ &0,1,3,4,5,-1,-1,-1,&
+ &2,3,4,5,-1,-1,-1,-1,&
+ &0,2,3,4,5,-1,-1,-1,&
+ &1,2,3,4,5,-1,-1,-1,&
+ &0,1,2,3,4,5,-1,-1,&
+ &6,-1,-1,-1,-1,-1,-1,-1,&
+ &0,6,-1,-1,-1,-1,-1,-1,&
+ &1,6,-1,-1,-1,-1,-1,-1,&
+ &0,1,6,-1,-1,-1,-1,-1,&
+ &2,6,-1,-1,-1,-1,-1,-1,&
+ &0,2,6,-1,-1,-1,-1,-1,&
+ &1,2,6,-1,-1,-1,-1,-1,&
+ &0,1,2,6,-1,-1,-1,-1,&
+ &3,6,-1,-1,-1,-1,-1,-1,&
+ &0,3,6,-1,-1,-1,-1,-1,&
+ &1,3,6,-1,-1,-1,-1,-1,&
+ &0,1,3,6,-1,-1,-1,-1,&
+ &2,3,6,-1,-1,-1,-1,-1,&
+ &0,2,3,6,-1,-1,-1,-1,&
+ &1,2,3,6,-1,-1,-1,-1,&
+ &0,1,2,3,6,-1,-1,-1,&
+ &4,6,-1,-1,-1,-1,-1,-1,&
+ &0,4,6,-1,-1,-1,-1,-1,&
+ &1,4,6,-1,-1,-1,-1,-1,&
+ &0,1,4,6,-1,-1,-1,-1,&
+ &2,4,6,-1,-1,-1,-1,-1,&
+ &0,2,4,6,-1,-1,-1,-1,&
+ &1,2,4,6,-1,-1,-1,-1,&
+ &0,1,2,4,6,-1,-1,-1,&
+ &3,4,6,-1,-1,-1,-1,-1,&
+ &0,3,4,6,-1,-1,-1,-1,&
+ &1,3,4,6,-1,-1,-1,-1,&
+ &0,1,3,4,6,-1,-1,-1,&
+ &2,3,4,6,-1,-1,-1,-1,&
+ &0,2,3,4,6,-1,-1,-1,&
+ &1,2,3,4,6,-1,-1,-1,&
+ &0,1,2,3,4,6,-1,-1,&
+ &5,6,-1,-1,-1,-1,-1,-1,&
+ &0,5,6,-1,-1,-1,-1,-1,&
+ &1,5,6,-1,-1,-1,-1,-1,&
+ &0,1,5,6,-1,-1,-1,-1,&
+ &2,5,6,-1,-1,-1,-1,-1,&
+ &0,2,5,6,-1,-1,-1,-1,&
+ &1,2,5,6,-1,-1,-1,-1,&
+ &0,1,2,5,6,-1,-1,-1,&
+ &3,5,6,-1,-1,-1,-1,-1,&
+ &0,3,5,6,-1,-1,-1,-1,&
+ &1,3,5,6,-1,-1,-1,-1,&
+ &0,1,3,5,6,-1,-1,-1,&
+ &2,3,5,6,-1,-1,-1,-1,&
+ &0,2,3,5,6,-1,-1,-1,&
+ &1,2,3,5,6,-1,-1,-1,&
+ &0,1,2,3,5,6,-1,-1,&
+ &4,5,6,-1,-1,-1,-1,-1,&
+ &0,4,5,6,-1,-1,-1,-1,&
+ &1,4,5,6,-1,-1,-1,-1,&
+ &0,1,4,5,6,-1,-1,-1,&
+ &2,4,5,6,-1,-1,-1,-1,&
+ &0,2,4,5,6,-1,-1,-1,&
+ &1,2,4,5,6,-1,-1,-1,&
+ &0,1,2,4,5,6,-1,-1,&
+ &3,4,5,6,-1,-1,-1,-1,&
+ &0,3,4,5,6,-1,-1,-1,&
+ &1,3,4,5,6,-1,-1,-1,&
+ &0,1,3,4,5,6,-1,-1,&
+ &2,3,4,5,6,-1,-1,-1,&
+ &0,2,3,4,5,6,-1,-1,&
+ &1,2,3,4,5,6,-1,-1,&
+ &0,1,2,3,4,5,6,-1,&
+ &7,-1,-1,-1,-1,-1,-1,-1,&
+ &0,7,-1,-1,-1,-1,-1,-1,&
+ &1,7,-1,-1,-1,-1,-1,-1,&
+ &0,1,7,-1,-1,-1,-1,-1,&
+ &2,7,-1,-1,-1,-1,-1,-1,&
+ &0,2,7,-1,-1,-1,-1,-1,&
+ &1,2,7,-1,-1,-1,-1,-1,&
+ &0,1,2,7,-1,-1,-1,-1,&
+ &3,7,-1,-1,-1,-1,-1,-1,&
+ &0,3,7,-1,-1,-1,-1,-1,&
+ &1,3,7,-1,-1,-1,-1,-1,&
+ &0,1,3,7,-1,-1,-1,-1,&
+ &2,3,7,-1,-1,-1,-1,-1,&
+ &0,2,3,7,-1,-1,-1,-1,&
+ &1,2,3,7,-1,-1,-1,-1,&
+ &0,1,2,3,7,-1,-1,-1,&
+ &4,7,-1,-1,-1,-1,-1,-1,&
+ &0,4,7,-1,-1,-1,-1,-1,&
+ &1,4,7,-1,-1,-1,-1,-1,&
+ &0,1,4,7,-1,-1,-1,-1,&
+ &2,4,7,-1,-1,-1,-1,-1,&
+ &0,2,4,7,-1,-1,-1,-1,&
+ &1,2,4,7,-1,-1,-1,-1,&
+ &0,1,2,4,7,-1,-1,-1,&
+ &3,4,7,-1,-1,-1,-1,-1,&
+ &0,3,4,7,-1,-1,-1,-1,&
+ &1,3,4,7,-1,-1,-1,-1,&
+ &0,1,3,4,7,-1,-1,-1,&
+ &2,3,4,7,-1,-1,-1,-1,&
+ &0,2,3,4,7,-1,-1,-1,&
+ &1,2,3,4,7,-1,-1,-1,&
+ &0,1,2,3,4,7,-1,-1,&
+ &5,7,-1,-1,-1,-1,-1,-1,&
+ &0,5,7,-1,-1,-1,-1,-1,&
+ &1,5,7,-1,-1,-1,-1,-1,&
+ &0,1,5,7,-1,-1,-1,-1,&
+ &2,5,7,-1,-1,-1,-1,-1,&
+ &0,2,5,7,-1,-1,-1,-1,&
+ &1,2,5,7,-1,-1,-1,-1,&
+ &0,1,2,5,7,-1,-1,-1,&
+ &3,5,7,-1,-1,-1,-1,-1,&
+ &0,3,5,7,-1,-1,-1,-1,&
+ &1,3,5,7,-1,-1,-1,-1,&
+ &0,1,3,5,7,-1,-1,-1,&
+ &2,3,5,7,-1,-1,-1,-1,&
+ &0,2,3,5,7,-1,-1,-1,&
+ &1,2,3,5,7,-1,-1,-1,&
+ &0,1,2,3,5,7,-1,-1,&
+ &4,5,7,-1,-1,-1,-1,-1,&
+ &0,4,5,7,-1,-1,-1,-1,&
+ &1,4,5,7,-1,-1,-1,-1,&
+ &0,1,4,5,7,-1,-1,-1,&
+ &2,4,5,7,-1,-1,-1,-1,&
+ &0,2,4,5,7,-1,-1,-1,&
+ &1,2,4,5,7,-1,-1,-1,&
+ &0,1,2,4,5,7,-1,-1,&
+ &3,4,5,7,-1,-1,-1,-1,&
+ &0,3,4,5,7,-1,-1,-1,&
+ &1,3,4,5,7,-1,-1,-1,&
+ &0,1,3,4,5,7,-1,-1,&
+ &2,3,4,5,7,-1,-1,-1,&
+ &0,2,3,4,5,7,-1,-1,&
+ &1,2,3,4,5,7,-1,-1,&
+ &0,1,2,3,4,5,7,-1,&
+ &6,7,-1,-1,-1,-1,-1,-1,&
+ &0,6,7,-1,-1,-1,-1,-1,&
+ &1,6,7,-1,-1,-1,-1,-1,&
+ &0,1,6,7,-1,-1,-1,-1,&
+ &2,6,7,-1,-1,-1,-1,-1,&
+ &0,2,6,7,-1,-1,-1,-1,&
+ &1,2,6,7,-1,-1,-1,-1,&
+ &0,1,2,6,7,-1,-1,-1,&
+ &3,6,7,-1,-1,-1,-1,-1,&
+ &0,3,6,7,-1,-1,-1,-1,&
+ &1,3,6,7,-1,-1,-1,-1,&
+ &0,1,3,6,7,-1,-1,-1,&
+ &2,3,6,7,-1,-1,-1,-1,&
+ &0,2,3,6,7,-1,-1,-1,&
+ &1,2,3,6,7,-1,-1,-1,&
+ &0,1,2,3,6,7,-1,-1,&
+ &4,6,7,-1,-1,-1,-1,-1,&
+ &0,4,6,7,-1,-1,-1,-1,&
+ &1,4,6,7,-1,-1,-1,-1,&
+ &0,1,4,6,7,-1,-1,-1,&
+ &2,4,6,7,-1,-1,-1,-1,&
+ &0,2,4,6,7,-1,-1,-1,&
+ &1,2,4,6,7,-1,-1,-1,&
+ &0,1,2,4,6,7,-1,-1,&
+ &3,4,6,7,-1,-1,-1,-1,&
+ &0,3,4,6,7,-1,-1,-1,&
+ &1,3,4,6,7,-1,-1,-1,&
+ &0,1,3,4,6,7,-1,-1,&
+ &2,3,4,6,7,-1,-1,-1,&
+ &0,2,3,4,6,7,-1,-1,&
+ &1,2,3,4,6,7,-1,-1,&
+ &0,1,2,3,4,6,7,-1,&
+ &5,6,7,-1,-1,-1,-1,-1,&
+ &0,5,6,7,-1,-1,-1,-1,&
+ &1,5,6,7,-1,-1,-1,-1,&
+ &0,1,5,6,7,-1,-1,-1,&
+ &2,5,6,7,-1,-1,-1,-1,&
+ &0,2,5,6,7,-1,-1,-1,&
+ &1,2,5,6,7,-1,-1,-1,&
+ &0,1,2,5,6,7,-1,-1,&
+ &3,5,6,7,-1,-1,-1,-1,&
+ &0,3,5,6,7,-1,-1,-1,&
+ &1,3,5,6,7,-1,-1,-1,&
+ &0,1,3,5,6,7,-1,-1,&
+ &2,3,5,6,7,-1,-1,-1,&
+ &0,2,3,5,6,7,-1,-1,&
+ &1,2,3,5,6,7,-1,-1,&
+ &0,1,2,3,5,6,7,-1,&
+ &4,5,6,7,-1,-1,-1,-1,&
+ &0,4,5,6,7,-1,-1,-1,&
+ &1,4,5,6,7,-1,-1,-1,&
+ &0,1,4,5,6,7,-1,-1,&
+ &2,4,5,6,7,-1,-1,-1,&
+ &0,2,4,5,6,7,-1,-1,&
+ &1,2,4,5,6,7,-1,-1,&
+ &0,1,2,4,5,6,7,-1,&
+ &3,4,5,6,7,-1,-1,-1,&
+ &0,3,4,5,6,7,-1,-1,&
+ &1,3,4,5,6,7,-1,-1,&
+ &0,1,3,4,5,6,7,-1,&
+ &2,3,4,5,6,7,-1,-1,&
+ &0,2,3,4,5,6,7,-1,&
+ &1,2,3,4,5,6,7,-1,&
+ &0,1,2,3,4,5,6,7/)
+ !
+contains
+ !
+ !****f* src/module/packb
+ ! NAME
+ !
+ ! Function packb
+ !
+ ! USAGE
+ !
+ ! integer = packb(set)
+ !
+ ! DESCRIPTION
+ !
+ ! This function transforms a set of integers into
+ ! an integer, this integer is unique
+ ! Apparently Fortran allows to use arrays
+ ! for the second argument which saves us a loop.
+ !
+ ! The elements in set have to be <= 31 which should
+ ! not be a problem for realistic applications.
+ !
+ ! INPUTS
+ !
+ ! * set -- a set of integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! an integer
+ !
+ ! EXAMPLE
+ !
+ ! i = packb( (/1,2,3/) )
+ ! i is 14 which is in binary base 1110
+ !
+ !*****
+ !
+ pure function packb(set) result(bits)
+ !
+ integer, intent(in), dimension(:) :: set
+ integer :: bits
+ !
+ bits = sum( ibset(0,pos=set) )
+ !
+ end function packb
+ !
+ !****f* src/module/unpackb
+ ! NAME
+ !
+ ! Function unpackb
+ !
+ ! USAGE
+ !
+ ! integer_set = unpackb(bits,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function performs the inverse operation
+ ! as packb does : from an integer, it reconstructs the
+ ! set of integers
+ !
+ ! INPUTS
+ !
+ ! * bits -- an integer
+ ! * dim -- an integer, the dimension of the set obtained
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! an integer array of rank 1 and shape dim
+ !
+ ! EXAMPLE
+ !
+ ! set = unpackb( 14 )
+ ! set is (/1,2,3/) because the binary representation of 14 is 1110
+ !
+ !*****
+ !
+ pure function unpackb(bits,dim)
+ !
+ integer, intent(in) :: bits
+ integer, intent(in) :: dim
+ integer, dimension(dim) :: unpackb
+ !
+ integer :: i,k,n
+ !
+ if (bits < 256) then
+ !
+ n = bits * 8
+ unpackb = bit_sets(n:n + (dim-1))
+ !
+ else
+ !
+ i = bits
+ k = 0
+ n = 1
+ !
+ do while (i /= 0)
+ !
+ if (modulo(i,2) == 1) then
+ !
+ unpackb(n) = k
+ n = n + 1
+ !
+ end if
+ !
+ k = k+1
+ i = ishft(i,-1)
+ !
+ end do
+ !
+ end if
+ !
+ end function unpackb
+ !
+ !****f* src/module/pminus
+ ! NAME
+ !
+ ! Function pminus
+ !
+ ! USAGE
+ !
+ ! integer = pminus(bits1,bits2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function subtracts the set which is
+ ! represented by bits2 to the one that is
+ ! represented by bits1. If the two sets set1 and set2
+ ! are defined by set1=unpackb(bits1,dim1)
+ ! and set2=unpackb(bits2,dim2), then ib = pminus(bits1,bits2)
+ ! gives an integer such that unpackb(ib,dim_ib) is the set
+ ! of integers of shape dim1-dim2 (dim1 > dim2) which contains
+ ! the elements of set1 which do not belong to set2
+ ! Note that if dim1 < dim2, the result returns is pminus(bits2,bits1)
+ ! If none of the elements of set2 belongs to set1, then
+ ! pminus(bits1,bits2) = bits1
+ !
+ ! INPUTS
+ !
+ ! * bits1 -- an integer
+ ! * bits2 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! an integer
+ !
+ ! EXAMPLE
+ !
+ ! i1 = packb( (/1,2,3/) )
+ ! i2 = packb( (/2/) )
+ ! i3 = pminus(i1,i2)
+ ! unpackb(i3) is the set (/1,3/)
+ !
+ !*****
+ !
+ pure function pminus(bits1, bits2) result(bits)
+ !
+ integer, intent(in) :: bits1, bits2
+ integer :: bits
+ !
+ integer :: cits1, cits2
+ !
+ if ( bits1 >= bits2 ) then
+ !
+ cits1 = bits1
+ cits2 = bits2
+ !
+ else
+ !
+ cits1 = bits2
+ cits2 = bits1
+ !
+ end if
+ !
+ bits = iand(cits1,not(cits2))
+ !
+ end function pminus
+ !
+ !****f* src/module/punion
+ ! NAME
+ !
+ ! Function punion
+ !
+ ! USAGE
+ !
+ ! integer = punion(bits1,bits2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function adds the set which is
+ ! represented by bits2 to the one that is
+ ! represented by bits1. If the two sets set1 and set2
+ ! are defined by set1=unpackb(bits1,dim1)
+ ! and set2=unpackb(bits2,dim2), then ib = punion(bits1,bits2)
+ ! gives an integer such that unpackb(ib,dim_ib) is the set
+ ! of integers of shape dim1+dim2 which contains
+ ! the elements of set1 and those of set2
+ ! Note that if some elements of set2 belong to set1, they do not
+ ! appear twice
+ !
+ ! INPUTS
+ !
+ ! * bits1 -- an integer
+ ! * bits2 -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! an integer
+ !
+ ! EXAMPLE
+ !
+ ! i1 = packb( (/1,3,4/) )
+ ! i2 = packb( (/2/) )
+ ! i3 = punion(i1,i2)
+ ! unpackb(i3) is the set (/1,2,3,4/)
+ !
+ !*****
+ !
+ pure function punion(bits1, bits2) result(bits)
+ !
+ integer, intent(in) :: bits1, bits2
+ integer :: bits
+ !
+ bits = ior(bits1,bits2)
+ !
+ end function punion
+ !
+ !
+ !****f* src/module/countb
+ ! NAME
+ !
+ ! Function countb
+ !
+ ! USAGE
+ !
+ ! integer = countb(bits)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the shape of the rank 1 integer
+ ! set given by unpackb(bits,dim)
+ !
+ ! INPUTS
+ !
+ ! * bits -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (pure function)
+ !
+ ! RETURN VALUE
+ !
+ ! an integer
+ !
+ ! EXAMPLE
+ !
+ ! i1 = packb( (/1,2,3/) )
+ ! i2 = countb(i1)
+ ! i2 is 3
+ !
+ !*****
+ !
+ pure function countb(bits)
+ !
+ integer, intent(in) :: bits
+ integer :: countb
+ !
+ integer :: i
+ !
+ if (bits < 256) then
+ !
+ countb = bit_count(bits)
+ !
+ else
+ !
+ countb = 0
+ i = bits
+ do while (i /= 0)
+ !
+ countb = countb + bit_count(iand(i, 255))
+ i = ishft(i,-8)
+ !
+ end do
+ !
+ end if
+ !
+ end function countb
+ !
+ !
+ !****f* src/module/locateb
+ ! NAME
+ !
+ ! Function locateb
+ !
+ ! USAGE
+ !
+ ! integer = locateb(i,bits)
+ !
+ ! DESCRIPTION
+ !
+ ! The function locateb returns the location of the element i
+ ! in the set given by unpackb(bits,countb(bits)).
+ ! If i does not belong to bits, the function locateb
+ ! returns -1
+ !
+ !
+ ! INPUTS
+ !
+ ! * i -- an integer, the element of a
+ ! * bits -- an integer
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect (elemental)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns an integer, the location of i in the array a
+ !
+ ! EXAMPLE
+ !
+ ! bits = packb( (/3,5,6,7/) )
+ ! j = locateb(5,bits) --> j is equal to 2
+ ! j = locateb(6,bits) --> j is equal to 3
+ ! j = locateb(4,bits) --> j is equal to -1
+ ! Note that if the set is not ordered, the packing
+ ! orders it.
+ ! Note also that this function has the attribute elemental
+ ! that means that, the argument can be a set of integers:
+ ! locateb( (/3,7/) , bits) will return (/1,4/)
+ !
+ !
+ !*****
+ !
+ elemental function locateb(i,bits)
+ !
+ integer, intent(in) :: bits
+ integer, intent(in) :: i
+ integer :: locateb
+ !
+ integer :: ib
+ !
+ if (btest(bits,i)) then
+ !
+ ib = ibits(bits,0,i)
+ if (ib < 256) then
+ !
+ locateb = bit_count(ib)+1
+ !
+ else
+ !
+ locateb = countb(ib)+1
+ !
+ end if
+ !
+ else
+ !
+ locateb = -1
+ !
+ end if
+ !
+ end function locateb
+ !
+end module array
Index: 95/branches/golem95_without_olo_cmake/src/module/precision_golem.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/precision_golem.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/precision_golem.f90 (revision 119)
@@ -0,0 +1,37 @@
+!
+!****h* src/module/precision_golem
+! NAME
+!
+! Module precision_golem
+!
+! USAGE
+!
+! use precision_golem
+!
+! DESCRIPTION
+!
+! This module defines the parameter ki which gives the representation
+! of the real and complex numbers in golem
+!
+! OUTPUT
+!
+! The integer parameter ki
+! The integer parameter ki_avh, which is the real kind used in avh_olo
+! The integer parameter ki_lt, which is the real kind used in LoopTools
+!
+! USES
+!
+! No uses
+!
+!*****
+module precision_golem
+ use avh_olo_kinds, only: ki_avh => kindr2
+ implicit none
+ private
+ !
+ integer, parameter, public :: ki=kind(1.0d0)
+!AC!integer, parameter, public :: ki_lt=kind(1.0d0)
+
+ public :: ki_avh
+end module precision_golem
+
Index: 95/branches/golem95_without_olo_cmake/src/module/parametre.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/parametre.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/parametre.f90 (revision 119)
@@ -0,0 +1,274 @@
+!
+!****h* src/module/parametre
+! NAME
+!
+! Module parametre
+!
+! USAGE
+!
+! use parametre
+!
+! DESCRIPTION
+!
+! This module is used to pass some variables used by many functions of
+! the GOLEM program. Note that these variables can be rewritten.
+! It contains also a routine to print the parameters (it prints on unit 6)
+!
+! OUTPUT
+!
+! It exports the variables:
+! * tolerance -- a real (type ki), the tolerance for the numerical integration
+! * lambda_par -- a real (type ki), a parameter of the contour deformation
+! * alpha_par -- a real (type ki), a parameter of the contour deformation
+! * beta_par -- a real (type ki), a parameter of the contour deformation
+! * coupure_3p2m -- a real (type ki), a cut between numerical and analytical
+! computation for two mass three point functions
+! * coupure_3p3m -- a real (type ki), a cut between numerical and analytical
+! computation for three mass three point functions
+! * coupure_4p1m -- a real (type ki), a cut between numerical and analytical
+! computation for one mass four point functions
+! * coupure_4p2m_opp -- a real (type ki), a cut between numerical and analytical
+! computation for two mass opposite four point functions
+! * coupure_4p2m_adj -- a real (type ki), a cut between numerical and analytical
+! computation for two mass adjacent four point functions
+! * coupure_4p3m -- a real (type ki), a cut between numerical and analytical
+! computation for three mass four point functions
+! * coupure_4p4m -- a real (type ki), a cut between numerical and analytical
+! computation for four mass four point functions (not active)
+! * coupure_3p2m_1mi -- a real (type ki), a cut between numerical and analytical
+! computation for one internal mass two external mass three point functions
+! * rat_or_tot_par -- a character (len=3)
+! * rmass_or_cmass_par -- a character (len=5)
+! * if_print_info_par -- a logical, if true it prints some informations concerning the numerical
+! integration
+! * if_print_warn_par -- a logical, if true it prints some informations concerning the warning
+! about numerical precision
+! * accuracy_par -- the accuracy for the matrix inversion and the numerical integration
+! * not_enough_accuracy_par -- a flag to ring the bell if the accuracy is not reached in
+! in the matrix inversion and the numerical integration
+! * mu2_scale_par -- the square of the renormalisation scale
+! * subroutine print_parameter -- to print these variables
+! * withlt -- flag to use LoopTools instead of avh_olo for finite D0,C0
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+module parametre
+ !
+ use precision_golem
+ implicit none
+ !
+ ! here everything is public except what has been defined explicitly as private
+ private :: ki
+ !
+ type rat_or_tot_string
+ character(len=3) :: image
+ logical :: rat_selected
+ logical :: tot_selected
+ end type rat_or_tot_string
+ !
+ type rmass_or_cmass_string
+ character(len=5) :: image
+ logical :: rmass_selected
+ logical :: cmass_selected
+ end type rmass_or_cmass_string
+ !
+ !
+ real(ki),save :: tolerance = 1.e-8_ki ! precision for Gaussian integration
+ !
+ real(ki),save :: lambda_par = 1._ki ! parameters of the contour
+ real(ki),save :: alpha_par = 1._ki ! deformation
+ real(ki),save :: beta_par = 1._ki !
+ !
+ real(ki),save :: coupure_3p1m_2mi = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for one mass three point functions (mod_gn)
+ real(ki),save :: coupure_3p2m = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for two mass three point functions
+ real(ki),save :: coupure_3p3m = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for three mass three point functions
+ real(ki),save :: coupure_4p1m = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for one/zero mass four point functions
+ real(ki),save :: coupure_4p2m_opp = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for two opposite mass four point functions
+ real(ki),save :: coupure_4p2m_adj = 5.e-3_ki! value to switch between analytical and numerical
+ ! evaluation for two adjacent mass four point functions
+ real(ki),save :: coupure_4p3m = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for three mass four point functions
+ real(ki),save :: coupure_4p4m = 0._ki ! value to switch between analytical and numerical
+ ! evaluation for four mass four point functions
+ real(ki),save :: coupure_3p2m_1mi = 5.e-3_ki ! value to switch between analytical and numerical
+ ! evaluation for one internal mass two external mass three point functions
+ real(ki),save :: cut_s_abs = 10._ki*epsilon(1._ki)
+ real(ki),save :: cut_s_over_m = 1000000._ki*epsilon(1._ki)
+
+ type(rat_or_tot_string),parameter :: tot = rat_or_tot_string('tot', .false., .true.)
+ type(rat_or_tot_string),parameter :: rat = rat_or_tot_string('rat', .true., .false.)
+
+ type(rat_or_tot_string),save :: rat_or_tot_par = tot
+ !type(rat_or_tot_string),save :: rat_or_tot_par = rat
+
+
+ type(rmass_or_cmass_string),parameter :: rmass = rmass_or_cmass_string('rmass', .true., .false.)
+ type(rmass_or_cmass_string),parameter :: cmass = rmass_or_cmass_string('cmass', .false., .true.)
+
+ type(rmass_or_cmass_string),save :: rmass_or_cmass_par = cmass
+
+ logical, save :: if_print_info_par = .false. ! if true print information
+ logical, save :: if_print_warn_par = .false. ! if true print information for warning
+ real(ki),save :: accuracy_par = 1.e-10_ki ! the accuracy for the matrix inversion and the numerical integration
+ logical, save :: not_enough_accuracy_par = .false. !
+ real(ki), save :: mu2_scale_par = 1._ki ! the square of the renormalisation scale
+ logical, save :: olo = .false. ! flag set to true as soon as avh_olo has been called once
+ ! added to include LT option Jan2011
+ logical, save :: withlt = .false.
+
+ interface assignment(=)
+ module procedure assign_rat_or_tot_string
+ end interface
+
+ interface operator(==)
+ module procedure equals_rat_or_tot_string
+ module procedure equals_rat_or_tot_string_revd
+ end interface
+
+ private :: assign_rat_or_tot_string
+ private :: equals_rat_or_tot_string
+ private :: equals_rat_or_tot_string_revd
+
+ interface assignment(=)
+ module procedure assign_rmass_or_cmass_string
+ end interface
+
+ interface operator(==)
+ module procedure equals_rmass_or_cmass_string
+ module procedure equals_rmass_or_cmass_string_r
+ end interface
+
+ private :: assign_rmass_or_cmass_string
+ private :: equals_rmass_or_cmass_string
+ private :: equals_rmass_or_cmass_string_r
+
+ contains
+ !
+ pure subroutine assign_rat_or_tot_string(rot, ch)
+ implicit none
+ type(rat_or_tot_string), intent(out) :: rot
+ character(len=3), intent(in) :: ch
+
+ rot%image = ch
+ rot%rat_selected = ch .eq. 'rat'
+ rot%tot_selected = ch .eq. 'tot'
+ end subroutine assign_rat_or_tot_string
+ !
+ pure function equals_rat_or_tot_string(rot, ch) result(test)
+ implicit none
+ type(rat_or_tot_string), intent(in) :: rot
+ character(len=3), intent(in) :: ch
+ logical :: test
+
+ test = rot%image .eq. ch
+ end function equals_rat_or_tot_string
+ !
+ pure function equals_rat_or_tot_string_revd(ch, rot) result(test)
+ implicit none
+ character(len=3), intent(in) :: ch
+ type(rat_or_tot_string), intent(in) :: rot
+ logical :: test
+
+ test = rot%image .eq. ch
+ end function equals_rat_or_tot_string_revd
+ !
+ !
+ pure subroutine assign_rmass_or_cmass_string(roc, ch)
+ implicit none
+ type(rmass_or_cmass_string), intent(out) :: roc
+ character(len=5), intent(in) :: ch
+
+ roc%image = ch
+ roc%rmass_selected = ch .eq. 'rmass'
+ roc%cmass_selected = ch .eq. 'cmass'
+ end subroutine assign_rmass_or_cmass_string
+ !
+ pure function equals_rmass_or_cmass_string(roc, ch) result(test)
+ implicit none
+ type(rmass_or_cmass_string), intent(in) :: roc
+ character(len=5), intent(in) :: ch
+ logical :: test
+
+ test = roc%image .eq. ch
+ end function equals_rmass_or_cmass_string
+ !
+ pure function equals_rmass_or_cmass_string_r(ch, roc) result(test)
+ implicit none
+ character(len=5), intent(in) :: ch
+ type(rmass_or_cmass_string), intent(in) :: roc
+ logical :: test
+
+ test = roc%image .eq. ch
+ end function equals_rmass_or_cmass_string_r
+ !
+ !
+ !****f* src/module/print_parameter
+ ! NAME
+ !
+ ! Subroutine print_parameter
+ !
+ ! USAGE
+ !
+ ! call print_parameter()
+ !
+ ! DESCRIPTION
+ !
+ ! This routine print the variables defined in the module parametre
+ !
+ ! INPUTS
+ !
+ ! No inputs
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It prints on the unit 6
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ subroutine print_parameter()
+ !
+ integer :: unit
+ !
+ unit = 6
+ !
+ write(unit,*) 'tolerance :',tolerance
+ write(unit,*) 'lambda_par :',lambda_par
+ write(unit,*) 'alpha_par :',alpha_par
+ write(unit,*) 'beta_par :',beta_par
+ write(unit,*) 'coupure_3p2m :',coupure_3p2m
+ write(unit,*) 'coupure_3p3m :',coupure_3p3m
+ write(unit,*) 'coupure_4p1m :',coupure_4p1m
+ write(unit,*) 'coupure_4p2m_opp :',coupure_4p2m_opp
+ write(unit,*) 'coupure_4p2m_adj :',coupure_4p2m_adj
+ write(unit,*) 'coupure_4p3m :',coupure_4p3m
+ write(unit,*) 'coupure_4p4m :',coupure_4p4m
+ write(unit,*) 'rat_or_tot_par : ',rat_or_tot_par
+ write(unit,*) 'rmass_or_cmass : ',rmass_or_cmass_par
+ write(unit,*) 'if_print_info_par : ',if_print_info_par
+ write(unit,*) 'if_print_warn_par : ',if_print_warn_par
+ write(unit,*) 'accuracy_par : ',accuracy_par
+ write(unit,*) 'not_enough_accuracy_par : ',not_enough_accuracy_par
+ write(unit,*) 'mu2_scale_par : ',mu2_scale_par
+ write(unit,*) 'accuracy_par : ',accuracy_par
+ write(unit,*) 'not_enough_accuracy_par : ',not_enough_accuracy_par
+ write(unit,*) 'mu2_scale_par : ',mu2_scale_par
+ write(unit,*) 'olo : ',olo
+ !
+ end subroutine print_parameter
+ !
+end module parametre
Index: 95/branches/golem95_without_olo_cmake/src/module/multiply_div.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/module/multiply_div.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/module/multiply_div.f90 (revision 119)
@@ -0,0 +1,155 @@
+!
+!****h* src/module/multiply_div
+! NAME
+!
+! Module multiply_div
+!
+! USAGE
+!
+! use multiply_div
+!
+! DESCRIPTION
+!
+! This module contains the function mult_div, This function computes
+! numericaly (1+alpha*epsilon)*(A/epsilon+B). The type of the output array is
+! identical to the type of the input array.
+!
+! OUTPUT
+!
+! This module exports the function mult_div
+!
+!
+! USES
+!
+! * precision_golem (src/module/precision_golem.f90)
+!
+!*****
+!
+module multiply_div
+ !
+ use precision_golem
+ !
+ implicit none
+ !
+ private
+ !
+ interface mult_div
+ !
+ module procedure mult_div_r
+ module procedure mult_div_c
+ !
+ end interface
+ !
+ public :: mult_div
+ !
+ contains
+ !
+ !****f* src/module/multiply_div/mult_div_r
+ ! NAME
+ !
+ ! Function mult_div_r
+ !
+ ! USAGE
+ !
+ ! real_dim4 = mult_div_r(alpha,array)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes numericaly (1+alpha*epsilon)*(A/epsilon+B)
+ ! with A = a1 + i*a2 and B = b1 + i*b2. The returned result is put
+ ! into an array t (rank 1, shape 4) where t(1) = a1, t(2) = a2,
+ ! t(3) = b1+alpha*a1, t(4) = b2+alpha*a2.
+ !
+ ! INPUTS
+ !
+ ! * alpha -- a real (type ki)
+ ! * array -- a real (type ki) array of rank 1, shape 4
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! a real (type ki) array of rank 1 and shape 4
+ !
+ ! NOTES
+ !
+ ! The return value of this function is a real array of shape 4,
+ ! contrary to the complex array returned by mult_div_c.
+ !
+ ! EXAMPLE
+ !
+ ! resu = multipy_div_r(alpha,array)
+ ! resu(1) = array(1)
+ ! resu(2) = array(2)
+ ! resu(3) = array(3) + alpha*array(1)
+ ! resu(4) = array(4) + alpha*array(2)
+ !
+ !*****
+ function mult_div_r(alpha,array)
+ !
+ real(ki), intent(in) :: alpha
+ real(ki), intent(in), dimension(4) :: array
+ real(ki), dimension(4) :: mult_div_r
+ !
+ mult_div_r = array
+ mult_div_r(3) = mult_div_r(3) + alpha*array(1)
+ mult_div_r(4) = mult_div_r(4) + alpha*array(2)
+ !
+ end function mult_div_r
+ !
+ !
+ !****f* src/module/multiply_div/mult_div_c
+ ! NAME
+ !
+ ! Function mult_div_c
+ !
+ ! USAGE
+ !
+ ! cmplx_dim2 = mult_div_c(alpha,array)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes numericaly (1+alpha*epsilon)*(A/epsilon+B)
+ ! with A and B complex. The returned result is put
+ ! into an complex array t (rank 1, shape 2) where t(1) = A,
+ ! t(2) = B + alpha*A.
+ !
+ ! INPUTS
+ !
+ ! * alpha -- a real (type ki)
+ ! * array -- a complex (type ki) array of rank 1, shape 2
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! a complex (type ki) array of rank 1 and shape 2
+ !
+ ! NOTES
+ !
+ ! The return value of this function is a complex array of shape 2,
+ ! contrary to the real array returned by mult_div_r.
+ !
+ ! EXAMPLE
+ !
+ ! resu = multipy_div_c(alpha,array)
+ ! resu(1) = array(1)
+ ! resu(2) = array(2) + alpha*array(1)
+ !
+ !*****
+ function mult_div_c(alpha,array)
+ !
+ real(ki), intent(in) :: alpha
+ complex(ki), intent(in), dimension(2) :: array
+ complex(ki), dimension(2) :: mult_div_c
+ !
+ mult_div_c = array
+ mult_div_c(2) = mult_div_c(2) + alpha*array(1)
+ !
+ end function mult_div_c
+ !
+end module multiply_div
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_opp.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_opp.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_opp.f90 (revision 119)
@@ -0,0 +1,3353 @@
+!
+!****h* src/integrals/four_point/function_4p2m_opp
+! NAME
+!
+! Module function_4p2m_opp
+!
+! USAGE
+!
+! use function_4p2m_opp
+!
+! DESCRIPTION
+!
+! This module computes the six-dimensional and eight dimensional
+! two opposite mass four point function with or without Feynman parameters
+! in the numerator.
+!
+! OUTPUT
+!
+! This module exports three functions f4p2m_opp, f4p2m_opp_c and f2b
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+!
+!*****
+module function_4p2m_opp
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s24_glob,s34_glob,s12_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ integer :: flag_glob
+ character (len=3) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ !
+ public :: f4p2m_opp,f2b,f4p2m_opp_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p2m_opp/f4p2m_opp
+ ! NAME
+ !
+ ! Function f4p2m_opp
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p2m_opp(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the six dimensional/eight dimensional
+ ! two opposit mass four point function with or without Feynman parameters
+ ! in the numerator.
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two opposit mass four point function, dim="n+4" eight dimensional
+ ! two opposit mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! If the user wants to compute:
+ ! * a six dimensional two opposit mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p2m_opp("n+2",s24,s13,s12,s34,0,0,0,0)
+ ! * a eight dimensional two opposit mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p2m_opp("n+4",s24,s13,s12,s34,0,0,0,0)
+ ! * a six dimensional two opposit mass four point function
+ ! with the Feynman parameter z1 in the numerator:
+ ! real_dim_4 = f4p2m_opp("n+2",s24,s13,s12,s34,0,0,0,1)
+ ! * a six dimensional two opposit mass four point function
+ ! with the Feynman parameters z1^2*z2 in the numerator:
+ ! real_dim_4 = f4p2m_opp("n+2",s24,s13,s12,s34,0,2,1,1)
+ !
+ !*****
+ function f4p2m_opp(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s12,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: f4p2m_opp
+ !
+ integer :: nb_par
+ real(ki) :: lamb
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: rest1,abserr1
+ complex(ki) :: rest2,abserr2
+ complex(ki) :: resto,abserro
+ complex(ki) :: extra_imag1,extra_imag2
+ real(ki) :: pole1,pole2
+ complex(ki) :: residue1,residue2
+ real(ki) :: t2,t3,t4,t5
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/0._ki,s12,s13,0._ki/)
+ s_mat(2,:) = (/s12,0._ki,0._ki,s24/)
+ s_mat(3,:) = (/s13,0._ki,0._ki,s34/)
+ s_mat(4,:) = (/0._ki,s24,s34,0._ki/)
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ !
+ plus_grand = maxval(array=abs(s_mat))
+ s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(3,4)-s_mat(2,4))/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ b(2) = (s_mat(3,4)-s_mat(1,3))/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ b(3) = (s_mat(1,2)-s_mat(2,4))/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ b(4) = (s_mat(1,2)-s_mat(1,3))/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(3,4)+s_mat(1,2)-s_mat(1,3)-s_mat(2,4))&
+ &/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ !
+ invs(1,1) = 0._ki
+ invs(1,2) = s_mat(3,4)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(1,3) = -s_mat(2,4)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(1,4) = 0._ki
+ invs(2,1) = s_mat(3,4)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = -s_mat(1,3)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(3,1) = -s_mat(2,4)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = s_mat(1,2)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(4,1) = 0._ki
+ invs(4,2) = -s_mat(1,3)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(4,3) = s_mat(1,2)/(s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(3,4)+s_mat(1,2)-s_mat(1,3)-s_mat(2,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p2m_opp = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p2m_opp) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p2m_opp (in file f4p2m_opp.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p2m_opp'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p2m_opp) then
+ !
+ !---#[ analytic computation:
+ !
+ if (dim == "n+2") then
+ !
+ f4p2m_opp(3:4)= a4p2m_opp_np2(s_mat(2,4),s_mat(1,3),&
+ &s_mat(1,2),s_mat(3,4),&
+ &par1,par2,par3,par4)/plus_grand
+ !
+ else if (dim == "n+4") then
+ !
+ f4p2m_opp = a4p2m_opp_np4(s_mat(2,4),s_mat(1,3),&
+ &s_mat(1,2),s_mat(3,4),&
+ &par1,par2,par3,par4)
+ f4p2m_opp(3) = f4p2m_opp(3)-log(plus_grand)*norma
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ & "In f4p2m_opp (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unimplemented choice: dim = %c0"
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ !---#] analytic computation:
+ !
+ else
+ !
+ !---#[ numerical computation:
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ par4_glob = par4
+ !
+ s12_glob = s_mat(1,2)
+ s13_glob = s_mat(1,3)
+ s24_glob = s_mat(2,4)
+ s34_glob = s_mat(3,4)
+ !
+ t2 = (s24_glob+s13_glob-s12_glob-s34_glob)
+ t3 = (s13_glob*s24_glob-s12_glob*s34_glob)
+ t4 = s13_glob-s34_glob
+ t5 = s12_glob-s13_glob
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s24+(1-z)*s34 = s34+x*(s24-s34)-i*eps*y*(s24-s34)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s24-s34) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ !
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = (s_mat(1,2)*s_mat(3,4)-s_mat(1,3)*s_mat(2,4))
+ !
+ eps_glob = sign(1._ki,s34_glob-s24_glob)
+ flag_glob = 1
+ !
+ origine_info_par = "f4p2m_opp part 1, dimension "//dim
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,rest1,abserr1)
+ !
+ residue1 = compute_residue(t2,t3,t4,t5)
+ !
+ pole1 = (s13_glob-s34_glob)/t2
+ !
+ if ( (pole1 >= 0._ki) .and. (pole1 <= 1._ki) &
+ & .and. (eps_glob == sign(1._ki,t2)) ) then
+ !
+ extra_imag1 = -2._ki*i_*pi*residue1*eps_glob
+ !
+ else
+ !
+ extra_imag1 = 0._ki
+ !
+ end if
+ !
+ resto = resto + rest1 + extra_imag1
+ abserro = abserro + abserr1
+ !
+ eps_glob = sign(1._ki,s13_glob-s12_glob)
+ flag_glob = 2
+ !
+ origine_info_par = "f4p2m_opp part 2, dimension "//dim
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,rest2,abserr2)
+ !
+ ! le residue au pole pour la somme des deux parties est nul
+ !
+ residue2 = -residue1
+ pole2 = pole1
+ !
+ if ( (pole2 >= 0._ki) .and. (pole2 <= 1._ki) &
+ & .and. (eps_glob == sign(1._ki,t2)) ) then
+ !
+ extra_imag2 = -2._ki*i_*pi*residue2*eps_glob
+ !
+ else
+ !
+ extra_imag2 = 0._ki
+ !
+ end if
+ !
+ resto = resto + rest2 + extra_imag2
+ abserro = abserro + abserr2
+ !
+ if (dim == "n+2") then
+ !
+ resto = resto/plus_grand
+ !
+ else if (dim == "n+4") then
+ !
+ f4p2m_opp(1) = norma
+ f4p2m_opp(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ & "In f4p2m_opp (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Illegal value for dim = %c0"
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ f4p2m_opp(3) = real(resto,ki)
+ f4p2m_opp(4) = aimag(resto)
+ !
+ !---#] numerical computation:
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p2m_opp
+ !
+ !****f* src/integrals/four_point/function_4p2m_opp/f4p2m_opp_c
+ ! NAME
+ !
+ ! Function f4p2m_opp_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_2 = f4p2m_opp_c(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing that the fucntion f4p2m_opp
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two opposit mass four point function, dim="n+4" eight dimensional
+ ! two opposit mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p2m_opp
+ !
+ !*****
+ function f4p2m_opp_c(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s12,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(2) :: f4p2m_opp_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f4p2m_opp(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+ call to_complex(res4,f4p2m_opp_c)
+ !
+ end function f4p2m_opp_c
+ !
+ !****if* src/integrals/four_point/function_4p2m_opp/a4p2m_opp_np2
+ ! NAME
+ !
+ ! recursive function a4p2m_opp_np2
+ !
+ ! USAGE
+ !
+ ! real_dim_2 = a4p2m_opp_np2(s24,s13,s12,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the six dimensional
+ ! two opposit mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two reals (type ki) corresponding to the
+ ! real and imaginary part of the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p2m_opp_np2(s24,s13,s12,s34,par1,par2,par3,par4) result(res_4p2m_opp_np2)
+ !
+ real(ki), intent (in) :: s24,s13,s12,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(2) :: res_4p2m_opp_np2
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(6) :: truc1,truc2,truc3
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(6) :: temp1,temp2,temp3,temp4
+ real(ki), dimension(2) :: temp10,temp11,temp12,temp13,temp14,temp15
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ ctemp = -1._ki*f2b(s24,s13,s12,s34)/(s24+s13-s12-s34)
+ res_4p2m_opp_np2(1) = real(ctemp,ki)
+ res_4p2m_opp_np2(2) = aimag(ctemp)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp0 = b(par4)*temp0
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3(j,1)) then
+ truc1 = resultat3(j,1,:)
+ else
+ truc1 = f3p_sc(s_mat,smj)
+ resultat3(j,1,:) = truc1
+ deja_calcule3(j,1) = .true.
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/2._ki
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 - b(j)*truc2/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_opp_np2(1) = (temp0(1) + temp1(5) + temp2(5))/sumb
+ res_4p2m_opp_np2(2) = (temp0(2) + temp1(6) + temp2(6))/sumb
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule(par_plus(4))) then
+ !
+ temp10 = resultat(par_plus(4),:)
+ !
+ else
+ !
+ temp10 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,0,par4)
+ resultat(par_plus(4),:) = temp10
+ deja_calcule(par_plus(4)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule(par_plus(3))) then
+ !
+ temp11 = resultat(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,0,par3)
+ resultat(par_plus(3),:) = temp11
+ deja_calcule(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp12 = resultat(1,:)
+ temp0 = b(par3)*temp10+b(par4)*temp11 - invs(par3,par4)*temp12/2._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule3(j,par_plus(3))) then
+ truc1 = resultat3(j,par_plus(3),:)
+ else
+ truc1 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj))
+ resultat3(j,par_plus(3),:) = truc1
+ deja_calcule3(j,par_plus(3)) = .true.
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs(j,par3)*truc2/4._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ if (deja_calcule33(j,par_plus(3),par_plus(4))) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ !
+ else
+ !
+ truc3 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))
+ resultat33(j,par_plus(3),par_plus(4),:) = truc3
+ deja_calcule33(j,par_plus(3),par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp3 = temp3 - b(j)*truc3/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_opp_np2(1) = (temp0(1) + temp1(5) + temp2(5) + temp3(5)) &
+ *2._ki/3._ki/sumb
+ res_4p2m_opp_np2(2) = (temp0(2) + temp1(6) + temp2(6) + temp3(6)) &
+ *2._ki/3._ki/sumb
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp10 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,par2,par3)
+ temp11 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,par2,par4)
+ temp12 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,par3,par4)
+ !
+ temp13 = resultat(par_plus(4),:)
+ temp14 = resultat(par_plus(3),:)
+ temp15 = resultat(par_plus(2),:)
+ !
+ temp0 = b(par4)*temp10+b(par3)*temp11+b(par2)*temp12 &
+ - ( invs(par2,par3)*temp13+invs(par2,par4)*temp14&
+ +invs(par3,par4)*temp15 )/3._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ temp4 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ truc1 = resultat33(j,par_plus(2),par_plus(3),:)
+ temp1 = temp1 + invs(j,par4)*truc1/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ truc2 = resultat33(j,par_plus(2),par_plus(4),:)
+ temp2 = temp2 + invs(j,par3)*truc2/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ temp3 = temp3 + invs(j,par2)*truc3/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j)*f3p_sc(s_mat,smj,locateb(par2,b_pro_mj), &
+ locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_opp_np2(1) = ( temp0(1) + temp1(5) + temp2(5) + temp3(5) &
+ + temp4(5) )/2._ki/sumb
+ res_4p2m_opp_np2(2) = ( temp0(2) + temp1(6) + temp2(6) + temp3(6) &
+ + temp4(6) )/2._ki/sumb
+ !
+ end if
+ !
+ end function a4p2m_opp_np2
+ !
+ !****if* src/integrals/four_point/function_4p2m_opp/a4p2m_opp_np4
+ ! NAME
+ !
+ ! recursive function a4p2m_opp_np4
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p2m_opp_np4(s24,s13,s12,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the eight dimensional
+ ! two opposit mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p2m_opp_np4(s24,s13,s12,s34,par1,par2,par3,par4) result(res_4p2m_opp_np4)
+ !
+ real(ki), intent (in) :: s24,s13,s12,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: res_4p2m_opp_np4
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3_np2(j,1)) then
+ !
+ truc1 = resultat3_np2(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_np2_sc(s_mat,smj)
+ resultat3_np2(j,1,:) = truc1
+ deja_calcule3_np2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_opp_np4(1) = (-temp1(1))/(3._ki*sumb)
+ res_4p2m_opp_np4(2) = (-temp1(2))/(3._ki*sumb)
+ res_4p2m_opp_np4(3) = (temp0(1)-temp1(3)-2._ki/3._ki*temp1(1))/(3._ki*sumb)
+ res_4p2m_opp_np4(4) = (temp0(2)-temp1(4)-2._ki/3._ki*temp1(2))/(3._ki*sumb)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ temp0 = a4p2m_opp_np2(s24,s13,s12,s34,0,0,0,par4)/3._ki
+ temp1 = b(par4)*a4p2m_opp_np4(s24,s13,s12,s34,0,0,0,0)
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ truc1 = resultat3_np2(j,1,:)
+ temp2 = temp2 + invs(j,par4)*truc1/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j)*f3p_np2_sc(s_mat,smj,locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_opp_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb)
+ res_4p2m_opp_np4(2) = ( temp1(2)+temp2(2)+temp3(2) )/(2._ki*sumb)
+ res_4p2m_opp_np4(3) = ( temp1(3)+temp1(1)/6._ki+temp2(3)+temp2(1)/2._ki &
+ +temp3(3)+temp3(1)/2._ki+temp0(1) )/(2._ki*sumb)
+ res_4p2m_opp_np4(4) = ( temp1(4)+temp1(2)/6._ki+temp2(4)+temp2(2)/2._ki &
+ +temp3(4)+temp3(2)/2._ki+temp0(2) )/(2._ki*sumb)
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a4p2m_opp_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p2m_opp_np4
+ !
+ !****f* src/integrals/four_point/function_4p2m_opp/f2b
+ ! NAME
+ !
+ ! function f2b
+ !
+ ! USAGE
+ !
+ ! complex = f2b(a,b,c,d)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the "finite part" of the scalar four dimensional two
+ ! opposit mass four point function. The expression has been taken in
+ ! Nucl. Phys. {\bf B615} (2001) , 385
+ !
+ !
+ ! INPUTS
+ !
+ ! * a -- a real (type ki), (p1+p2)^2
+ ! * b -- a real (type ki), (p2+p3)^2
+ ! * c -- a real (type ki), p2^2
+ ! * d -- a real (type ki), p4^2
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ ! Affected by the variable rat_or_tot_par (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f2b(a,b,c,d)
+ !
+ real(ki), intent(in) :: a,b,c,d
+ complex(ki) :: f2b
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2b = -( zdilog(1._ki-c*d/(a*b),sign(un,c*d*(a+b)-a*b*(c+d))) &
+ +( z_log(c*d/(a*b),sign(un,-c*d*(a+b)+a*b*(c+d))) &
+ -z_log(c/a,sign(un,a-c))-z_log(d/b,sign(un,b-d)) ) &
+ *z_log(1._ki-c*d/(a*b),sign(un,c*d*(a+b)-a*b*(c+d))) ) &
+ +zdilog(1._ki-c/a,sign(un,c-a)) &
+ +zdilog(1._ki-c/b,sign(un,c-b)) &
+ +zdilog(1._ki-d/a,sign(un,d-a)) &
+ +zdilog(1._ki-d/b,sign(un,d-b)) &
+ +z_log2(a/b,sign(un,b-a))/2._ki
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ f2b = 0._ki
+ !
+ end if
+ !
+ end function f2b
+ !
+ !****if* src/integrals/four_point/function_4p2m_opp/eval_numer_gi
+ ! NAME
+ !
+ ! function eval_numer_gi
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gi(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the integrand for the numerical computation in phase
+ ! space region where det(G) ~ 0
+ !
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), between 0 and 1
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki). It is called by
+ ! the routine adapt_gauss1 in the function f4p2m_opp
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gi(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gi
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ z = x - eps_glob*i_*y
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ !
+ eval_numer_gi = fg(z,s24_glob,s13_glob,s12_glob,s34_glob,&
+ & par1_glob,par2_glob,par3_glob,par4_glob,flag_glob,&
+ & dim_glob)
+ eval_numer_gi = eval_numer_gi*jacob
+ !
+ end function eval_numer_gi
+ !
+ !****if* src/integrals/four_point/function_4p2m_opp/compute_residue
+ ! NAME
+ !
+ ! Function compute_residue
+ !
+ ! USAGE
+ !
+ ! complex = compute_residue(t2,t3,t4,t5)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the residue of the pole in the case where the pole
+ ! is inside the contour
+ !
+ ! INPUTS
+ !
+ ! * t2 -- a real (type ki)
+ ! * t3 -- a real (type ki)
+ ! * t4 -- a real (type ki)
+ ! * t5 -- a real (type ki)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global variable (for this module) dim_glob
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function compute_residue(t2,t3,t4,t5)
+ !
+ real(ki), intent (in) :: t2,t3,t4,t5
+ complex(ki) :: compute_residue
+ !
+ complex(ki) :: temp0
+ integer, dimension(4) :: par
+ integer :: nb_par
+ !
+ par = (/par1_glob,par2_glob,par3_glob,par4_glob/)
+ nb_par = count(mask=par/=0)
+ !
+ if (dim_glob == "n+2") then
+ !---#[ dim_glob == "n+2":
+ if (nb_par == 0) then
+ !---#[ nb_par == 0:
+ !
+ temp0=-z_log(1._ki/t2*t3,1._ki)/t2
+ !
+ !---#] nb_par == 0:
+ else if (nb_par == 1) then
+ !---#[ nb_par == 1:
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ temp0=(-1._ki/2._ki*(t5+t2)/t2*z_log(1._ki/t2*t3,1._ki)-1._ki/2._ki*t5/&
+ &t2)/t2
+ !
+ case(2)
+ !
+ temp0=-1._ki/2._ki*t4/t2**2*z_log(1._ki/t2*t3,1._ki)
+ !
+ case(3)
+ !
+ temp0=-1._ki/2._ki*(t2-t4)*z_log(1._ki/t2*t3,1._ki)/t2**2
+ !
+ case(4)
+ !
+ temp0=(1._ki/2._ki*t5/t2*z_log(1._ki/t2*t3,1._ki)+1._ki/2._ki*t5/t2)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ !---#] nb_par == 1:
+ else if (nb_par == 2) then
+ !---#[ nb_par == 2:
+ !
+ select case(par3_glob)
+ !
+ case(1)
+ !
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ temp0=(-(t2+t5)**2/t2**2*z_log(1._ki/t2*t3,1._ki)/3._ki-t5*(3._ki*t5+&
+ &4._ki*t2)/t2**2/6._ki)/t2
+ !
+ case(2)
+ !
+ temp0=(-(t3+t4*t5+t4*t2)/t2**2*z_log(1._ki/t2*t3,1._ki)/6._ki-t4*t5/&
+ &t2**2/6._ki)/t2
+ !
+ case(3)
+ !
+ temp0=(-(-t3+t5*t2+t2**2-t4*t5-t4*t2)/t2**2*z_log(1._ki/t2*t3,1._ki&
+ &)/6._ki-t5*(t2-t4)/t2**2/6._ki)/t2
+ !
+ case(4)
+ !
+ temp0=(t5*(t2+t5)/t2**2*z_log(1._ki/t2*t3,1._ki)/3._ki+t5*(3._ki*t5+2&
+ &._ki*t2)/t2**2/6._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4_glob)
+ !
+ case(2)
+ !
+ temp0=-t4**2/t2**3*z_log(1._ki/t2*t3,1._ki)/3._ki
+ !
+ case(3)
+ !
+ temp0=-t4*(t2-t4)*z_log(1._ki/t2*t3,1._ki)/t2**3/3._ki
+ !
+ case(4)
+ !
+ temp0=((t3+t4*t5)/t2**2*z_log(1._ki/t2*t3,1._ki)/6._ki+t4*t5/t2**2/6&
+ &._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ temp0=-(t2-t4)**2*z_log(1._ki/t2*t3,1._ki)/t2**3/3._ki
+ !
+ case(4)
+ !
+ temp0=((t5*t2-t4*t5-t3)/t2**2*z_log(1._ki/t2*t3,1._ki)/6._ki+t5*(t2-&
+ &t4)/t2**2/6._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ temp0=(-t5**2/t2**2*z_log(1._ki/t2*t3,1._ki)/3._ki-t5**2/t2**2/2._ki)&
+ &/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par3 = %d0"
+ tab_erreur_par(2)%arg_int = par3_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ !---#] nb_par == 2:
+ else if (nb_par == 3) then
+ !---#[ nb_par == 3:
+ !
+ select case(par2_glob)
+ !
+ case(1)
+ !
+ select case(par3_glob)
+ !
+ case(1)
+ !
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ temp0=(-(t5+t2)**3/t2**3*z_log(1._ki/t2*t3,1._ki)/4._ki-t5*(27._ki*t5&
+ &*t2+11._ki*t5**2+18._ki*t2**2)/t2**3/24._ki)/t2
+ !
+ case(2)
+ !
+ temp0=(-(t5+t2)*(t4*t5+t4*t2+2._ki*t3)/t2**3*z_log(1._ki/t2*t3,1._ki&
+ &)/12._ki-t5*(2._ki*t3+3._ki*t4*t5+4._ki*t4*t2)/t2**3/24._ki)/t2
+ !
+ case(3)
+ !
+ temp0=((t5+t2)*(t4*t5-t5*t2+t4*t2+2._ki*t3-t2**2)/t2**3*z_log(1._ki&
+ &/t2*t3,1._ki)/12._ki+t5*(4._ki*t4*t2-4._ki*t2**2+2._ki*t3+3._ki*t4*t5&
+ &-3._ki*t5*t2)/t2**3/24._ki)/t2
+ !
+ case(4)
+ !
+ temp0=(t5*(t5+t2)**2/t2**3*z_log(1._ki/t2*t3,1._ki)/4._ki+t5*(18._ki*&
+ &t5*t2+11._ki*t5**2+6._ki*t2**2)/t2**3/24._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4_glob)
+ !
+ case(2)
+ !
+ temp0=(-t4*(t4*t5+t4*t2+2._ki*t3)/t2**3*z_log(1._ki/t2*t3,1._ki)/12.&
+ &_ki-t4**2*t5/t2**3/12._ki)/t2
+ !
+ case(3)
+ !
+ temp0=((-t2*t3+2._ki*t4*t3-t4*t5*t2-t4*t2**2+t4**2*t5+t4**2*t2)/t2&
+ &**3*z_log(1._ki/t2*t3,1._ki)/12._ki+t4*t5*(t4-t2)/t2**3/12._ki)/t2
+ !
+ case(4)
+ !
+ temp0=((2._ki*t3*t5+t2*t3+t4*t5**2+t4*t5*t2)/t2**3*z_log(1._ki/t2*t&
+ &3,1._ki)/12._ki+t5*(2._ki*t3+3._ki*t4*t5+2._ki*t4*t2)/t2**3/24._ki)/&
+ &t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ temp0=(-(t4-t2)*(t4*t5-t5*t2+t4*t2+2._ki*t3-t2**2)/t2**3*z_log(1._k&
+ &i/t2*t3,1._ki)/12._ki-(t4-t2)**2*t5/t2**3/12._ki)/t2
+ !
+ case(4)
+ !
+ temp0=(-(2._ki*t3*t5+t2*t3-t5**2*t2-t5*t2**2+t4*t5**2+t4*t5*t2)/t2&
+ &**3*z_log(1._ki/t2*t3,1._ki)/12._ki-t5*(2._ki*t3-3._ki*t5*t2-2._ki*t2&
+ &**2+3._ki*t4*t5+2._ki*t4*t2)/t2**3/24._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ temp0=(-t5**2*(t5+t2)/t2**3*z_log(1._ki/t2*t3,1._ki)/4._ki-t5**2*(11&
+ &._ki*t5+9._ki*t2)/t2**3/24._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par3 = %d0"
+ tab_erreur_par(2)%arg_int = par3_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3_glob)
+ !
+ case(2)
+ !
+ select case(par4_glob)
+ !
+ case(2)
+ !
+ temp0=-t4**3/t2**4*z_log(1._ki/t2*t3,1._ki)/4._ki
+ !
+ case(3)
+ !
+ temp0=t4**2*(t4-t2)*z_log(1._ki/t2*t3,1._ki)/t2**4/4._ki
+ !
+ case(4)
+ !
+ temp0=(t4*(2._ki*t3+t4*t5)/t2**3*z_log(1._ki/t2*t3,1._ki)/12._ki+t4**&
+ &2*t5/t2**3/12._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ temp0=-t4*(t4-t2)**2*z_log(1._ki/t2*t3,1._ki)/t2**4/4._ki
+ !
+ case(4)
+ !
+ temp0=(-(-t2*t3+2._ki*t4*t3-t4*t5*t2+t4**2*t5)/t2**3*z_log(1._ki/t2&
+ &*t3,1._ki)/12._ki-t4*t5*(t4-t2)/t2**3/12._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ temp0=(-t5*(2._ki*t3+t4*t5)/t2**3*z_log(1._ki/t2*t3,1._ki)/12._ki-t5*&
+ &(3._ki*t4*t5+2._ki*t3)/t2**3/24._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par3 = %d0"
+ tab_erreur_par(2)%arg_int = par3_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3_glob)
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ temp0=(t4-t2)**3*z_log(1._ki/t2*t3,1._ki)/t2**4/4._ki
+ !
+ case(4)
+ !
+ temp0=((t4-t2)*(t4*t5+2._ki*t3-t5*t2)/t2**3*z_log(1._ki/t2*t3,1._ki)&
+ &/12._ki+(t4-t2)**2*t5/t2**3/12._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ temp0=(t5*(t4*t5+2._ki*t3-t5*t2)/t2**3*z_log(1._ki/t2*t3,1._ki)/12._k&
+ &i+t5*(-3._ki*t5*t2+3._ki*t4*t5+2._ki*t3)/t2**3/24._ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par3 = %d0"
+ tab_erreur_par(2)%arg_int = par3_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par3_glob)
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ temp0=(t5**3/t2**3*z_log(1._ki/t2*t3,1._ki)/4._ki+11._ki/24._ki*t5**3/&
+ &t2**3)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par3 = %d0"
+ tab_erreur_par(2)%arg_int = par3_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par2 = %d0"
+ tab_erreur_par(2)%arg_int = par2_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ !---#] nb_par == 3:
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for nb_par = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ !---#] dim_glob == "n+2":
+ else if (dim_glob == "n+4") then
+ !---#[ dim_glob == "n+4":
+ !
+ if (nb_par == 0) then
+ !---#[ nb_par == 0:
+ temp0=-1._ki/6._ki/t2**2*t3*z_log(-1._ki/t2*t3,-1._ki)
+ !---#] nb_par == 0:
+ else if (nb_par == 1) then
+ !---#[ nb_par == 1:
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ temp0=(-t3*(t5+t2)/t2**2*z_log(-1._ki/t2*t3,-1._ki)/12._ki-t3*t5/t2*&
+ &*2/24._ki)/t2
+ !
+ case(2)
+ !
+ temp0=-t4/t2**3*t3*z_log(-1._ki/t2*t3,-1._ki)/12._ki
+ !
+ case(3)
+ !
+ temp0=-t3*(t2-t4)*z_log(-1._ki/t2*t3,-1._ki)/t2**3/12._ki
+ !
+ case(4)
+ !
+ temp0=(t3*t5/t2**2*z_log(-1._ki/t2*t3,-1._ki)/12._ki+t3*t5/t2**2/24.&
+ &_ki)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for par4 = %d0"
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ !---#] nb_par == 1:
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for nb_par = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ !---#] dim_glob == "n+4":
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In compute_residue (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for dim = %c0"
+ tab_erreur_par(2)%arg_char = dim_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ compute_residue = temp0
+ !
+ end function compute_residue
+ !
+ !****if* src/integrals/four_point/function_4p2m_opp/fg
+ ! NAME
+ !
+ ! function fg
+ !
+ ! USAGE
+ !
+ ! complex = fg(z,s24,s13,s12,s34,par1,par2,par3,par4,flag,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the one dimensional integral representation of
+ ! the six/eight dimensional two opposit mass four point function
+ !
+ !
+ ! INPUTS
+ !
+ ! * z -- a real (type ki), integration variable
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ ! * flag -- TODO undocumented parameter
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two opposit mass four point function, dim="n+4" eight dimensional
+ ! two opposit mass four point function
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki) corresponding to the
+ ! one dimensional integral representation of the six/eight dimensional
+ ! one/zero mass four point function
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fg(z,s24,s13,s12,s34,par1,par2,par3,par4,flag,dim)
+ !
+ complex(ki), intent (in) :: z
+ real(ki), intent (in) :: s24,s13,s12,s34
+ integer, intent (in) :: par1,par2,par3,par4,flag
+ character (len=3) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(4) :: par
+ integer :: nb_par
+ complex(ki) :: c_var,e_var,f_var
+ !
+ par = (/par1,par2,par3,par4/)
+ nb_par = count(mask=par/=0)
+ !
+ c_var = z*s12+(1._ki-z)*s13
+ !
+ f_var = z*(s24-s12)+(1._ki-z)*(s34-s13)
+ !
+ e_var = z*s24+(1._ki-z)*s34
+ !
+ if (dim == "n+2") then
+ if (nb_par == 0) then
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/2._ki*e_var*log(e_var)/f_var**2+1._ki/2._ki/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*log(c_var)/f_var**2*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/2._ki*z*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*z/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*(-1._ki+z)*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/2._ki*(-1._ki+z)/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*log(e_var)/f_var**2*c_var-1._ki/2._ki/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/2._ki*c_var/f_var**2*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*e_var**2*log(e_var)/f_var**3-1._ki/6._ki*(c_var-3._ki*&
+ &e_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*log(c_var)/f_var**3*e_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*z*e_var*log(e_var)/f_var**2+1._ki/6._ki*z/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*z*log(c_var)/f_var**2*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/6._ki*(-1._ki+z)*e_var*log(e_var)/f_var**2-1._ki/6._ki*(-1._ki&
+ &+z)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/6._ki*(-1._ki+z)*log(c_var)/f_var**2*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/3._ki*e_var*log(e_var)/f_var**3*c_var-1._ki/6._ki*(c_var+e_v&
+ &ar)/f_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki*log(c_var)*c_var/f_var**3*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*z**2*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*z**2/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/3._ki*z*(-1._ki+z)*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki*z*(-1._ki+z)/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/6._ki*z*log(e_var)/f_var**2*c_var-1._ki/6._ki*z/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/6._ki*z*c_var/f_var**2*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*(-1._ki+z)**2*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*(-1._ki+z)**2/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*(-1._ki+z)*log(e_var)/f_var**2*c_var+1._ki/6._ki*(-1._k&
+ &i+z)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var*(-1._ki+z)/f_var**2*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki/e_var**2*log(e_var)/f_var**3*(e_var*c_var**2*f_var+&
+ &c_var**2*f_var**2+e_var**2*c_var**2+2._ki*c_var*f_var**3-f_var**&
+ &2*e_var*c_var-e_var**2*c_var*f_var-2._ki*f_var**3*e_var+f_var**4&
+ &+f_var**2*e_var**2)+1._ki/6._ki*(-e_var+3._ki*c_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*c_var**2/f_var**3*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*e_var**3*log(e_var)/f_var**4+1._ki/24._ki*(2._ki*c_var&
+ &**2-7._ki*c_var*e_var+11._ki*e_var**2)/f_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*log(c_var)/f_var**4*e_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z*e_var**2*log(e_var)/f_var**3-1._ki/24._ki*z*(c_var&
+ &-3._ki*e_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*log(c_var)/f_var**3*e_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)*e_var**2*log(e_var)/f_var**3+1._ki/24._ki*(&
+ &c_var-3._ki*e_var)*(-1._ki+z)/f_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)*log(c_var)/f_var**3*e_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki*e_var**2*log(e_var)/f_var**4*c_var+1._ki/24._ki*(c_var&
+ &**2-5._ki*c_var*e_var-2._ki*e_var**2)/f_var**3
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki*log(c_var)*c_var/f_var**4*e_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z**2*e_var*log(e_var)/f_var**2+1._ki/12._ki*z**2/f_v&
+ &ar
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z**2*log(c_var)/f_var**2*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*(-1._ki+z)*e_var*log(e_var)/f_var**2-1._ki/12._ki*z*&
+ &(-1._ki+z)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z*(-1._ki+z)*log(c_var)/f_var**2*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*e_var*log(e_var)/f_var**3*c_var-1._ki/24._ki*z*(c_v&
+ &ar+e_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z*log(c_var)*c_var/f_var**3*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)**2*e_var*log(e_var)/f_var**2+1._ki/12._ki*&
+ &(-1._ki+z)**2/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)**2*log(c_var)/f_var**2*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)*e_var*log(e_var)/f_var**3*c_var+1._ki/24.&
+ &_ki*(c_var+e_var)*(-1._ki+z)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)*log(c_var)*c_var/f_var**3*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki/e_var*log(e_var)/f_var**4*(c_var**2*f_var**2+3._ki*&
+ &c_var**2*e_var**2+2._ki*c_var**2*f_var*e_var+2._ki*c_var*f_var**3&
+ &-2._ki*c_var*f_var*e_var**2+f_var**4+f_var**2*e_var**2-2._ki*f_va&
+ &r**3*e_var)+1._ki/24._ki*(-e_var**2+2._ki*c_var**2+5._ki*c_var*e_va&
+ &r)/f_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*log(c_var)*c_var**2/f_var**4*e_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*z**3*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*z**3/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki*z**2*(-1._ki+z)*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki*z**2*(-1._ki+z)/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z**2*log(e_var)/f_var**2*c_var-1._ki/12._ki*z**2/f_va&
+ &r
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z**2*c_var/f_var**2*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*z*(-1._ki+z)**2*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*z*(-1._ki+z)**2/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z*(-1._ki+z)*log(e_var)/f_var**2*c_var+1._ki/12._ki*z&
+ &*(-1._ki+z)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*c_var*(-1._ki+z)/f_var**2*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z/e_var**2*log(e_var)/f_var**3*(c_var**2*e_var**2+&
+ &2._ki*c_var**2*f_var*e_var+3._ki*c_var**2*f_var**2+6._ki*c_var*f_v&
+ &ar**3-2._ki*c_var*f_var*e_var**2-4._ki*c_var*f_var**2*e_var+3._ki*&
+ &f_var**4-6._ki*f_var**3*e_var+3._ki*f_var**2*e_var**2)+1._ki/24._ki&
+ &*z*(3._ki*c_var-e_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*c_var**2/f_var**3*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki*(-1._ki+z)**3*log(e_var)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki*(-1._ki+z)**3/f_var*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)**2*log(e_var)/f_var**2*c_var-1._ki/12._ki*(&
+ &-1._ki+z)**2/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var*(-1._ki+z)**2/f_var**2*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)/e_var**2*log(e_var)/f_var**3*(c_var**2*e_&
+ &var**2+2._ki*c_var**2*f_var*e_var+3._ki*c_var**2*f_var**2+6._ki*c_&
+ &var*f_var**3-2._ki*c_var*f_var*e_var**2-4._ki*c_var*f_var**2*e_va&
+ &r+3._ki*f_var**4-6._ki*f_var**3*e_var+3._ki*f_var**2*e_var**2)-1._k&
+ &i/24._ki*(3._ki*c_var-e_var)*(-1._ki+z)/f_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var**2*(-1._ki+z)/f_var**3*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par3)
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki/e_var**2*log(e_var)/f_var**4*c_var*(-f_var**2*e_var*&
+ &*2+f_var**4+c_var**2*f_var**2+2._ki*c_var*f_var**3+c_var**2*e_va&
+ &r**2)-1._ki/24._ki*(2._ki*e_var**2+11._ki*c_var**2-7._ki*c_var*e_var&
+ &)/f_var**3
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki*c_var**3/f_var**4*log(c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par2 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for nb_bar = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else if (dim == "n+4") then
+ !
+ if (nb_par == 0) then
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*e_var*log(-e_var)/f_var+4._ki/9._ki
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var/f_var*log(-c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/24._ki*e_var**2*log(-e_var)/f_var**2-1._ki/144._ki*(13._ki*c&
+ &_var-19._ki*e_var)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/24._ki*c_var*(c_var+2._ki*f_var)/f_var**2*log(-c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z*e_var*log(-e_var)/f_var+2._ki/9._ki*z
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*c_var/f_var*log(-c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)*e_var*log(-e_var)/f_var+2._ki/9._ki-2._ki/9.&
+ &_ki*z
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var*(-1._ki+z)/f_var*log(-c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/24._ki*log(-e_var)/f_var**2*(-f_var*e_var+c_var*e_var)-1._k&
+ &i/144._ki*(-13._ki*e_var+19._ki*c_var)/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/24._ki*c_var**2/f_var**2*log(-c_var)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &"In function fb (function_4p2m_opp.f90)"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &"Parameter flag should be 1 or 2 but is %d0"
+ tab_erreur_par(2)%arg_int = flag
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for nb_bar = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_opp.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for dim = %c0"
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ end function fg
+ !
+end module function_4p2m_opp
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_adj.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_adj.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_adj.f90 (revision 119)
@@ -0,0 +1,2102 @@
+!
+!****h* src/integrals/four_point/function_4p2m_adj
+! NAME
+!
+! Module function_4p2m_adj
+!
+! USAGE
+!
+! use function_4p2m_adj
+!
+! DESCRIPTION
+!
+! This module computes the six-dimensional and eight dimensional
+! two adjacent mass four point function with or without Feynman parameters
+! in the numerator.
+!
+! OUTPUT
+!
+! This module exports three functions f4p2m_adj, f4p2m_adj_c and f2a
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+!
+!*****
+module function_4p2m_adj
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=3) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ !
+ public :: f4p2m_adj,f2a,f4p2m_adj_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p2m_adj/f4p2m_adj
+ ! NAME
+ !
+ ! Function f4p2m_adj
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p2m_adj(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the six dimensional/eight dimensional
+ ! two adjacent mass four point function with or without Feynman parameters
+ ! in the numerator.
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two adjacent mass four point function, dim="n+4" eight dimensional
+ ! two adjacent mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! If the user wants to compute:
+ ! * a six dimensional two adjacent mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p2m_adj("n+2",s24,s13,s23,s34,0,0,0,0)
+ ! * a eight dimensional two adjacent mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p2m_adj("n+4",s24,s13,s23,s34,0,0,0,0)
+ ! * a six dimensional two adjacent mass four point function
+ ! with the Feynman parameter z1 in the numerator:
+ ! real_dim_4 = f4p2m_adj("n+2",s24,s13,s23,s34,0,0,0,1)
+ ! * a six dimensional two adjacent mass four point function
+ ! with the Feynman parameters z1^2*z2 in the numerator:
+ ! real_dim_4 = f4p2m_adj("n+2",s24,s13,s23,s34,0,2,1,1)
+ !
+ !*****
+ function f4p2m_adj(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: f4p2m_adj
+ !
+ integer :: nb_par
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/0._ki,0._ki,s13,0._ki/)
+ s_mat(2,:) = (/0._ki,0._ki,s23,s24/)
+ s_mat(3,:) = (/s13,s23,0._ki,s34/)
+ s_mat(4,:) = (/0._ki,s24,s34,0._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ plus_grand = maxval(array=abs(s_mat))
+ s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p2m_adj = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p2m_adj) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p2m_adj (in file f4p2m_adj.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p2m_adj'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p2m_adj) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n+2") then
+ !
+ f4p2m_adj(3:4)= a4p2m_adj_np2(s_mat(2,4),s_mat(1,3),&
+ &s_mat(2,3),s_mat(3,4),&
+ &par1,par2,par3,par4)/plus_grand
+ !
+ else if (dim == "n+4") then
+ !
+ f4p2m_adj = a4p2m_adj_np4(s_mat(2,4),s_mat(1,3),&
+ &s_mat(2,3),s_mat(3,4),&
+ &par1,par2,par3,par4)
+ f4p2m_adj(3) = f4p2m_adj(3)-log(plus_grand)*norma
+ !
+ end if
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ par4_glob = par4
+ !
+ s13_glob = s_mat(1,3)
+ s23_glob = s_mat(2,3)
+ s24_glob = s_mat(2,4)
+ s34_glob = s_mat(3,4)
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s24+(1-z)*s34 = s34+x*(s24-s34)-i*eps*y*(s24-s34)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s24-s34) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = sign(1._ki,s34_glob-s24_glob)
+ !
+ origine_info_par = "f4p2m_adj, dimension "//dim
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = (s_mat(1,3)**2*s_mat(2,4))
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ if (dim == "n+2") then
+ resto = resto/plus_grand
+ else if (dim == "n+4") then
+ f4p2m_adj(1) = norma
+ f4p2m_adj(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ end if
+ !
+ f4p2m_adj(3) = real(resto,ki)
+ f4p2m_adj(4) = aimag(resto)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p2m_adj
+ !
+ !****f* src/integrals/four_point/function_4p2m_adj/f4p2m_adj_c
+ ! NAME
+ !
+ ! Function f4p2m_adj_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_2 = f4p2m_adj_c(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing that the function f4p2m_adj
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two adjacent mass four point function, dim="n+4" eight dimensional
+ ! two adjacent mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p2m_adj
+ !
+ !*****
+ function f4p2m_adj_c(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(2) :: f4p2m_adj_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f4p2m_adj(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+ call to_complex(res4,f4p2m_adj_c)
+ !
+ end function f4p2m_adj_c
+ !
+ !****if* src/integrals/four_point/function_4p2m_adj/a4p2m_adj_np2
+ ! NAME
+ !
+ ! recursive function a4p2m_adj_np2
+ !
+ ! USAGE
+ !
+ ! real_dim_2 = a4p2m_adj_np2(s24,s13,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the six dimensional
+ ! two adjacent mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two reals (type ki) corresponding to the
+ ! real and imaginary part of the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p2m_adj_np2(s24,s13,s23,s34,par1,par2,par3,par4) result(res_4p2m_adj_np2)
+ !
+ real(ki), intent (in) :: s24,s13,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(2) :: res_4p2m_adj_np2
+ !
+ integer, dimension(3) :: smj,sm1
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(6) :: truc1,truc2,truc3
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(6) :: temp1,temp2,temp3,temp4
+ real(ki), dimension(2) :: temp10,temp11,temp12,temp13,temp14,temp15
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ !~ sm1 = s .minus. (/1/)
+ sm1 = unpackb(ibclr(b_pro,1),3)
+ !
+ if (deja_calcule3(1,1)) then
+ !
+ truc1 = resultat3(1,1,:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,sm1)
+ resultat3(1,1,:) = truc1
+ deja_calcule3(1,1) = .true.
+ !
+ end if
+ !
+ ctemp = f2a(s24,s13,s23,s34)
+ res_4p2m_adj_np2(1) = -s13*( 2._ki*real(ctemp,ki) &
+ + s13*s24*b(1)*truc1(5) )/(2._ki*lamb)
+ res_4p2m_adj_np2(2) = -s13*( 2._ki*aimag(ctemp) &
+ + s13*s24*b(1)*truc1(6) )/(2._ki*lamb)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp0 = b(par4)*temp0
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3(j,1)) then
+ !
+ truc1 = resultat3(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj)
+ resultat3(j,1,:) = truc1
+ deja_calcule3(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/2._ki
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 - b(j)*truc2/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_adj_np2(1) = (temp0(1) + temp1(5) + temp2(5))/sumb
+ res_4p2m_adj_np2(2) = (temp0(2) + temp1(6) + temp2(6))/sumb
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule(par_plus(4))) then
+ !
+ temp10 = resultat(par_plus(4),:)
+ !
+ else
+ !
+ temp10 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,0,par4)
+ resultat(par_plus(4),:) = temp10
+ deja_calcule(par_plus(4)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule(par_plus(3))) then
+ !
+ temp11 = resultat(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,0,par3)
+ resultat(par_plus(3),:) = temp11
+ deja_calcule(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp12 = resultat(1,:)
+ temp0 = b(par3)*temp10+b(par4)*temp11 - invs(par3,par4)*temp12/2._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule3(j,par_plus(3))) then
+ !
+ truc1 = resultat3(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj))
+ resultat3(j,par_plus(3),:) = truc1
+ deja_calcule3(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs(j,par3)*truc2/4._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ if (deja_calcule33(j,par_plus(3),par_plus(4))) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ !
+ else
+ !
+ truc3 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))
+ resultat33(j,par_plus(3),par_plus(4),:) = truc3
+ deja_calcule33(j,par_plus(3),par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp3 = temp3 - b(j)*truc3/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ res_4p2m_adj_np2(1) = (temp0(1) + temp1(5) + temp2(5) + temp3(5)) &
+ *2._ki/3._ki/sumb
+ res_4p2m_adj_np2(2) = (temp0(2) + temp1(6) + temp2(6) + temp3(6)) &
+ *2._ki/3._ki/sumb
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp10 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,par2,par3)
+ temp11 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,par2,par4)
+ temp12 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,par3,par4)
+ !
+ temp13 = resultat(par_plus(4),:)
+ temp14 = resultat(par_plus(3),:)
+ temp15 = resultat(par_plus(2),:)
+ !
+ temp0 = b(par4)*temp10+b(par3)*temp11+b(par2)*temp12 &
+ - ( invs(par2,par3)*temp13+invs(par2,par4)*temp14&
+ +invs(par3,par4)*temp15 )/3._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ temp4 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ truc1 = resultat33(j,par_plus(2),par_plus(3),:)
+ temp1 = temp1 + invs(j,par4)*truc1/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ truc2 = resultat33(j,par_plus(2),par_plus(4),:)
+ temp2 = temp2 + invs(j,par3)*truc2/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ temp3 = temp3 + invs(j,par2)*truc3/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j)*f3p_sc(s_mat,smj,locateb(par2,b_pro_mj), &
+ locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_adj_np2(1) = ( temp0(1) + temp1(5) + temp2(5) + temp3(5) &
+ + temp4(5) )/2._ki/sumb
+ res_4p2m_adj_np2(2) = ( temp0(2) + temp1(6) + temp2(6) + temp3(6) &
+ + temp4(6) )/2._ki/sumb
+ !
+ end if
+ !
+ end function a4p2m_adj_np2
+ !
+ !****if* src/integrals/four_point/function_4p2m_adj/a4p2m_adj_np4
+ ! NAME
+ !
+ ! recursive function a4p2m_adj_np4
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p2m_adj_np4(s24,s13,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the eight dimensional
+ ! two adjacent mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p2m_adj_np4(s24,s13,s23,s34,par1,par2,par3,par4) result(res_4p2m_adj_np4)
+ !
+ real(ki), intent (in) :: s24,s13,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: res_4p2m_adj_np4
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3_np2(j,1)) then
+ !
+ truc1 = resultat3_np2(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_np2_sc(s_mat,smj)
+ resultat3_np2(j,1,:) = truc1
+ deja_calcule3_np2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_adj_np4(1) = (-temp1(1))/(3._ki*sumb)
+ res_4p2m_adj_np4(2) = (-temp1(2))/(3._ki*sumb)
+ res_4p2m_adj_np4(3) = (temp0(1)-temp1(3)-2._ki/3._ki*temp1(1))/(3._ki*sumb)
+ res_4p2m_adj_np4(4) = (temp0(2)-temp1(4)-2._ki/3._ki*temp1(2))/(3._ki*sumb)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ temp0 = a4p2m_adj_np2(s24,s13,s23,s34,0,0,0,par4)/3._ki
+ temp1 = b(par4)*a4p2m_adj_np4(s24,s13,s23,s34,0,0,0,0)
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ truc1 = resultat3_np2(j,1,:)
+ temp2 = temp2 + invs(j,par4)*truc1/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j)*f3p_np2_sc(s_mat,smj,locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p2m_adj_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb)
+ res_4p2m_adj_np4(2) = ( temp1(2)+temp2(2)+temp3(2) )/(2._ki*sumb)
+ res_4p2m_adj_np4(3) = ( temp1(3)+temp1(1)/6._ki+temp2(3)+temp2(1)/2._ki &
+ +temp3(3)+temp3(1)/2._ki+temp0(1) )/(2._ki*sumb)
+ res_4p2m_adj_np4(4) = ( temp1(4)+temp1(2)/6._ki+temp2(4)+temp2(2)/2._ki &
+ +temp3(4)+temp3(2)/2._ki+temp0(2) )/(2._ki*sumb)
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a4p2m_adj_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p2m_adj_np4
+ !
+ !****f* src/integrals/four_point/function_4p2m_adj/f2a
+ ! NAME
+ !
+ ! function f2a
+ !
+ ! USAGE
+ !
+ ! complex = f2a(u,v,w,x)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the "finite part" of the scalar four dimensional two
+ ! adjacent mass four point function. The expression has been taken in
+ ! Nucl. Phys. {\bf B615} (2001) , 385
+ !
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), (p1+p2)^2
+ ! * v -- a real (type ki), (p2+p3)^2
+ ! * w -- a real (type ki), p3^2
+ ! * x -- a real (type ki), p4^2
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ ! Affected by the variable rat_or_tot_par (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f2a(u,v,w,x)
+ !
+ real(ki), intent(in) :: u,v,w,x
+ complex(ki) :: f2a
+ !
+ f2a = zdilog(1._ki-w/v,sign(un,w-v)) &
+ + zdilog(1._ki-x/v,sign(un,x-v)) &
+ + z_log(u/v,sign(un,v-u))*z_log(x/v,sign(un,v-x))/2._ki &
+ + z_log(w/v,sign(un,v-w))*z_log(u/x,sign(un,x-u))/2._ki
+ !
+ end function f2a
+ !
+ !****if* src/integrals/four_point/function_4p2m_adj/eval_numer_gi
+ ! NAME
+ !
+ ! function eval_numer_gi
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gi(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the integrand for the numerical computation in phase
+ ! space region where det(G) ~ 0
+ !
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), between 0 and 1
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki). It is called by
+ ! the routine adapt_gauss1 in the function f4p2m_adj
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gi(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gi
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ z = x - eps_glob*i_*y
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ !
+ eval_numer_gi = fg(z,s24_glob,s13_glob,s23_glob,s34_glob,&
+ & par1_glob,par2_glob,par3_glob,par4_glob,&
+ & dim_glob)
+ eval_numer_gi = eval_numer_gi*jacob
+ !
+ end function eval_numer_gi
+ !
+ !****if* src/integrals/four_point/function_4p2m_adj/fg
+ ! NAME
+ !
+ ! function fg
+ !
+ ! USAGE
+ !
+ ! complex = fg(z,s24,s13,s23,s34,par1,par2,par3,par4,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the one dimensional integral representation of
+ ! the six/eight dimensional two adjacent mass four point function
+ !
+ !
+ ! INPUTS
+ !
+ ! * z -- a real (type ki), integration variable
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two adjacent mass four point function, dim="n+4" eight dimensional
+ ! two adjacent mass four point function
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki) corresponding to the
+ ! one dimensional integral representation of the six/eight dimensional
+ ! two adjacent mass four point function
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fg(z,s24,s13,s23,s34,par1,par2,par3,par4,dim)
+ !
+ complex(ki), intent (in) :: z
+ real(ki), intent (in) :: s24,s13,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ character (len=3) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(4) :: par
+ integer :: nb_par
+ complex(ki) :: c_var,d_var,e_var,f_var,g_var,h_var
+ complex(ki) :: umz
+ !
+ par = (/par1,par2,par3,par4/)
+ nb_par = count(mask=par/=0)
+ umz = 1._ki - z
+ !
+ c_var = s13
+ !
+ f_var = z*s24+(1._ki-z)*(s34-s13)
+ !
+ g_var = z*(1._ki-z)*s23-z*s24-(1._ki-z)*s34
+ !
+ d_var = z*s23-s13
+ !
+ e_var = z*s24+(1._ki-z)*s34
+ !
+ h_var = z*s23
+ !
+ if (dim == "n+2") then
+ if (nb_par == 0) then
+ !
+ fg=log(e_var)/g_var/f_var*e_var-c_var/d_var/f_var*(log(1._ki-z)+z_&
+ &log(s13,1._ki))-1._ki/g_var*(log(z)+log(1._ki-z)+z_log(s23,1._ki))/&
+ &d_var*h_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=-1._ki/2._ki*(2._ki*d_var*f_var+c_var*d_var-c_var*d_var*z+c_var*f&
+ &_var)*c_var/f_var**2/d_var**2*(log(1._ki-z)+z_log(s13,1._ki))+1._k&
+ &i/2._ki/g_var*log(e_var)/f_var**2*e_var**2-1._ki/2._ki*c_var/f_var&
+ &/d_var-1._ki/2._ki/g_var*(log(z)+log(1._ki-z)+z_log(s23,1._ki))/d_v&
+ &ar**2*h_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*z/g_var**2*(log(z)+log(1._ki-z)+z_log(s23,1._ki))/d_va&
+ &r**2*h_var*((1._ki-z)*d_var*h_var+c_var*g_var-d_var*g_var)-1._ki/&
+ &2._ki/g_var**2*log(e_var)*z/f_var*e_var**2+1._ki/2._ki*z*c_var**2/&
+ &d_var**2/f_var*(log(1._ki-z)+z_log(s13,1._ki))-1._ki/2._ki/g_var*z/&
+ &d_var*c_var-1._ki/2._ki*z/g_var
+ !
+ case(3)
+ !
+ fg=-1._ki/2._ki*(-1._ki+z)/g_var**2*(log(z)+log(1._ki-z)+z_log(s23,1.&
+ &_ki))/d_var**2*h_var*((1._ki-z)*d_var*h_var+c_var*g_var-d_var*g_v&
+ &ar)+1._ki/2._ki/g_var**2*log(e_var)/f_var*e_var**2*(-1._ki+z)-1._ki&
+ &/2._ki*c_var**2*(-1._ki+z)/d_var**2/f_var*(log(1._ki-z)+z_log(s13,&
+ &1._ki))-1._ki/2._ki/g_var/d_var*c_var+1._ki/2._ki/g_var*z/d_var*c_va&
+ &r+1._ki/2._ki*z/g_var-1._ki/2._ki/g_var
+ !
+ case(4)
+ !
+ fg=1._ki/2._ki*(-1._ki+z)/g_var**2*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))/d_var*h_var**2+1._ki/2._ki/g_var**2*log(e_var)/f_var**2*e_var&
+ &*(f_var*e_var+g_var*f_var-c_var*g_var+c_var*g_var*z)-1._ki/2._ki*&
+ &(-1._ki+z)/g_var/f_var*h_var-1._ki/2._ki*(-1._ki+z)*c_var**2/d_var/&
+ &f_var**2*(log(1._ki-z)+z_log(s13,1._ki))-1._ki/2._ki/f_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*c_var/f_var**3/d_var**3*(log(umz)+z_log(s13,1._ki))*&
+ &(c_var**2*d_var**2*umz**2+3._ki*d_var*f_var**2*h_var+c_var**2*f_&
+ &var**2+c_var**2*d_var*f_var*umz+3._ki*c_var*d_var**2*f_var*umz)+&
+ &1._ki/6._ki*c_var/d_var**2/f_var**2*(-5._ki*d_var**2*umz-4._ki*c_va&
+ &r*d_var*umz+5._ki*d_var*g_var+2._ki*c_var*g_var)-1._ki/3._ki/g_var*&
+ &(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**3*h_var**3+1._ki&
+ &/3._ki/g_var*log(e_var)/f_var**3*e_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var**2/f_var**2/d_var**3*(log(umz)+z_log(s13,1._ki)&
+ &)*(1._ki-umz)*(3._ki*d_var*f_var+c_var*d_var*umz+2._ki*c_var*f_var&
+ &)+1._ki/6._ki*h_var**2/g_var**2/d_var**3*(log(1._ki-umz)+log(umz)+&
+ &z_log(s23,1._ki))*(1._ki-umz)*(-d_var*g_var+d_var*h_var*umz+2._ki*&
+ &c_var*g_var)+1._ki/6._ki/g_var/d_var**2/f_var*(1._ki-umz)*(d_var**&
+ &2*g_var-c_var**2*d_var*umz-2._ki*c_var*d_var**2*umz+2._ki*c_var**&
+ &2*g_var+2._ki*c_var*d_var*g_var-d_var**3*umz)+1._ki/6._ki*log(e_va&
+ &r)*e_var**3*(-1._ki+umz)/g_var**2/f_var**2
+ !
+ case(3)
+ !
+ fg=1._ki/6._ki*c_var**2/f_var**2/d_var**3*(log(umz)+z_log(s13,1._ki)&
+ &)*(3._ki*d_var*f_var+c_var*d_var*umz+2._ki*c_var*f_var)*umz+1._ki/&
+ &6._ki*h_var**2/g_var**2/d_var**3*(log(1._ki-umz)+log(umz)+z_log(s&
+ &23,1._ki))*umz*(-d_var*g_var+d_var*h_var*umz+2._ki*c_var*g_var)-1&
+ &._ki/6._ki/g_var**2*log(e_var)/f_var**2*e_var**3*umz+1._ki/6._ki/g_&
+ &var/d_var**2/f_var*(d_var**2*g_var-c_var**2*d_var*umz-2._ki*c_va&
+ &r*d_var**2*umz+2._ki*c_var**2*g_var+2._ki*c_var*d_var*g_var-d_var&
+ &**3*umz)*umz
+ !
+ case(4)
+ !
+ fg=1._ki/6._ki*c_var**2/f_var**3/d_var**2*(log(umz)+z_log(s13,1._ki)&
+ &)*umz*(3._ki*d_var*f_var+2._ki*c_var*d_var*umz+c_var*f_var)-1._ki/&
+ &6._ki/g_var**2*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**2&
+ &*h_var**3*umz+1._ki/6._ki/g_var**2*log(e_var)/f_var**3*e_var**2*(&
+ &f_var*e_var+g_var*f_var-2._ki*c_var*g_var*umz)+1._ki/6._ki/d_var/g&
+ &_var/f_var**2*(-2._ki*h_var*d_var*g_var*umz+c_var**2*d_var*umz**&
+ &2+d_var**3*umz**2+2._ki*c_var*d_var**2*umz**2+d_var*g_var**2+c_v&
+ &ar**2*g_var*umz)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d&
+ &_var**3*h_var*(-1._ki+umz)**2*(d_var**4*umz**2+2._ki*c_var*d_var*&
+ &*3*umz**2+c_var**2*d_var**2*umz**2+c_var**2*g_var*d_var*umz-c_v&
+ &ar*d_var*g_var**2-2._ki*g_var*d_var**3*umz+d_var**2*g_var**2-c_v&
+ &ar*g_var*d_var**2*umz+c_var**2*g_var**2)+1._ki/6._ki*(c_var+d_var&
+ &)/d_var**2/g_var**2*(-1._ki+umz)**2*(2._ki*c_var*g_var+2._ki*c_var&
+ &*d_var*umz+2._ki*d_var**2*umz-3._ki*d_var*g_var)-1._ki/3._ki*(-1._ki&
+ &+umz)**2*(-log(e_var)*e_var**3*d_var**3+c_var**3*g_var**3*log(u&
+ &mz)+c_var**3*g_var**3*z_log(s13,1._ki))/g_var**3/f_var/d_var**3
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki*c_var**3/d_var**3/f_var*(log(umz)+z_log(s13,1._ki))*&
+ &(1._ki-umz)*umz-1._ki/3._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log&
+ &(s23,1._ki))/d_var**3*h_var*(1._ki-umz)*umz*(d_var**4*umz**2+2._ki&
+ &*c_var*d_var**3*umz**2+c_var**2*d_var**2*umz**2+c_var**2*g_var*&
+ &d_var*umz-c_var*d_var*g_var**2-2._ki*g_var*d_var**3*umz+d_var**2&
+ &*g_var**2-c_var*g_var*d_var**2*umz+c_var**2*g_var**2)+1._ki/3._ki&
+ &/g_var**3*log(e_var)/f_var*e_var**3*(1._ki-umz)*umz+1._ki/6._ki*(c&
+ &_var+d_var)/d_var**2/g_var**2*(1._ki-umz)*(2._ki*c_var*g_var+2._ki&
+ &*c_var*d_var*umz+2._ki*d_var**2*umz-3._ki*d_var*g_var)*umz
+ !
+ case(4)
+ !
+ fg=-1._ki/6._ki*c_var**3/d_var**2/f_var**2*(log(umz)+z_log(s13,1._ki&
+ &))*(1._ki-umz)*umz+1._ki/6._ki*h_var**2/g_var**3/d_var**2*(log(1._k&
+ &i-umz)+log(umz)+z_log(s23,1._ki))*(1._ki-umz)*umz*(-2._ki*d_var*g_&
+ &var+2._ki*d_var*h_var*umz+c_var*g_var)-1._ki/6._ki/g_var**3*log(e_&
+ &var)/f_var**2*e_var**2*(1._ki-umz)*(2._ki*f_var*e_var+2._ki*g_var*&
+ &f_var-c_var*g_var*umz)-1._ki/6._ki/g_var**2/f_var/d_var*(1._ki-umz&
+ &)*(2._ki*d_var**3*umz**2+4._ki*c_var*d_var**2*umz**2+2._ki*c_var**&
+ &2*d_var*umz**2-4._ki*c_var*d_var*g_var*umz+d_var*g_var**2-3._ki*d&
+ &_var**2*g_var*umz-c_var**2*g_var*umz)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki*c_var**3/d_var**3/f_var*(log(umz)+z_log(s13,1._ki))*&
+ &umz**2-1._ki/3._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._k&
+ &i))/d_var**3*h_var*umz**2*(d_var**4*umz**2+2._ki*c_var*d_var**3*&
+ &umz**2+c_var**2*d_var**2*umz**2+c_var**2*g_var*d_var*umz-c_var*&
+ &d_var*g_var**2-2._ki*g_var*d_var**3*umz+d_var**2*g_var**2-c_var*&
+ &g_var*d_var**2*umz+c_var**2*g_var**2)+1._ki/3._ki/g_var**3*log(e_&
+ &var)/f_var*e_var**3*umz**2+1._ki/6._ki*(c_var+d_var)/d_var**2/g_v&
+ &ar**2*umz**2*(2._ki*c_var*g_var+2._ki*c_var*d_var*umz+2._ki*d_var*&
+ &*2*umz-3._ki*d_var*g_var)
+ !
+ case(4)
+ !
+ fg=-1._ki/6._ki*c_var**3/d_var**2/f_var**2*(log(umz)+z_log(s13,1._ki&
+ &))*umz**2+1._ki/6._ki*h_var**2/g_var**3/d_var**2*(log(1._ki-umz)+l&
+ &og(umz)+z_log(s23,1._ki))*umz**2*(-2._ki*d_var*g_var+2._ki*d_var*h&
+ &_var*umz+c_var*g_var)-1._ki/6._ki/g_var**3*log(e_var)/f_var**2*e_&
+ &var**2*umz*(2._ki*f_var*e_var+2._ki*g_var*f_var-c_var*g_var*umz)-&
+ &1._ki/6._ki/g_var**2/f_var/d_var*(2._ki*d_var**3*umz**2+4._ki*c_var&
+ &*d_var**2*umz**2+2._ki*c_var**2*d_var*umz**2-4._ki*c_var*d_var*g_&
+ &var*umz+d_var*g_var**2-3._ki*d_var**2*g_var*umz-c_var**2*g_var*u&
+ &mz)*umz
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/3._ki*c_var**3/d_var/f_var**3*(log(umz)+z_log(s13,1._ki))*&
+ &umz**2-1._ki/3._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._k&
+ &i))/d_var*h_var**3*umz**2+1._ki/3._ki/g_var**3*log(e_var)/f_var**&
+ &3*e_var*(-c_var*g_var**2*f_var*umz+c_var**2*f_var**2*umz**2+c_v&
+ &ar**2*g_var**2*umz**2-c_var**2*g_var*f_var*umz**2+g_var**2*f_va&
+ &r**2+f_var**4+2._ki*c_var*f_var**3*umz+c_var*g_var*f_var**2*umz+&
+ &2._ki*g_var*f_var**3)+1._ki/6._ki/g_var**2/f_var**2*(g_var-c_var*u&
+ &mz-d_var*umz)*(-2._ki*c_var*d_var*umz**2-2._ki*d_var**2*umz**2+g_&
+ &var**2+d_var*g_var*umz+4._ki*c_var*g_var*umz)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki/f_var**4*(log(umz)+z_log(s13,1._ki))*c_var/d_var**4*(&
+ &c_var**2*d_var**2*umz**2+2._ki*c_var*d_var**2*f_var*umz+2._ki*d_v&
+ &ar*f_var**2*h_var+c_var**2*f_var**2)*(-2._ki*d_var*f_var-umz*c_v&
+ &ar*d_var-c_var*f_var)+1._ki/24._ki*c_var*(-1._ki+umz)*(-18._ki*c_va&
+ &r**2*d_var-42._ki*c_var*d_var**2-26._ki*d_var**3-18._ki*d_var*umz*&
+ &c_var**2-42._ki*umz*c_var*d_var**2-26._ki*umz*d_var**3+63._ki*c_va&
+ &r*g_var*d_var+52._ki*g_var*d_var**2+18._ki*c_var**2*g_var)/d_var*&
+ &*2/f_var**3+1._ki/4._ki/g_var*log(e_var)/f_var**4*e_var**4-7._ki/8&
+ &._ki*c_var**2/d_var**2/f_var**3*g_var**2-7._ki/4._ki*c_var**2/f_va&
+ &r**3-3._ki/4._ki*c_var**3/d_var/f_var**3+3._ki/4._ki*c_var**3/d_var&
+ &**2/f_var**3*g_var+21._ki/8._ki*c_var**2/d_var/f_var**3*g_var-13.&
+ &_ki/12._ki*c_var*d_var/f_var**3+13._ki/6._ki*c_var/f_var**3*g_var-1&
+ &3._ki/12._ki*c_var/d_var/f_var**3*g_var**2-1._ki/4._ki*c_var**3/d_v&
+ &ar**3/f_var**3*g_var**2-1._ki/4._ki/g_var*(log(1._ki-umz)+log(umz)&
+ &+z_log(s23,1._ki))/d_var**4*h_var**4
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*c_var**2/f_var**3/d_var**4*(log(umz)+z_log(s13,1._ki&
+ &))*(1._ki-umz)*(3._ki*c_var**2*f_var**2+c_var**2*d_var**2*umz**2+&
+ &6._ki*d_var**2*f_var**2+8._ki*c_var*d_var*f_var**2+2._ki*c_var**2*&
+ &d_var*f_var*umz+4._ki*c_var*d_var**2*f_var*umz)-1._ki/12._ki/g_var&
+ &**2*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**4*h_var**3*&
+ &(1._ki-umz)*(-d_var*h_var*umz-3._ki*c_var*g_var+d_var*g_var)-1._ki&
+ &/4._ki/g_var/f_var**2*c_var*h_var*(1._ki-umz)*umz**2+1._ki/2._ki/f_&
+ &var**2*c_var*(1._ki-umz)*umz+1._ki/6._ki/f_var**2*d_var*(1._ki-umz)&
+ &*umz+19._ki/24._ki/f_var**2*c_var**2/d_var*(1._ki-umz)*umz+5._ki/12&
+ &._ki/f_var**2*c_var**3/d_var**2*(1._ki-umz)*umz-1._ki/12._ki/g_var/&
+ &f_var**2*d_var**2*(1._ki-umz)*umz**2-1._ki/12._ki/g_var/f_var**2*c&
+ &_var**3/d_var*(1._ki-umz)*umz**2+1._ki/24._ki*(-1._ki+umz)*(2._ki*g_&
+ &var**3*f_var*d_var**3+2._ki*log(e_var)*e_var**4*d_var**3+6._ki*c_&
+ &var**3*g_var**3*f_var+13._ki*c_var**2*g_var**3*f_var*d_var+6._ki*&
+ &c_var*g_var**3*f_var*d_var**2)/f_var**3/g_var**2/d_var**3
+ !
+ case(3)
+ !
+ fg=-1._ki/12._ki/g_var**2*log(e_var)/f_var**3*e_var**4*umz-1._ki/12.&
+ &_ki/g_var**2*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**4*h&
+ &_var**3*umz*(-d_var*h_var*umz-3._ki*c_var*g_var+d_var*g_var)+1._k&
+ &i/12._ki*c_var**2/f_var**3/d_var**4*(log(umz)+z_log(s13,1._ki))*(&
+ &3._ki*c_var**2*f_var**2+c_var**2*d_var**2*umz**2+6._ki*d_var**2*f&
+ &_var**2+8._ki*c_var*d_var*f_var**2+2._ki*c_var**2*d_var*f_var*umz&
+ &+4._ki*c_var*d_var**2*f_var*umz)*umz-1._ki/4._ki/g_var/f_var**2*c_&
+ &var*h_var*umz**3+1._ki/2._ki/f_var**2*c_var*umz**2+1._ki/6._ki/f_va&
+ &r**2*d_var*umz**2+19._ki/24._ki/f_var**2*c_var**2/d_var*umz**2+5.&
+ &_ki/12._ki/f_var**2*c_var**3/d_var**2*umz**2-1._ki/4._ki*g_var/d_va&
+ &r/f_var**2*c_var*umz-1._ki/12._ki/g_var/f_var**2*c_var**3/d_var*u&
+ &mz**3-1._ki/12._ki/g_var/f_var**2*d_var**2*umz**3-13._ki/24._ki*g_v&
+ &ar/d_var**2/f_var**2*c_var**2*umz-1._ki/4._ki*g_var/d_var**3/f_va&
+ &r**2*c_var**3*umz-1._ki/12._ki*g_var*(-1._ki+umz)/f_var**2-1._ki/12&
+ &._ki*g_var/f_var**2
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**2*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**3*h_var**4*umz-1._ki/12._ki/g_var**2*log(e_var)/f_var**4*e&
+ &_var**3*(-f_var*e_var-g_var*f_var+3._ki*c_var*g_var*umz)+1._ki/12&
+ &._ki*c_var**2/d_var**3/f_var**4*(log(umz)+z_log(s13,1._ki))*(c_va&
+ &r**2*f_var**2+3._ki*c_var**2*d_var**2*umz**2+6._ki*d_var**2*f_var&
+ &**2+4._ki*c_var*d_var*f_var**2+2._ki*c_var**2*d_var*f_var*umz+8._k&
+ &i*c_var*d_var**2*f_var*umz)*umz+1._ki/4._ki/g_var/f_var**3*c_var*&
+ &d_var*h_var*umz**3+1._ki/4._ki*g_var/f_var**3*h_var*umz+1._ki/4._ki&
+ &*c_var**3/d_var/f_var**3*umz**2-1._ki/2._ki*c_var*d_var/f_var**3*&
+ &umz**2-1._ki/4._ki/f_var**3*d_var**2*umz**2+1._ki/24._ki*c_var**2/f&
+ &_var**3*umz**2+1._ki/12._ki/g_var/f_var**3*d_var**3*umz**3-1._ki/1&
+ &2._ki*c_var**3/d_var**2/f_var**3*g_var*umz-7._ki/24._ki*c_var**2/d&
+ &_var/f_var**3*g_var*umz+1._ki/12._ki/g_var/f_var**3*c_var**3*umz*&
+ &*3-1._ki/12._ki*g_var**2/f_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**4*h_var**2*(-1._ki+umz)**2*(c_var**2*d_var**2*umz**2+2._ki&
+ &*c_var*d_var**3*umz**2+d_var**4*umz**2+3._ki*c_var**2*g_var**2+d&
+ &_var**2*g_var**2-2._ki*c_var*d_var*g_var**2+2._ki*c_var**2*d_var*&
+ &g_var*umz-2._ki*d_var**3*g_var*umz)+1._ki/12._ki*c_var**3/d_var**4&
+ &/f_var**2*(log(umz)+z_log(s13,1._ki))*(-1._ki+umz)**2*(-4._ki*d_va&
+ &r*f_var-umz*c_var*d_var-3._ki*c_var*f_var)+1._ki/4._ki/g_var**2/f_&
+ &var*c_var*h_var*(-1._ki+umz)**2*umz**2-1._ki/3._ki/g_var/f_var*c_v&
+ &ar*(-1._ki+umz)**2*umz-5._ki/24._ki/g_var/f_var*d_var*(-1._ki+umz)*&
+ &*2*umz+1._ki/12._ki/g_var**2/f_var*d_var**2*(-1._ki+umz)**2*umz**2&
+ &-1._ki/24._ki/g_var/f_var*c_var**2/d_var*(-1._ki+umz)**2*umz+1._ki/&
+ &12._ki/g_var**2/f_var*c_var**3/d_var*(-1._ki+umz)**2*umz**2+1._ki/&
+ &12._ki/g_var/f_var*c_var**3/d_var**2*(-1._ki+umz)**2*umz+1._ki/24.&
+ &_ki*(-1._ki+umz)**2*(3._ki*g_var**3*f_var*d_var**3+2._ki*log(e_var)&
+ &*e_var**4*d_var**3-5._ki*c_var**2*g_var**3*f_var*d_var-6._ki*c_va&
+ &r**3*g_var**3*f_var+2._ki*c_var*g_var**3*f_var*d_var**2)/f_var**&
+ &2/g_var**3/d_var**3
+ !
+ case(3)
+ !
+ fg=1._ki/12._ki/g_var**3*log(e_var)/f_var**2*e_var**4*(1._ki-umz)*um&
+ &z+1._ki/12._ki*c_var**3/d_var**4/f_var**2*(log(umz)+z_log(s13,1._k&
+ &i))*(1._ki-umz)*(-4._ki*d_var*f_var-umz*c_var*d_var-3._ki*c_var*f_&
+ &var)*umz-1._ki/12._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,&
+ &1._ki))/d_var**4*h_var**2*(1._ki-umz)*umz*(c_var**2*d_var**2*umz*&
+ &*2+2._ki*c_var*d_var**3*umz**2+d_var**4*umz**2+3._ki*c_var**2*g_v&
+ &ar**2+d_var**2*g_var**2-2._ki*c_var*d_var*g_var**2+2._ki*c_var**2&
+ &*d_var*g_var*umz-2._ki*d_var**3*g_var*umz)+1._ki/4._ki/g_var**2/f_&
+ &var*c_var*h_var*(1._ki-umz)*umz**3-1._ki/3._ki/g_var/f_var*c_var*(&
+ &1._ki-umz)*umz**2-5._ki/24._ki/g_var/f_var*d_var*(1._ki-umz)*umz**2&
+ &+1._ki/12._ki/f_var*c_var/d_var*(1._ki-umz)*umz-5._ki/24._ki/f_var*c&
+ &_var**2/d_var**2*(1._ki-umz)*umz+1._ki/12._ki/g_var**2/f_var*c_var&
+ &**3/d_var*(1._ki-umz)*umz**3-1._ki/4._ki/f_var*c_var**3/d_var**3*(&
+ &1._ki-umz)*umz-1._ki/24._ki/g_var/f_var*c_var**2/d_var*(1._ki-umz)*&
+ &umz**2+1._ki/12._ki/g_var/f_var*c_var**3/d_var**2*(1._ki-umz)*umz*&
+ &*2+1._ki/12._ki/g_var**2/f_var*d_var**2*(1._ki-umz)*umz**3-1._ki/8.&
+ &_ki*umz*(-1._ki+umz)/f_var
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**3*h_var**3*(1._ki-umz)*umz*(-d_var*h_var*umz-c_var*g_var+&
+ &d_var*g_var)+1._ki/12._ki*c_var**3/f_var**3/d_var**3*(log(umz)+z_&
+ &log(s13,1._ki))*(1._ki-umz)*umz*(-2._ki*d_var*f_var-umz*c_var*d_va&
+ &r-c_var*f_var)+1._ki/12._ki/g_var**3*log(e_var)/f_var**3*e_var**3&
+ &*(1._ki-umz)*(-f_var*e_var-g_var*f_var+c_var*g_var*umz)-1._ki/4._k&
+ &i/g_var**2/f_var**2*c_var*d_var*h_var*(1._ki-umz)*umz**3-1._ki/4.&
+ &_ki/f_var**2*c_var*(1._ki-umz)*umz-1._ki/6._ki/f_var**2*d_var*(1._ki&
+ &-umz)*umz+3._ki/8._ki/f_var**2/g_var*c_var**2*(1._ki-umz)*umz**2+5&
+ &._ki/24._ki/g_var/f_var**2*d_var**2*(1._ki-umz)*umz**2+1._ki/12._ki/&
+ &g_var/f_var**2*c_var**3/d_var*(1._ki-umz)*umz**2-1._ki/12._ki/f_va&
+ &r**2*c_var**3/d_var**2*(1._ki-umz)*umz-1._ki/8._ki/f_var**2*c_var*&
+ &*2/d_var*(1._ki-umz)*umz-1._ki/12._ki/g_var**2/f_var**2*d_var**3*(&
+ &1._ki-umz)*umz**3+1._ki/2._ki/f_var**2/g_var*c_var*d_var*(1._ki-umz&
+ &)*umz**2-1._ki/12._ki/g_var**2/f_var**2*c_var**3*(1._ki-umz)*umz**&
+ &3-1._ki/24._ki*g_var*(-1._ki+umz)/f_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=1._ki/12._ki/g_var**3*log(e_var)/f_var**2*e_var**4*umz**2-1._ki/1&
+ &2._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**4&
+ &*h_var**2*umz**2*(c_var**2*d_var**2*umz**2+2._ki*c_var*d_var**3*&
+ &umz**2+d_var**4*umz**2+3._ki*c_var**2*g_var**2+d_var**2*g_var**2&
+ &-2._ki*c_var*d_var*g_var**2+2._ki*c_var**2*d_var*g_var*umz-2._ki*d&
+ &_var**3*g_var*umz)+1._ki/12._ki*c_var**3/d_var**4/f_var**2*(log(u&
+ &mz)+z_log(s13,1._ki))*(-4._ki*d_var*f_var-umz*c_var*d_var-3._ki*c_&
+ &var*f_var)*umz**2+1._ki/4._ki/g_var**2/f_var*c_var*h_var*umz**4-1&
+ &._ki/3._ki/g_var/f_var*c_var*umz**3-5._ki/24._ki/g_var/f_var*d_var*&
+ &umz**3+1._ki/12._ki/g_var**2/f_var*d_var**2*umz**4-1._ki/4._ki/f_va&
+ &r*c_var**3/d_var**3*umz**2+1._ki/12._ki/f_var*c_var/d_var*umz**2-&
+ &5._ki/24._ki/f_var*c_var**2/d_var**2*umz**2+1._ki/12._ki/g_var**2/f&
+ &_var*c_var**3/d_var*umz**4+1._ki/12._ki/g_var/f_var*c_var**3/d_va&
+ &r**2*umz**3-1._ki/24._ki/g_var/f_var*c_var**2/d_var*umz**3+1._ki/8&
+ &._ki*(-1._ki+umz**2)/f_var+1._ki/8._ki/f_var
+ !
+ case(4)
+ !
+ fg=1._ki/12._ki*c_var**3/f_var**3/d_var**3*(log(umz)+z_log(s13,1._ki&
+ &))*umz**2*(-2._ki*d_var*f_var-umz*c_var*d_var-c_var*f_var)+1._ki/&
+ &12._ki/g_var**3*log(e_var)/f_var**3*e_var**3*(-f_var*e_var-g_var&
+ &*f_var+c_var*g_var*umz)*umz-1._ki/12._ki/g_var**3*(log(1._ki-umz)+&
+ &log(umz)+z_log(s23,1._ki))/d_var**3*h_var**3*umz**2*(-d_var*h_va&
+ &r*umz-c_var*g_var+d_var*g_var)-1._ki/4._ki/g_var**2/f_var**2*c_va&
+ &r*d_var*h_var*umz**4-1._ki/4._ki/f_var**2*c_var*umz**2-1._ki/6._ki/&
+ &f_var**2*d_var*umz**2-1._ki/12._ki/f_var**2*c_var**3/d_var**2*umz&
+ &**2-1._ki/8._ki/f_var**2*c_var**2/d_var*umz**2+1._ki/12._ki/g_var/f&
+ &_var**2*c_var**3/d_var*umz**3+1._ki/2._ki/f_var**2/g_var*c_var*d_&
+ &var*umz**3-1._ki/12._ki/g_var**2/f_var**2*c_var**3*umz**4+5._ki/24&
+ &._ki/g_var/f_var**2*d_var**2*umz**3+3._ki/8._ki/f_var**2/g_var*c_v&
+ &ar**2*umz**3-1._ki/12._ki/g_var**2/f_var**2*d_var**3*umz**4+1._ki/&
+ &24._ki*g_var*(-1._ki+umz)/f_var**2+1._ki/24._ki*g_var/f_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**2*h_var**4*umz**2+1._ki/12._ki/g_var**3*log(e_var)/f_var**&
+ &4*e_var**2*(f_var**4+3._ki*c_var**2*g_var**2*umz**2+c_var**2*f_v&
+ &ar**2*umz**2-2._ki*c_var**2*g_var*f_var*umz**2+2._ki*g_var*f_var*&
+ &*3+g_var**2*f_var**2+2._ki*f_var**3*c_var*umz-2._ki*c_var*g_var**&
+ &2*f_var*umz)+1._ki/12._ki*c_var**3/d_var**2/f_var**4*(log(umz)+z_&
+ &log(s13,1._ki))*umz**2*(-4._ki*d_var*f_var-3._ki*umz*c_var*d_var-c&
+ &_var*f_var)+1._ki/4._ki/g_var**2/f_var**3*c_var*d_var**2*h_var*um&
+ &z**4-1._ki/6._ki*c_var/f_var**3*g_var*umz+1._ki/24._ki*g_var/f_var*&
+ &*3*d_var*umz-1._ki/4._ki/g_var/f_var**3*c_var**3*umz**3+11._ki/24.&
+ &_ki*c_var**2/f_var**3*umz**2+1._ki/12._ki/g_var**2/f_var**3*d_var*&
+ &*4*umz**4-5._ki/24._ki/g_var/f_var**3*d_var**3*umz**3+7._ki/12._ki*&
+ &c_var*d_var/f_var**3*umz**2+1._ki/12._ki/g_var**2/f_var**3*c_var*&
+ &*3*d_var*umz**4-2._ki/3._ki/g_var/f_var**3*c_var*d_var**2*umz**3-&
+ &17._ki/24._ki/g_var/f_var**3*c_var**2*d_var*umz**3+1._ki/8._ki/f_va&
+ &r**3*d_var**2*umz**2-1._ki/12._ki*c_var**3/d_var/f_var**3*umz**2-&
+ &1._ki/24._ki*g_var**2/f_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_&
+ &var**4*h_var*(-1._ki+umz)**3*(-d_var*h_var*umz-c_var*g_var+d_var&
+ &*g_var)*(-2._ki*d_var**2*h_var*g_var*umz+c_var**2*d_var**2*umz**&
+ &2+2._ki*c_var*d_var**3*umz**2+d_var**4*umz**2+c_var**2*g_var**2+&
+ &d_var**2*g_var**2)+3._ki/4._ki/g_var**3*c_var*h_var*(-1._ki+umz)**&
+ &3*umz**2-1._ki/g_var**2*c_var*(-1._ki+umz)**3*umz-5._ki/8._ki/g_var&
+ &**2*d_var*(-1._ki+umz)**3*umz+1._ki/4._ki/g_var**2*c_var**3/d_var*&
+ &*2*(-1._ki+umz)**3*umz+1._ki/4._ki/g_var**3*c_var**3/d_var*(-1._ki+&
+ &umz)**3*umz**2-1._ki/8._ki/g_var**2*c_var**2/d_var*(-1._ki+umz)**3&
+ &*umz+1._ki/4._ki/g_var**3*d_var**2*(-1._ki+umz)**3*umz**2-1._ki/24.&
+ &_ki*(-1._ki+umz)**3*(6._ki*c_var**4*g_var**4*log(umz)+6._ki*c_var**&
+ &4*g_var**4*z_log(s13,1._ki)-6._ki*log(e_var)*e_var**4*d_var**4+3.&
+ &_ki*c_var**2*f_var*d_var**2*g_var**3-11._ki*f_var*d_var**4*g_var*&
+ &*3-2._ki*c_var*f_var*d_var**3*g_var**3-6._ki*c_var**3*f_var*d_var&
+ &*g_var**3)/f_var/d_var**4/g_var**4
+ !
+ case(3)
+ !
+ fg=-1._ki/4._ki/g_var**4*log(e_var)/f_var*e_var**4*(-1._ki+umz)**2*u&
+ &mz-1._ki/4._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**4*h_var*(-1._ki+umz)**2*umz*(-d_var*h_var*umz-c_var*g_var&
+ &+d_var*g_var)*(-2._ki*d_var**2*h_var*g_var*umz+c_var**2*d_var**2&
+ &*umz**2+2._ki*c_var*d_var**3*umz**2+d_var**4*umz**2+c_var**2*g_v&
+ &ar**2+d_var**2*g_var**2)-3._ki/4._ki/g_var**3*c_var*h_var*(-1._ki+&
+ &umz)**2*umz**3+1._ki/g_var**2*c_var*(-1._ki+umz)**2*umz**2+5._ki/8&
+ &._ki/g_var**2*d_var*(-1._ki+umz)**2*umz**2+1._ki/4._ki*c_var**4/f_v&
+ &ar/d_var**4*(log(umz)+z_log(s13,1._ki))*(-1._ki+umz)**2*umz-1._ki/&
+ &4._ki/g_var**2*c_var**3/d_var**2*(-1._ki+umz)**2*umz**2-1._ki/4._ki&
+ &/g_var**3*c_var**3/d_var*(-1._ki+umz)**2*umz**3+1._ki/8._ki/d_var*&
+ &*2/g_var*c_var**2*(-1._ki+umz)**2*umz-1._ki/4._ki/d_var**3/g_var*c&
+ &_var**3*(-1._ki+umz)**2*umz-1._ki/12._ki/d_var/g_var*c_var*(-1._ki+&
+ &umz)**2*umz+1._ki/8._ki/g_var**2*c_var**2/d_var*(-1._ki+umz)**2*um&
+ &z**2-1._ki/4._ki/g_var**3*d_var**2*(-1._ki+umz)**2*umz**3-11._ki/24&
+ &._ki*(-1._ki+umz)**2*umz/g_var
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**3*h_var**2*(-1._ki+umz)**2*umz*(3._ki*d_var**4*umz**2+3._ki&
+ &*c_var**2*d_var**2*umz**2+6._ki*c_var*d_var**3*umz**2-2._ki*c_var&
+ &*d_var*g_var**2+3._ki*d_var**2*g_var**2-4._ki*c_var*g_var*d_var**&
+ &2*umz+2._ki*c_var**2*d_var*g_var*umz+c_var**2*g_var**2-6._ki*d_va&
+ &r**3*g_var*umz)-1._ki/12._ki/g_var**4*log(e_var)/f_var**2*e_var**&
+ &3*(-1._ki+umz)**2*(-3._ki*f_var*e_var-3._ki*g_var*f_var+c_var*g_va&
+ &r*umz)+3._ki/4._ki/f_var/g_var**3*c_var*d_var*h_var*(-1._ki+umz)**&
+ &2*umz**3+7._ki/12._ki/g_var/f_var*c_var*(-1._ki+umz)**2*umz+11._ki/&
+ &24._ki/g_var/f_var*d_var*(-1._ki+umz)**2*umz+1._ki/12._ki*c_var**4/&
+ &d_var**3/f_var**2*(log(umz)+z_log(s13,1._ki))*(-1._ki+umz)**2*umz&
+ &+1._ki/4._ki/f_var/g_var**3*d_var**3*(-1._ki+umz)**2*umz**3-19._ki/&
+ &24._ki/f_var/g_var**2*c_var**2*(-1._ki+umz)**2*umz**2+1._ki/4._ki/f&
+ &_var/g_var**3*c_var**3*(-1._ki+umz)**2*umz**3-4._ki/3._ki/f_var/g_&
+ &var**2*c_var*d_var*(-1._ki+umz)**2*umz**2-5._ki/8._ki/g_var**2/f_v&
+ &ar*d_var**2*(-1._ki+umz)**2*umz**2-1._ki/12._ki/g_var/f_var*c_var*&
+ &*3/d_var**2*(-1._ki+umz)**2*umz+1._ki/24._ki/g_var/f_var*c_var**2/&
+ &d_var*(-1._ki+umz)**2*umz-1._ki/12._ki/g_var**2/f_var*c_var**3/d_v&
+ &ar*(-1._ki+umz)**2*umz**2-1._ki/12._ki*(-1._ki+umz)**2/f_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=-1._ki/4._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d&
+ &_var**4*h_var*(1._ki-umz)*umz**2*(-d_var*h_var*umz-c_var*g_var+d&
+ &_var*g_var)*(-2._ki*d_var**2*h_var*g_var*umz+c_var**2*d_var**2*u&
+ &mz**2+2._ki*c_var*d_var**3*umz**2+d_var**4*umz**2+c_var**2*g_var&
+ &**2+d_var**2*g_var**2)-1._ki/4._ki/g_var**4*log(e_var)/f_var*e_va&
+ &r**4*(1._ki-umz)*umz**2-3._ki/4._ki/g_var**3*c_var*h_var*(1._ki-umz&
+ &)*umz**4+1._ki/g_var**2*c_var*(1._ki-umz)*umz**3+5._ki/8._ki/g_var*&
+ &*2*d_var*(1._ki-umz)*umz**3-1._ki/4._ki/g_var**3*d_var**2*(1._ki-um&
+ &z)*umz**4+1._ki/8._ki/g_var**2*c_var**2/d_var*(1._ki-umz)*umz**3+1&
+ &._ki/4._ki*c_var**4/f_var/d_var**4*(log(umz)+z_log(s13,1._ki))*(1.&
+ &_ki-umz)*umz**2-1._ki/12._ki/d_var/g_var*c_var*(1._ki-umz)*umz**2-1&
+ &._ki/4._ki/d_var**3/g_var*c_var**3*(1._ki-umz)*umz**2+1._ki/8._ki/d_&
+ &var**2/g_var*c_var**2*(1._ki-umz)*umz**2-1._ki/4._ki/g_var**3*c_va&
+ &r**3/d_var*(1._ki-umz)*umz**4-1._ki/4._ki/g_var**2*c_var**3/d_var*&
+ &*2*(1._ki-umz)*umz**3+11._ki/24._ki*umz**2*(-1._ki+umz)/g_var
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**3*h_var**2*(1._ki-umz)*umz**2*(3._ki*d_var**4*umz**2+3._ki*&
+ &c_var**2*d_var**2*umz**2+6._ki*c_var*d_var**3*umz**2-2._ki*c_var*&
+ &d_var*g_var**2+3._ki*d_var**2*g_var**2-4._ki*c_var*g_var*d_var**2&
+ &*umz+2._ki*c_var**2*d_var*g_var*umz+c_var**2*g_var**2-6._ki*d_var&
+ &**3*g_var*umz)-1._ki/12._ki/g_var**4*log(e_var)/f_var**2*e_var**3&
+ &*(1._ki-umz)*(-3._ki*f_var*e_var-3._ki*g_var*f_var+c_var*g_var*umz&
+ &)*umz+3._ki/4._ki/f_var/g_var**3*c_var*d_var*h_var*(1._ki-umz)*umz&
+ &**4+7._ki/12._ki/g_var/f_var*c_var*(1._ki-umz)*umz**2+11._ki/24._ki/&
+ &g_var/f_var*d_var*(1._ki-umz)*umz**2-5._ki/8._ki/g_var**2/f_var*d_&
+ &var**2*(1._ki-umz)*umz**3+1._ki/12._ki*c_var**4/d_var**3/f_var**2*&
+ &(log(umz)+z_log(s13,1._ki))*(1._ki-umz)*umz**2-1._ki/12._ki/g_var**&
+ &2/f_var*c_var**3/d_var*(1._ki-umz)*umz**3-1._ki/12._ki/g_var/f_var&
+ &*c_var**3/d_var**2*(1._ki-umz)*umz**2+1._ki/24._ki/g_var/f_var*c_v&
+ &ar**2/d_var*(1._ki-umz)*umz**2+1._ki/4._ki/f_var/g_var**3*d_var**3&
+ &*(1._ki-umz)*umz**4-19._ki/24._ki/f_var/g_var**2*c_var**2*(1._ki-um&
+ &z)*umz**3+1._ki/4._ki/f_var/g_var**3*c_var**3*(1._ki-umz)*umz**4-4&
+ &._ki/3._ki/f_var/g_var**2*c_var*d_var*(1._ki-umz)*umz**3+1._ki/12._k&
+ &i*umz*(-1._ki+umz)/f_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**4*log(e_var)/f_var**3*e_var**2*(1._ki-umz)*(&
+ &6._ki*f_var**3*c_var*umz+c_var**2*g_var**2*umz**2-2._ki*c_var**2*&
+ &g_var*f_var*umz**2+3._ki*c_var**2*f_var**2*umz**2+4._ki*c_var*f_v&
+ &ar**2*g_var*umz+6._ki*g_var*f_var**3+3._ki*g_var**2*f_var**2-2._ki&
+ &*c_var*g_var**2*f_var*umz+3._ki*f_var**4)-1._ki/12._ki/g_var**4*(l&
+ &og(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**2*h_var**3*(1._ki-&
+ &umz)*umz**2*(-3._ki*d_var*h_var*umz-c_var*g_var+3._ki*d_var*g_var&
+ &)-3._ki/4._ki/g_var**3/f_var**2*c_var*d_var**2*h_var*(1._ki-umz)*u&
+ &mz**4+1._ki/6._ki/f_var**2*c_var*(1._ki-umz)*umz+1._ki/24._ki/f_var*&
+ &*2*d_var*(1._ki-umz)*umz-1._ki/4._ki/g_var**3/f_var**2*c_var**3*d_&
+ &var*(1._ki-umz)*umz**4-1._ki/12._ki/g_var/f_var**2*c_var**3/d_var*&
+ &(1._ki-umz)*umz**2+1._ki/12._ki*c_var**4/d_var**2/f_var**3*(log(um&
+ &z)+z_log(s13,1._ki))*(1._ki-umz)*umz**2-11._ki/24._ki/g_var/f_var**&
+ &2*d_var**2*(1._ki-umz)*umz**2+5._ki/8._ki/g_var**2/f_var**2*d_var*&
+ &*3*(1._ki-umz)*umz**3+5._ki/12._ki/g_var**2/f_var**2*c_var**3*(1._k&
+ &i-umz)*umz**3-17._ki/24._ki/f_var**2/g_var*c_var**2*(1._ki-umz)*um&
+ &z**2-1._ki/4._ki/g_var**3/f_var**2*d_var**4*(1._ki-umz)*umz**4+35.&
+ &_ki/24._ki/g_var**2/f_var**2*c_var**2*d_var*(1._ki-umz)*umz**3-13.&
+ &_ki/12._ki/f_var**2/g_var*c_var*d_var*(1._ki-umz)*umz**2+5._ki/3._ki&
+ &/g_var**2/f_var**2*c_var*d_var**2*(1._ki-umz)*umz**3-1._ki/24._ki*&
+ &g_var*(-1._ki+umz)/f_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=-1._ki/4._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d&
+ &_var**4*h_var*umz**3*(-d_var*h_var*umz-c_var*g_var+d_var*g_var)&
+ &*(-2._ki*d_var**2*h_var*g_var*umz+c_var**2*d_var**2*umz**2+2._ki*&
+ &c_var*d_var**3*umz**2+d_var**4*umz**2+c_var**2*g_var**2+d_var**&
+ &2*g_var**2)-1._ki/4._ki/g_var**4*log(e_var)/f_var*e_var**4*umz**3&
+ &-3._ki/4._ki/g_var**3*c_var*h_var*umz**5+1._ki/g_var**2*c_var*umz*&
+ &*4+5._ki/8._ki/g_var**2*d_var*umz**4-1._ki/4._ki/g_var**3*d_var**2*&
+ &umz**5-1._ki/4._ki/g_var**2*c_var**3/d_var**2*umz**4+1._ki/4._ki*c_&
+ &var**4/f_var/d_var**4*(log(umz)+z_log(s13,1._ki))*umz**3-1._ki/4.&
+ &_ki/g_var**3*c_var**3/d_var*umz**5-1._ki/12._ki/g_var*c_var/d_var*&
+ &umz**3-1._ki/4._ki/g_var*c_var**3/d_var**3*umz**3+1._ki/8._ki/g_var&
+ &*c_var**2/d_var**2*umz**3+1._ki/8._ki/g_var**2*c_var**2/d_var*umz&
+ &**4-11._ki/24._ki*(-1._ki+umz)*(1._ki+umz+umz**2)/g_var-11._ki/24._ki&
+ &/g_var
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**4*log(e_var)/f_var**2*e_var**3*umz**2*(-3._k&
+ &i*f_var*e_var-3._ki*g_var*f_var+c_var*g_var*umz)-1._ki/12._ki/g_va&
+ &r**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d_var**3*h_var**2&
+ &*umz**3*(c_var**2*g_var**2+3._ki*c_var**2*d_var**2*umz**2+6._ki*c&
+ &_var*d_var**3*umz**2+3._ki*d_var**4*umz**2-2._ki*c_var*d_var*g_va&
+ &r**2-6._ki*d_var**3*g_var*umz+3._ki*d_var**2*g_var**2+2._ki*c_var*&
+ &*2*d_var*g_var*umz-4._ki*c_var*g_var*d_var**2*umz)+3._ki/4._ki/g_v&
+ &ar**3/f_var*c_var*d_var*h_var*umz**5+7._ki/12._ki/g_var/f_var*c_v&
+ &ar*umz**3+11._ki/24._ki/g_var/f_var*d_var*umz**3-5._ki/8._ki/g_var*&
+ &*2/f_var*d_var**2*umz**4+1._ki/24._ki/g_var/f_var*c_var**2/d_var*&
+ &umz**3+1._ki/4._ki/g_var**3/f_var*c_var**3*umz**5-1._ki/12._ki/g_va&
+ &r/f_var*c_var**3/d_var**2*umz**3-1._ki/12._ki/g_var**2/f_var*c_va&
+ &r**3/d_var*umz**4+1._ki/4._ki/g_var**3/f_var*d_var**3*umz**5-4._ki&
+ &/3._ki/g_var**2/f_var*c_var*d_var*umz**4+1._ki/12._ki*c_var**4/d_v&
+ &ar**3/f_var**2*(log(umz)+z_log(s13,1._ki))*umz**3-19._ki/24._ki/g_&
+ &var**2/f_var*c_var**2*umz**4-1._ki/12._ki*(-1._ki+umz**2)/f_var-1.&
+ &_ki/12._ki/f_var
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/&
+ &d_var**2*h_var**3*umz**3*(-3._ki*d_var*h_var*umz-c_var*g_var+3._k&
+ &i*d_var*g_var)-1._ki/12._ki/g_var**4*log(e_var)/f_var**3*e_var**2&
+ &*(6._ki*f_var**3*c_var*umz+c_var**2*g_var**2*umz**2-2._ki*c_var**&
+ &2*g_var*f_var*umz**2+3._ki*c_var**2*f_var**2*umz**2+4._ki*c_var*f&
+ &_var**2*g_var*umz+6._ki*g_var*f_var**3+3._ki*g_var**2*f_var**2-2.&
+ &_ki*c_var*g_var**2*f_var*umz+3._ki*f_var**4)*umz-3._ki/4._ki/g_var*&
+ &*3/f_var**2*c_var*d_var**2*h_var*umz**5+1._ki/6._ki/f_var**2*c_va&
+ &r*umz**2+1._ki/24._ki/f_var**2*d_var*umz**2-17._ki/24._ki/f_var**2/&
+ &g_var*c_var**2*umz**3+5._ki/8._ki/g_var**2/f_var**2*d_var**3*umz*&
+ &*4+1._ki/12._ki*c_var**4/d_var**2/f_var**3*(log(umz)+z_log(s13,1.&
+ &_ki))*umz**3+5._ki/12._ki/g_var**2/f_var**2*c_var**3*umz**4-1._ki/4&
+ &._ki/g_var**3/f_var**2*d_var**4*umz**5-13._ki/12._ki/f_var**2/g_va&
+ &r*c_var*d_var*umz**3+5._ki/3._ki/g_var**2/f_var**2*c_var*d_var**2&
+ &*umz**4+35._ki/24._ki/g_var**2/f_var**2*c_var**2*d_var*umz**4-1._k&
+ &i/4._ki/g_var**3/f_var**2*c_var**3*d_var*umz**5-1._ki/12._ki/g_var&
+ &/f_var**2*c_var**3/d_var*umz**3-11._ki/24._ki/g_var/f_var**2*d_va&
+ &r**2*umz**3+1._ki/24._ki*g_var*(-1._ki+umz)/f_var**2+1._ki/24._ki*g_&
+ &var/f_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par3)
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/4._ki/g_var**4*(log(1._ki-umz)+log(umz)+z_log(s23,1._ki))/d&
+ &_var*h_var**4*umz**3-1._ki/4._ki/g_var**4*log(e_var)/f_var**4*e_v&
+ &ar*(-f_var*e_var-g_var*f_var+c_var*g_var*umz)*(c_var**2*f_var**&
+ &2*umz**2+c_var**2*g_var**2*umz**2+g_var**2*f_var**2+2._ki*f_var*&
+ &*2*g_var*e_var+f_var**4+2._ki*f_var**3*c_var*umz)+3._ki/4._ki/g_va&
+ &r**3/f_var**3*c_var*d_var**3*h_var*umz**5-1._ki/6._ki*g_var/f_var&
+ &**3*c_var*umz+1._ki/8._ki*g_var/f_var**3*d_var*umz+1._ki/4._ki/g_va&
+ &r**3/f_var**3*c_var**3*d_var**2*umz**5+3._ki/4._ki/g_var/f_var**3&
+ &*c_var**3*umz**3-1._ki/2._ki/f_var**3*c_var**2*umz**2+11._ki/24._ki&
+ &/g_var/f_var**3*d_var**3*umz**3-17._ki/8._ki/g_var**2/f_var**3*c_&
+ &var**2*d_var**2*umz**4+15._ki/8._ki/g_var/f_var**3*c_var**2*d_var&
+ &*umz**3-2._ki/g_var**2/f_var**3*c_var*d_var**3*umz**4-5._ki/8._ki/&
+ &g_var**2/f_var**3*d_var**4*umz**4-1._ki/6._ki/f_var**3*c_var*d_va&
+ &r*umz**2+1._ki/4._ki/g_var**3/f_var**3*d_var**5*umz**5+1._ki/4._ki*&
+ &c_var**4/d_var/f_var**4*(log(umz)+z_log(s13,1._ki))*umz**3-3._ki/&
+ &4._ki/g_var**2/f_var**3*c_var**3*d_var*umz**4+19._ki/12._ki/g_var/&
+ &f_var**3*c_var*d_var**2*umz**3-1._ki/8._ki/f_var**3*d_var**2*umz*&
+ &*2-1._ki/12._ki*g_var**2/f_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par3 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par2 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for nb_bar = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else if (dim == "n+4") then
+ !
+ if (nb_par == 0) then
+ !
+ fg=-1._ki/6._ki/g_var**2*log(-e_var)/f_var*e_var**3+1._ki/6._ki*(-1._k&
+ &i+z)/g_var**2*(log(z)+log(1._ki-z)+z_log(-s23,-1._ki))/d_var**2*h&
+ &_var**2*((-1._ki+z)*d_var*h_var-c_var*g_var+2._ki*d_var*g_var)-1.&
+ &_ki/6._ki*(-1._ki+z)*c_var**3/d_var**2/f_var*(log(1._ki-z)+z_log(-s&
+ &13,-1._ki))+1._ki/3._ki/g_var*z*c_var+1._ki/6._ki*d_var/g_var*z-1._ki&
+ &/3._ki/g_var*c_var-1._ki/6._ki/d_var/g_var*c_var**2+1._ki/6._ki/d_va&
+ &r/g_var*z*c_var**2+4._ki/9._ki-1._ki/6._ki*d_var/g_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=1._ki/24._ki*c_var**3/d_var**3/f_var**2*(log(umz)+z_log(-s13,-1.&
+ &_ki))*umz*(4._ki*d_var*f_var+c_var*d_var*umz+2._ki*c_var*f_var)-1.&
+ &_ki/24._ki*h_var**3/d_var**3/g_var**2*(log(1._ki-umz)+log(umz)+z_l&
+ &og(-s23,-1._ki))*umz*(-2._ki*c_var*g_var-d_var*h_var*umz+2._ki*d_v&
+ &ar*g_var)-1._ki/144._ki/d_var**2/g_var/f_var*(-25._ki*g_var*d_var*&
+ &*3*umz+18._ki*c_var*h_var*d_var**2*umz**2+6._ki*c_var**3*d_var*um&
+ &z**2+6._ki*d_var**4*umz**2+19._ki*g_var**2*d_var**2-18._ki*c_var*d&
+ &_var**2*g_var*umz-18._ki*c_var**2*d_var*g_var*umz-12._ki*c_var**3&
+ &*g_var*umz)-1._ki/24._ki/g_var**2*log(-e_var)/f_var**2*e_var**4
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var**4/d_var**3/f_var*(log(umz)+z_log(-s13,-1._ki&
+ &))*(1._ki-umz)*umz-1._ki/12._ki/g_var**3*(log(1._ki-umz)+log(umz)+z&
+ &_log(-s23,-1._ki))/d_var**3*h_var**2*(1._ki-umz)*umz*(c_var**2*d_&
+ &var**2*umz**2+2._ki*c_var*d_var**3*umz**2+d_var**4*umz**2+g_var*&
+ &*2*c_var**2-2._ki*d_var*c_var*g_var**2-2._ki*c_var*d_var**2*g_var&
+ &*umz+3._ki*g_var**2*d_var**2-3._ki*g_var*d_var**3*umz+c_var**2*d_&
+ &var*g_var*umz)+1._ki/72._ki/g_var**2/d_var**2*(1._ki-umz)*(-15._ki*&
+ &g_var*d_var**3*umz+18._ki*c_var*h_var*d_var**2*umz**2+6._ki*c_var&
+ &**3*d_var*umz**2+6._ki*d_var**4*umz**2+16._ki*g_var**2*d_var**2-2&
+ &4._ki*c_var*d_var**2*g_var*umz-3._ki*c_var**2*d_var*g_var*umz+6._k&
+ &i*c_var**3*g_var*umz)-1._ki/12._ki*log(-e_var)*e_var**4*(-1._ki+um&
+ &z)/g_var**3/f_var
+ !
+ case(3)
+ !
+ fg=-1._ki/12._ki*c_var**4/d_var**3/f_var*(log(umz)+z_log(-s13,-1._ki&
+ &))*umz**2-1._ki/12._ki/g_var**3*(log(1._ki-umz)+log(umz)+z_log(-s2&
+ &3,-1._ki))/d_var**3*h_var**2*umz**2*(c_var**2*d_var**2*umz**2+2.&
+ &_ki*c_var*d_var**3*umz**2+d_var**4*umz**2+g_var**2*c_var**2-2._ki&
+ &*d_var*c_var*g_var**2-2._ki*c_var*d_var**2*g_var*umz+3._ki*g_var*&
+ &*2*d_var**2-3._ki*g_var*d_var**3*umz+c_var**2*d_var*g_var*umz)+1&
+ &._ki/12._ki/g_var**3*log(-e_var)/f_var*e_var**4*umz+1._ki/72._ki/g_&
+ &var**2/d_var**2*umz*(-15._ki*g_var*d_var**3*umz+18._ki*c_var*h_va&
+ &r*d_var**2*umz**2+6._ki*c_var**3*d_var*umz**2+6._ki*d_var**4*umz*&
+ &*2+16._ki*g_var**2*d_var**2-24._ki*c_var*d_var**2*g_var*umz-3._ki*&
+ &c_var**2*d_var*g_var*umz+6._ki*c_var**3*g_var*umz)
+ !
+ case(4)
+ !
+ fg=-1._ki/24._ki*c_var**4/d_var**2/f_var**2*(log(umz)+z_log(-s13,-1&
+ &._ki))*umz**2-1._ki/24._ki*h_var**3/d_var**2/g_var**3*(log(1._ki-um&
+ &z)+log(umz)+z_log(-s23,-1._ki))*umz**2*(3._ki*d_var*g_var-2._ki*d_&
+ &var*h_var*umz-c_var*g_var)-1._ki/24._ki/g_var**3*log(-e_var)/f_va&
+ &r**2*e_var**3*(2._ki*f_var*e_var+3._ki*f_var*g_var-c_var*g_var*um&
+ &z)-1._ki/144._ki/d_var/g_var**2/f_var*(12._ki*d_var**4*umz**3+36._k&
+ &i*c_var*h_var*d_var**2*umz**3+13._ki*d_var*g_var**3-36._ki*c_var*&
+ &*2*d_var*g_var*umz**2-g_var**2*d_var**2*umz+18._ki*d_var*c_var*g&
+ &_var**2*umz-54._ki*c_var*d_var**2*g_var*umz**2+12._ki*d_var*c_var&
+ &**3*umz**3-6._ki*c_var**3*g_var*umz**2-24._ki*g_var*d_var**3*umz*&
+ &*2)
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for nb_bar = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In fg (function_4p2m_adj.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "Unexpected value for dim = %c0"
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ end function fg
+ !
+end module function_4p2m_adj
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql6.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql6.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql6.f90 (revision 119)
@@ -0,0 +1,438 @@
+!
+!****h* src/integrals/four_point/function_4p_ql6
+! NAME
+!
+! Module function_4p_ql6
+!
+! USAGE
+!
+! use function_4p_ql6
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! with 1 internal mass and two massive on-shell legs,
+! corresponding to QCDLoop box number 6
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql6, f4p_ql6_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql6
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ !~ use more_integ_info
+ use equal
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql6,f4p_ql6_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql6/f4p_ql6
+ ! NAME
+ !
+ ! Function f4p_ql6
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql6(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql6(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql6
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql6
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql6 = 0._ki
+ coupure_4p_ql6 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql6) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql6 (in file f4p_ql6.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql6'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql6) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql6_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql6= a4p_ql6_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql6: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql6: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql6 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql6 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql6
+ !
+ !****f* src/integrals/four_point/function_4p_ql6/f4p_ql6_c
+ ! NAME
+ !
+ ! Function f4p_ql6_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql6_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql6
+ !
+ !*****
+ function f4p_ql6_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql6_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql6(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql6_c)
+ !
+ end function f4p_ql6_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql6/a4p_ql6_n
+ ! NAME
+ !
+ ! recursive function a4p_ql6_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql6_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql6_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql6_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql6_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,msq,deno
+ complex(ki) :: ds12,ds23,dm
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ msq=m3s
+! write(6,*) 'm3s=',m3s
+ deno=-s12*(msq-s23)
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dm=msq-i_*del
+ !
+ res_4p_ql6_n(1) = 2._ki/deno
+ res_4p_ql6_n(2) = 0._ki
+ res_4p_ql6_n(3) = -real(2*log(1._ki-ds23/msq)+log(-ds12/msq)-2*log(mu2/msq))/deno
+ res_4p_ql6_n(4) = -aimag( (2*log(1._ki-ds23/msq)+log(-ds12/msq)-2*log(mu2/msq))/deno )
+ res_4p_ql6_n(5) = real(2*log(1._ki-ds23/msq)*log(-ds12/msq)-Pi**2/2+ &
+ & log(mu2/msq)**2 - log(mu2/msq)*(2*log(1._ki-ds23/msq)+log(-ds12/msq)) )/deno
+ res_4p_ql6_n(6) = aimag( (2*log(1._ki-ds23/msq)*log(-ds12/msq)+ &
+ & log(mu2/msq)**2 - log(mu2/msq)*(2*log(1._ki-ds23/msq)+log(-ds12/msq)) )/deno )
+ !
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql6: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql6: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql6_n
+ !
+ !
+end module function_4p_ql6
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql7.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql7.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql7.f90 (revision 119)
@@ -0,0 +1,444 @@
+!
+!****h* src/integrals/four_point/function_4p_ql7
+! NAME
+!
+! Module function_4p_ql7
+!
+! USAGE
+!
+! use function_4p_ql7
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 7
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql7, f4p_ql7_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql7
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ !~ use more_integ_info
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql7,f4p_ql7_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql7/f4p_ql7
+ ! NAME
+ !
+ ! Function f4p_ql7
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql7(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql7(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql7
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql7
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql7 = 0._ki
+ coupure_4p_ql7 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql7) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql7 (in file f4p_ql7.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql7'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql7) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql7_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql7= a4p_ql7_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql7: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql7: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql7 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql7 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql7
+ !
+ !****f* src/integrals/four_point/function_4p_ql7/f4p_ql7_c
+ ! NAME
+ !
+ ! Function f4p_ql7_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql7_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql7
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql7
+ !
+ !*****
+ function f4p_ql7_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql7_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql7(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql7_c)
+ !
+ end function f4p_ql7_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql7/a4p_ql7_n
+ ! NAME
+ !
+ ! recursive function a4p_ql7_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql7_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql7_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql7_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql7_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,msq,deno
+ complex(ki) :: ds12,ds23,dm,dp4
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ msq=m3s
+! write(6,*) 'm3s=',m3s
+ deno=-s12*(msq-s23)
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp4= s4 +i_*del
+ dm=msq-i_*del
+ !
+ res_4p_ql7_n(1) = 3._ki/2._ki/deno
+ res_4p_ql7_n(2) = 0._ki
+ res_4p_ql7_n(3) = -real( (2*log(1._ki-ds23/msq)+log(-ds12/msq)-log(1._ki-dp4/msq) &
+ & -3._ki/2._ki*log(mu2/msq) )/deno )
+ res_4p_ql7_n(4) = -aimag( (2*log(1._ki-ds23/msq)+log(-ds12/msq)-log(1._ki-dp4/msq) &
+ & -3._ki/2._ki*log(mu2/msq))/deno )
+ res_4p_ql7_n(5) = real( 2*log(1._ki-ds23/msq)*log(-ds12/msq) &
+ & - log(1._ki-dp4/msq)**2-5*Pi**2/12 - 2*cDiLog( (ds23-dp4)/(ds23-msq) ) &
+ & + 3._ki/4._ki*log(mu2/msq)**2 &
+ & - log(mu2/msq)*(2*log(1._ki-ds23/msq)+log(-ds12/msq)-log(1._ki-dp4/msq)) )/deno
+ res_4p_ql7_n(6) = aimag( 2*log(1._ki-ds23/msq)*log(-ds12/msq) &
+ & - log(1._ki-dp4/msq)**2 - 2*cdilog( (ds23-dp4)/(ds23-msq) ) &
+ & + 3._ki/4._ki*log(mu2/msq)**2 &
+ & - log(mu2/msq)*(2*log(1._ki-ds23/msq)+log(-ds12/msq)-log(1._ki-dp4/msq)) )/deno
+ !
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql7: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql7: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql7_n
+ !
+ !
+end module function_4p_ql7
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/Makefile.am (revision 119)
@@ -0,0 +1,27 @@
+noinst_LTLIBRARIES=libgolem95_integrals_four_point.la
+
+AM_FCFLAGS= \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical \
+ -I$(top_builddir)/src/integrals/one_point \
+ -I$(top_builddir)/src/integrals/two_point \
+ -I$(top_builddir)/src/integrals/three_point \
+ -I$(top_builddir)/avh_olo-2.2.1
+
+libgolem95_integrals_four_point_la_SOURCES= \
+ function_4p1m.f90 function_4p2m_3mi_onshell.f90 function_4p2m_adj.f90 \
+ function_4p2m_opp.f90 function_4p3m.f90 function_4p4m.f90 \
+ function_4p_ql10.f90 function_4p_ql11.f90 function_4p_ql12.f90 \
+ function_4p_ql13.f90 function_4p_ql14.f90 function_4p_ql15.f90 \
+ function_4p_ql16.f90 function_4p_ql6.f90 function_4p_ql7.f90 \
+ function_4p_ql8.f90 function_4p_ql9.f90 generic_function_4p.f90
+libgolem95_integrals_four_point_la_FCFLAGS= $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS= function_4p4m.mod function_4p_ql7.mod \
+ generic_function_4p.mod function_4p2m_adj.mod function_4p_ql14.mod \
+ function_4p_ql13.mod function_4p_ql15.mod function_4p_ql10.mod \
+ function_4p_ql9.mod function_4p_ql8.mod \
+ function_4p2m_3mi_onshell.mod function_4p_ql11.mod \
+ function_4p_ql12.mod function_4p2m_opp.mod function_4p3m.mod \
+ function_4p1m.mod function_4p_ql16.mod function_4p_ql6.mod
+CLEANFILES=*.mod
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql8.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql8.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql8.f90 (revision 119)
@@ -0,0 +1,453 @@
+!
+!****h* src/integrals/four_point/function_4p_ql8
+! NAME
+!
+! Module function_4p_ql8
+!
+! USAGE
+!
+! use function_4p_ql8
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 8
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql8, f4p_ql8_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql8
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ !~ use more_integ_info
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql8,f4p_ql8_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql8/f4p_ql8
+ ! NAME
+ !
+ ! Function f4p_ql8
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql8(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql8(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql8
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql8
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql8 = 0._ki
+ coupure_4p_ql8 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql8) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql8 (in file f4p_ql8.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql8'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql8) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql8_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql8= a4p_ql8_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql8: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql8: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql8 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql8 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql8
+ !
+ !****f* src/integrals/four_point/function_4p_ql8/f4p_ql8_c
+ ! NAME
+ !
+ ! Function f4p_ql8_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql8_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql8
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql8
+ !
+ !*****
+ function f4p_ql8_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql8_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql8(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql8_c)
+ !
+ end function f4p_ql8_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql8/a4p_ql8_n
+ ! NAME
+ !
+ ! recursive function a4p_ql8_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql8_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql8_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql8_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql8_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,msq,deno
+ complex(ki) :: ds12,ds23,dp3,dp4,di3,di4,di34,logm3,logm4,logmu3,logmu4,logsm,logsmu
+ complex(ki) :: eta,etaterm
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ msq=m3s
+! write(6,*) 'm3s=',m3s
+ deno=-s12*(msq-s23)
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp3= s3 +i_*del
+ dp4= s4 +i_*del
+ di3 = cdilog(1._ki - (msq-dp3)/(msq-ds23))
+ di4 = cdilog(1._ki - (msq-dp4)/(msq-ds23))
+ di34 = cdilog(1._ki+(msq-dp3)*(msq-dp4)/(ds12*msq))
+ logm3=log((msq-dp3)/msq)
+ logm4=log((msq-dp4)/msq)
+ logmu3=log((msq-dp3)/mu2)
+ logmu4=log((msq-dp4)/mu2)
+ logsmu=log(-ds12/mu2)
+ logsm=log(-ds12/msq)
+ eta=log((msq-dp3)/msq*(msq-dp4)/(-ds12))-log((msq-dp3)/msq)-log((msq-dp4)/(-ds12))
+! write(6,*) 'eta=',eta
+ etaterm=eta*log(1._ki-(msq-dp3)*(msq-dp4)/(-ds12*msq))
+ !
+ res_4p_ql8_n(1) = 1._ki/deno
+ res_4p_ql8_n(2) = 0._ki
+ res_4p_ql8_n(3) = real( -( log(-ds12/mu2)+log((msq-ds23)**2/(msq-dp3)/(msq-dp4)) )/deno )
+! res_4p_ql8_n(4) = aimag( -( log(-ds12/mu2)+log((msq-ds23)**2/(msq-dp3)/(msq-dp4)) )/deno )
+ res_4p_ql8_n(4) = aimag( -( log(-ds12/mu2)+log((msq-ds23)/(msq-dp3))+ &
+ & log((msq-ds23)/(msq-dp4)) )/deno )
+ res_4p_ql8_n(5) = real( (-Pi**2/6 -2*di3-2*di4-di34-etaterm+logsmu**2/2-logsm**2/2 &
+ & + 2*logsmu*log((msq-ds23)/msq) -logm3*logmu3 -logm4*logmu4 )/deno )
+ res_4p_ql8_n(6) = aimag( ( -2*di3-2*di4-di34-etaterm+logsmu**2/2-logsm**2/2 &
+ & + 2*logsmu*log((msq-ds23)/msq) -logm3*logmu3 -logm4*logmu4 )/deno )
+ !
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql8: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql8: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql8_n
+ !
+ !
+end module function_4p_ql8
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql9.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql9.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql9.f90 (revision 119)
@@ -0,0 +1,449 @@
+!
+!****h* src/integrals/four_point/function_4p_ql9
+! NAME
+!
+! Module function_4p_ql9
+!
+! USAGE
+!
+! use function_4p_ql9
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 9
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql9, f4p_ql9_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql9
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql9,f4p_ql9_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql9/f4p_ql9
+ ! NAME
+ !
+ ! Function f4p_ql9
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql9(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql9(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql9
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql9
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql9 = 0._ki
+ coupure_4p_ql9 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql9) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql9 (in file f4p_ql9.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql9'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql9) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql9_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql9= a4p_ql9_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql9: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql9: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql9 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql9 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql9
+ !
+ !****f* src/integrals/four_point/function_4p_ql9/f4p_ql9_c
+ ! NAME
+ !
+ ! Function f4p_ql9_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql9_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql9
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql9
+ !
+ !*****
+ function f4p_ql9_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql9_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql9(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql9_c)
+ !
+ end function f4p_ql9_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql9/a4p_ql9_n
+ ! NAME
+ !
+ ! recursive function a4p_ql9_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql9_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql9_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql9_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql9_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,msq,deno
+ complex(ki) :: ds12,ds23,dp2,dp3,dp4,di2,di3,logp2mu,logms23,logmmu,logsmu,etaterm,eta
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ msq=m3s
+! write(6,*) 'm3s=',m3s
+ deno=-s12*(msq-s23)
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp2= s2 +i_*del
+ dp3= s3 +i_*del
+ dp4= s4 +i_*del
+ di2 = cdilog(1._ki - ds12/dp2)
+ di3 = cdilog(1._ki-(msq-dp3)*(msq-ds23)/(-dp2*msq))
+ logp2mu=log(-dp2/mu2)
+ logsmu=log(-ds12/mu2)
+ logms23=log((msq-ds23)/msq)
+ logmmu=log(msq/mu2)
+ eta=log((msq-dp3)/msq*(msq-ds23)/(-dp2))-log((msq-dp3)/msq)-log((msq-ds23)/(-dp2))
+! write(6,*) 'eta=',eta
+ etaterm=eta*log(1._ki-(msq-dp3)*(msq-ds23)/(-dp2*msq))
+ !
+ res_4p_ql9_n(1) = 1._ki/2._ki/deno
+ res_4p_ql9_n(2) = 0._ki
+ res_4p_ql9_n(3) = real( -(log((-ds12)/mu2)-log((-dp2)/mu2)+log((msq-ds23)/msq)+&
+ & log(msq/mu2)/2._ki )/deno )
+ res_4p_ql9_n(4) = aimag( -(log((-ds12)/mu2)-log((-dp2)/mu2)+log((msq-ds23)/msq)+&
+ & log(msq/mu2)/2._ki )/deno )
+ res_4p_ql9_n(5) = real( (di3+etaterm+2*di2+Pi**2/12+(logsmu-logp2mu+logms23+&
+ & logmmu/2._ki)**2)/deno )
+ res_4p_ql9_n(6) = aimag((di3+etaterm+2*di2+ &
+ & (logsmu-logp2mu+logms23+logmmu/2._ki)**2)/deno)
+ !
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql9: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql9: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql9_n
+ !
+ !
+end module function_4p_ql9
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_3mi_onshell.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_3mi_onshell.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p2m_3mi_onshell.f90 (revision 119)
@@ -0,0 +1,459 @@
+!
+!****h* src/integrals/four_point/function_4p2m_3mi_onshell
+! NAME
+!
+! Module function_4p2m_3mi_onshell
+!
+! USAGE
+!
+! use function_4p2m_3mi_onshell
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional
+! two adjacent massive on-shell legs four point function with 3 internal masses,
+! all masses equal, the only massless internal line connects the two on-shell legs
+! => corresponding n-dim box is IR div
+! only without Feynman parameters in the numerator.
+!
+! OUTPUT
+!
+! This module exports the functions f4p2m_3mi_onshell, f4p2m_3mi_onshell_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p2m_3mi_onshell
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ !
+ use equal
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p2m_3mi_onshell,f4p2m_3mi_onshell_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell
+ ! NAME
+ !
+ ! Function f4p2m_3mi_onshell
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p2m_3mi_onshell(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional
+ ! two adjacent massive on-shell legs four point function with 3 internal masses,
+ ! all masses equal, the only massless internal line connects the two on-shell legs
+ ! => corresponding n-dim box is IR div
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n": (4-2*eps)- dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p2m_3mi_onshell(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p2m_3mi_onshell
+ !
+ integer :: nb_par
+ real(ki) :: coupure_4p2m_3mi_onshell
+ ! real(ki) :: plus_grand
+ real(ki) :: norma
+ ! complex(ki), dimension(4) :: tri
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p2m_3mi_onshell = 0._ki
+ coupure_4p2m_3mi_onshell = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p2m_3mi_onshell) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p2m_3mi_onshell (in file f4p2m_3mi_onshell.f90):&
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p2m_3mi_onshell'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p2m_3mi_onshell) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p2m_3mi_onshell_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p2m_3mi_onshell= a4p2m_3mi_onshell_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p2m_3mi_onshell: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p2m_3mi_onshell: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p2m_3mi_onshell not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p2m_3mi_onshell not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p2m_3mi_onshell
+ !
+ !****f* src/integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell_c
+ ! NAME
+ !
+ ! Function f4p2m_3mi_onshell_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p2m_3mi_onshell_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p2m_3mi_onshell
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p2m_3mi_onshell
+ !
+ !*****
+ function f4p2m_3mi_onshell_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p2m_3mi_onshell_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p2m_3mi_onshell(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p2m_3mi_onshell_c)
+ !
+ end function f4p2m_3mi_onshell_c
+ !
+ !****if* src/integrals/four_point/function_4p2m_3mi_onshell/a4p2m_3mi_onshell_n
+ ! NAME
+ !
+ ! recursive function a4p2m_3mi_onshell_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p2m_3mi_onshell_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! mass four point function eq.(2.9) of Denner/Beenakker Nucl.Phys.B338:349-370,1990
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p2m_3mi_onshell_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p2m_3mi_onshell_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p2m_3mi_onshell_n
+ !
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki) :: del
+ complex(ki) :: beta1,beta2,beta34,xs,x1,x2,prefac,logm0,brack,res
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! warning, mu2 has been set to one in formula below
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ beta34=Sqrt(1._ki-4*m1s/(s12+i_*del))
+ xs=-(1._ki-beta34)/(1._ki+beta34)
+ if ( equal_real(s1,zero) ) then
+ beta1=0._ki
+ x1=1._ki
+ else
+ beta1=Sqrt(1._ki-4*m1s/(s1+i_*del))
+ x1=-(1._ki-beta1)/(1._ki+beta1)
+ end if
+ if ( equal_real(s2,zero) ) then
+ beta2=0._ki
+ x2=1._ki
+ else
+ beta2=Sqrt(1._ki-4*m2s/(s2+i_*del))
+ x2=-(1._ki-beta2)/(1._ki+beta2)
+ end if
+ prefac=-xs/m1s/(m1s-s23)/(1-xs**2)
+ logm0=z_log(m1s,-1._ki)-2*Log(m1s-s23-i_*del)
+!
+ brack=Log(xs)*(-logm0+2*log(1-xs**2))+ &
+ & Pi**2/2+cdilog(xs**2)+log(x1)**2+log(x2)**2- &
+ & (cdilog(xs*x2*x1)+cdilog(xs*x2/x1)+ &
+ & cdilog(xs/x2*x1)+cdilog(xs/x2/x1)+ &
+ & log(1._ki-xs*x2*x1)*(log(xs)+log(x2)+log(x1))+ &
+ & log(1._ki-xs*x2/x1)*(log(xs)+log(x2)+log(1/x1))+ &
+ & log(1._ki-xs/x2*x1)*(log(xs)+log(1/x2)+log(x1))+ &
+ & log(1._ki-xs/x2/x1)*(log(xs)+log(1/x2)+log(1/x1)))
+ !
+ res=prefac*brack
+ !
+ res_4p2m_3mi_onshell_n(1) = 0._ki
+ res_4p2m_3mi_onshell_n(2) = 0._ki
+ res_4p2m_3mi_onshell_n(3) = real(-prefac*Log(xs))
+ res_4p2m_3mi_onshell_n(4) = aimag(-prefac*Log(xs))
+ res_4p2m_3mi_onshell_n(5) = real(res)+log(mu2)*res_4p2m_3mi_onshell_n(3)
+ res_4p2m_3mi_onshell_n(6) = aimag(res)+log(mu2)*res_4p2m_3mi_onshell_n(4)
+ !
+ !
+ else
+ !
+ !~ call print_error('In function f4p2m_3mi_onshell: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p2m_3mi_onshell: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p2m_3mi_onshell_n
+ !
+ !
+end module function_4p2m_3mi_onshell
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/generic_function_4p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/generic_function_4p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/generic_function_4p.f90 (revision 119)
@@ -0,0 +1,3029 @@
+!****h* src/integrals/four_point/generic_function_4p
+!
+!~ changed 13.5.10 to include globally defined scale mu2_scale_par
+!
+!~ 24.6.2010: uses Andre van Hameren's OneLOop for finite D0
+!
+! NAME
+!
+! Module generic_function_4p
+!
+! USAGE
+!
+! use generic_function_4p
+!
+! DESCRIPTION
+!
+! This module contains the generic routines to compute the
+! four point functions in n+2 and n+4 dimensions. It can compute
+! the zero mass, one mass, two mass adjacent, two mass opposite, three mass
+! and four mass four point functions with massless internal lines
+! It can also calculate the IR divergent boxes with massive internal lines, but
+! ONLY in the scalar case.
+! For the latter, the (4-2*eps)-dim expressions are implemented
+!
+!
+! OUTPUT
+!
+! It exports three public routines:
+! * f4p -- a function to compute the four point function in n dimensions
+! (used donly if internal masses are present)
+! * f4p_np2 -- a function to compute the four point function in n+2 dimensions
+! * f4p_np4 -- a function to compute the four point function in n+4 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s (src/kinematic/matrice_s.f90) ( only : dim_s, set_ref )
+! * s_matrix_type (src/module/s_matrix_type.f90)
+! * array (src/module/array.f90)
+! * tri_croissant (src/module/tri.f90)
+! * constante (src/module/constante.f90)
+! * function_4p1m (src/integrals/four_point/function_4p1m.f90)
+! * function_4p2m_opp (src/integrals/four_point/function_4p2m_opp.f90)
+! * function_4p2m_adj (src/integrals/four_point/function_4p2m_adj.f90)
+! * function_4p3m (src/integrals/four_point/function_4p3m.f90)
+! * function_4p4m (src/integrals/four_point/function_4p4m.f90)
+! * cache (src/module/cache.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/generic_function_3p.f90)
+! * parametre (src/module/parametre.f90), only : coupure_3p2m,coupure_3p3m,coupure_4p1m,
+! coupure_4p2m_opp,coupure_4p2m_adj,coupure_4p3m,coupure_4p4m
+! * equal (src/module/equal.f90)
+!
+
+!*****
+module generic_function_4p
+ !
+ use precision_golem, only: ki
+ use matrice_s
+ use s_matrix_type
+ use array
+ use tri_croissant
+ use constante
+ use function_4p1m
+ use function_4p2m_opp
+ use function_4p2m_adj
+ use function_4p3m
+ use function_4p4m
+ use function_4p2m_3mi_onshell
+ use function_4p_ql6
+ use function_4p_ql7
+ use function_4p_ql8
+ use function_4p_ql9
+ use function_4p_ql10
+ use function_4p_ql11
+ use function_4p_ql12
+ use function_4p_ql13
+ use function_4p_ql14
+ use function_4p_ql15
+ use function_4p_ql16
+ use form_factor_type
+ use cache
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use generic_function_3p
+ use parametre , only : coupure_4p1m,coupure_4p2m_opp,&
+ coupure_4p2m_adj,coupure_4p3m,coupure_4p4m,&
+ mu2_scale_par,olo,withlt
+ use equal
+
+ !---#[ avh_olo:
+ use avh_olo, only: olo_d0, olo_scale, olo_onshell
+ !---#] avh_olo:
+ implicit none
+ !
+ private
+ !
+ integer, dimension(2) :: set_tot
+ !
+ interface f4p_sca
+ !
+ module procedure f4p_sca_p
+ module procedure f4p_sca_r, f4p_sca_c
+ !
+ end interface
+ !
+ public :: f4p, f4p_np2, f4p_np4 !!! These functions return complex arrays
+ !
+ ! added to include LT option, Jan2011
+!AC! interface
+!AC! function D0(p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4)
+!AC! use precision_golem, only: ki_lt
+!AC! implicit none
+!AC! real(ki_lt), intent(in) :: p1, p2, p3, p4, p1p2, p2p3
+!AC! real(ki_lt), intent(in) :: m1, m2, m3, m4
+!AC! complex(ki_lt) :: D0
+!AC! end function D0
+!AC! end interface
+ !
+!AC! interface
+!AC! function D0C(p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4)
+!AC! use precision_golem, only: ki_lt
+!AC! implicit none
+!AC! real(ki_lt), intent(in) :: p1, p2, p3, p4, p1p2, p2p3
+!AC! complex(ki_lt), intent(in) :: m1, m2, m3, m4
+!AC! complex(ki_lt) :: D0C
+!AC! end function D0C
+!AC! end interface
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np2
+ ! NAME
+ !
+ ! Function f4p_np2
+ !
+ ! USAGE
+ !
+ ! complex = f4p_np2(s_mat,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes recursively the generic four point function in n+2 dimensions,
+ ! with or without Feynman parameters in the numerator using the formula of
+ ! JHEP 10 (2005) 015.
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type (s_matrix_poly), giving the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * b_pin -- an integer which represents the set of the pinched propagators
+ ! * parf1 -- an integer (optional), the label of the first Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) number
+ !
+ ! NOTE
+ !
+ ! This function has been changed! It accepts only a s_matrix_poly-type as input
+ ! and returns a complex number instead of a real array!
+ !
+ !*****
+ !
+ recursive function f4p_np2(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4,test_numeric) result(res_4p_np2)
+ !
+ type(s_matrix_poly), intent (in) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ integer, intent (in), optional :: parf1,parf2,parf3,parf4
+ logical, intent (in), optional :: test_numeric
+ complex(ki) :: res_4p_np2
+ !
+ integer :: par1,par2,par3,par4
+ integer :: parn1,parn2,parn3,parn4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ integer :: taille
+ integer :: nb_par
+ real(ki) :: arg3,arg4,arg5,arg6
+ real(ki) :: m1s,m2s,m3s,m4s,s1,s2,s3,s4
+ complex(ki) :: temp0
+ complex(ki), dimension(3) :: temp1,temp2,temp3,temp4
+ integer :: j,m1,m2,m3,m4
+ integer, dimension(4) :: s
+ integer :: ib,b_pro_mj,pro_dim
+ logical :: not_numeric
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+ !
+ sortie : if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ res_4p_np2 = czero
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'something wrong with par1,..,par4'
+ call catch_exception(0)
+ !
+ else sortie
+ !
+ !
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini = (/par1,par2,par3,par4/)
+ !
+ nb_par = count(mask=z_param_ini/=0)
+ !
+ if (b_pro < 256) then
+ s = bit_sets(b_pro*8:b_pro*8+3)
+ else
+ s = unpackb(b_pro,4)
+ end if
+ !
+ !
+ ! test for switch to numerical evaluation needs to be performed only once
+ !
+ switch_to_numerics: if (present(test_numeric) ) then
+ !
+ not_numeric = test_numeric !this should always be true...
+ !
+ else switch_to_numerics
+ !
+ ! make sure numerical branch is never entered for cases where it is not implemented
+
+ ! NB: This order of the statements
+ ! reduces the number of comparisons required.
+ !
+ ! numerical branch not implemented for complex masses yet:
+ if (iand(s_mat_p%b_cmplx, b_pro) .ne. 0 ) then
+ !
+ not_numeric = .true.
+ !
+ else if (iand(s_mat_p%b_zero, b_pro) .ne. b_pro ) then !case internal masses
+ !
+ not_numeric = .true.
+ !
+ else
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! To get the s1..s4, only the real parts of the arguments are needed!
+ !
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ m1s = -s_mat_p%pt_real(m1,m1)/2._ki
+ m2s = -s_mat_p%pt_real(m2,m2)/2._ki
+ m3s = -s_mat_p%pt_real(m3,m3)/2._ki
+ m4s = -s_mat_p%pt_real(m4,m4)/2._ki
+ !
+ !
+ s1=arg3+m1s+m4s
+ s2=arg4+m1s+m2s
+ s3=arg5+m2s+m3s
+ s4=arg6+m3s+m4s
+ !
+ ! case 4 non-light-like legs
+ if ( .not.(equal_real(s1,zero)) .and. &
+ & .not.(equal_real(s2,zero)) .and. &
+ & .not.(equal_real(s3,zero)) .and. &
+ & .not.(equal_real(s4,zero))) then
+ not_numeric = .true.
+ else
+ not_numeric=.not. ( abs(norma_sumb(b_pin)) < coupure(s_mat_p,s) )
+ end if
+ !
+ end if
+ !
+ end if switch_to_numerics
+ !
+ !
+ taille = dim_s - size(s)
+ !
+ select case(taille)
+ !
+ case(0)
+ !
+ set_tot = 0
+ !
+ case(1)
+ set_tot(1) = 0
+
+ if (b_pin < 256) then
+ set_tot(2) = bit_sets(b_pin*8)
+ else
+ set_tot(2:2) = unpackb(b_pin,1)
+ end if
+ !
+ !
+ case(2)
+ if (b_pin < 256) then
+ set_tot(:) = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set_tot(:) = unpackb(b_pin,2)
+ end if
+ end select
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ cache : if ( computed_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4) ) then
+ !
+ res_4p_np2 = results_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4)
+ !
+ else cache
+ !
+ numeric : if ( not_numeric ) then
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ if (nb_par == 3) then
+ !
+ temp0 = b(par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par2,parf2=par3,test_numeric = not_numeric) &
+ + b(par3,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par2,parf2=par4,test_numeric = not_numeric) &
+ + b(par2,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par3,parf2=par4,test_numeric = not_numeric) &
+ - ( inv_s(par2,par3,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par4,test_numeric = not_numeric) &
+ + inv_s(par2,par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par3,test_numeric = not_numeric) &
+ + inv_s(par3,par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par2,test_numeric = not_numeric) )/3._ki
+ !
+ temp1(:) = czero
+ temp2(:) = czero
+ temp3(:) = czero
+ temp4(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j,b_pin)*f3p(s_mat_p,b_pro_mj,par2, &
+ &par3,par4)/2._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ temp1 = temp1 + inv_s(j,par4,b_pin)*f3p(s_mat_p,b_pro_mj,par2,par3)/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ temp2 = temp2 + inv_s(j,par3,b_pin)*f3p(s_mat_p,b_pro_mj,par2,par4)/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ temp3 = temp3 + inv_s(j,par2,b_pin)*f3p(s_mat_p,b_pro_mj,par3,par4)/6._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ res_4p_np2 = ( temp0 + temp1(3) + temp2(3) + temp3(3) &
+ & + temp4(3) )/2._ki/sumb(b_pin)
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par == 2) then
+ !
+ temp0 = b(par3,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf4=par4,test_numeric = not_numeric) &
+ &+ b(par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf4=par3,test_numeric = not_numeric) &
+ &- inv_s(par3,par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,test_numeric = not_numeric)/2._ki
+ !
+ temp1(:) = czero
+ temp2(:) = czero
+ temp3(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ temp3 = temp3 - b(j,b_pin)*f3p(s_mat_p,b_pro_mj,par3,par4)/2._ki
+ !
+ end if
+ !
+ if (j /= par3) then
+ !
+ temp1 = temp1 + inv_s(j,par4,b_pin)*f3p(s_mat_p,b_pro_mj,par3)/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ temp2 = temp2 + inv_s(j,par3,b_pin)*f3p(s_mat_p,b_pro_mj,par4)/4._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np2 = (temp0 + temp1(3) + temp2(3) + temp3(3)) &
+ &*2._ki/3._ki/sumb(b_pin)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par == 1) then
+ !
+ temp0 = b(par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,test_numeric = not_numeric)
+ temp1(:) = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (j /= par4) then
+ !
+ temp2 = temp2 - b(j,b_pin)*f3p(s_mat_p,b_pro_mj,par4)/2._ki
+ !
+ end if
+ !
+ temp1 = temp1 + inv_s(j,par4,b_pin)*f3p(s_mat_p,b_pro_mj)/2._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np2 = (temp0 + temp1(3) + temp2(3))/sumb(b_pin)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ else
+ !
+ res_4p_np2 = f4p_np2_sca(s_mat_p,b_pro,b_pin)
+ !
+ end if
+ !
+ else numeric
+ !
+ where (z_param_out /= 0)
+ !
+ z_param_out = locateb(z_param_out,b_pro)
+ !
+ elsewhere
+ !
+ z_param_out = 0
+ !
+ end where
+ !
+ parn1 = z_param_out(1)
+ parn2 = z_param_out(2)
+ parn3 = z_param_out(3)
+ parn4 = z_param_out(4)
+ !
+ res_4p_np2 = f4p_np2_numeric(s_mat_p,b_pro,parn1,parn2,parn3,parn4)
+ !
+ end if numeric
+ !
+ computed_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4) = .true.
+ results_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4) = res_4p_np2
+ !
+ end if cache
+ !
+ end if sortie
+ !
+ end function f4p_np2
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np2_sca
+ ! NAME
+ !
+ ! Function f4p_np2_sca
+ !
+ ! USAGE
+ !
+ ! complex = f4p_np2_sca(s_mat_p,b_pro,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic four point function in n+2 dimensions,
+ ! without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a type s_matrix_poly object, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) number!
+ !
+ ! NOTE
+ !
+ ! This function now returns a complex number instaed of a real array!
+ !
+ !*****
+ !
+ function f4p_np2_sca(s_mat_p,b_pro,b_pin)
+ !
+ type(s_matrix_poly), intent(in) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ complex(ki) :: f4p_np2_sca
+ !
+ if (iand(s_mat_p%b_zero,b_pro) .eq. b_pro) then !!! no internal masses
+ !
+ f4p_np2_sca = f4p_np2_sca_massless(s_mat_p%pt_real, b_pro, b_pin)
+ !
+ else
+ !
+ f4p_np2_sca = f4p_np2_sca_massive(s_mat_p, b_pro, b_pin)
+ !
+ end if
+ !
+ end function f4p_np2_sca
+ !
+ function f4p_np2_sca_massless(s_mat_r,b_pro,b_pin)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro,b_pin
+ complex(ki) :: f4p_np2_sca_massless
+ !
+ integer :: par1,par2,par3,par4
+ real(ki), dimension(4) :: temp
+ complex(ki), dimension(2) :: temp_cmplx
+ !
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ logical, dimension(3:6) :: argz
+ integer, dimension(4) :: s
+ integer :: dim_pro
+ !
+ if (b_pro < 256) then
+ dim_pro = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+dim_pro-1)
+ else
+ dim_pro = countb(b_pro)
+ s = unpackb(b_pro,dim_pro)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ arg1 = s_mat_r(m2,m4)
+ arg2 = s_mat_r(m1,m3)
+ arg3 = s_mat_r(m1,m4)
+ arg4 = s_mat_r(m1,m2)
+ arg5 = s_mat_r(m2,m3)
+ arg6 = s_mat_r(m3,m4)
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ argz(3) = equal_real(arg3,zero)
+ argz(4) = equal_real(arg4,zero)
+ argz(5) = equal_real(arg5,zero)
+ argz(6) = equal_real(arg6,zero)
+ !
+ ! only case with no internal masses:
+ !
+ if ( all(argz) ) then
+ !
+ temp = f4p1m("n+2",arg1,arg2,0._ki,par1,par2,par3,par4)
+ !
+ ! one external mass
+ !
+ else if ( argz(4) .and. argz(5) .and. argz(6) ) then
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(5) .and. argz(6) ) then
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg4,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(4) .and. argz(6) ) then
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg5,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(4) .and. argz(5) ) then
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg6,par1,par2,par3,par4)
+ !
+ ! two adjacent external masses
+ !
+ else if ( argz(3) .and. argz(6) ) then
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg4,arg5,par1,par2,par3,par4)
+ !
+ else if ( argz(4) .and. argz(5) ) then
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(5) .and. argz(6) ) then
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(4) ) then
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg5,arg6,par1,par2,par3,par4)
+ !
+ ! two opposite external masses
+ !
+ else if ( argz(4) .and. argz(6) ) then
+ !
+ temp = f4p2m_opp("n+2",arg2,arg1,arg5,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(5) ) then
+ !
+ temp = f4p2m_opp("n+2",arg1,arg2,arg4,arg6,par1,par2,par3,par4)
+ !
+ ! three external masses
+ !
+ else if ( argz(3) ) then
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ else if ( argz(4) ) then
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg5,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(5) ) then
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg6,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( argz(6) ) then
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg3,arg4,arg5,par1,par2,par3,par4)
+ !
+ ! four external masses
+ !
+ else
+ !
+ temp = f4p4m("n+2",arg1,arg2,arg3,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ end if ! end massless case
+ !
+ temp_cmplx(1) = temp(1) + i_ * temp(2)
+ temp_cmplx(2) = temp(3) + i_ * temp(4)
+ !
+ !
+ f4p_np2_sca_massless = temp_cmplx(2)
+ !
+ !
+ end function f4p_np2_sca_massless
+ !
+ !
+ function f4p_np2_sca_massive(s_mat_p,b_pro,b_pin)
+ !
+ type(s_matrix_poly), intent (in) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ complex(ki) :: f4p_np2_sca_massive
+ !
+ integer :: j,ib,b_pro_mj
+ complex(ki), dimension(3) :: trisum,temp0
+ complex(ki) :: bsum
+ !
+ ! there is no case with zero internal masses!
+ ! this function is only called if there is at least one internal mass
+ !
+ !
+ ! ********************************************************
+ ! ********** massive case (internal masses): see f4p **************
+ !
+ trisum(:) = czero
+ bsum = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ trisum = trisum + b(j,b_pin)*f3p(s_mat_p,b_pro_mj)
+ bsum = bsum + b(j,b_pin)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ temp0 = ( f4p(s_mat_p,b_pro) - trisum )/bsum
+ !
+ f4p_np2_sca_massive = temp0(3)
+ !
+ end function f4p_np2_sca_massive
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np4
+ ! NAME
+ !
+ ! Function f4p_np4
+ !
+ ! USAGE
+ !
+ ! complex_dim2 = f4p_np4(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes recursively the generic four point function in n+4 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a type s_matrix_poly object, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * b_pin -- an integer which represents the set of the pinched propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2.
+ !
+ ! NOTES
+ !
+ ! This function has been changed! It only accepts a s_matrix_poly type object as input.
+ ! It returns a complex instead of a real array!
+ !
+ !*****
+ !
+ ! this function returns a complex array now!
+ !
+ recursive function f4p_np4(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4,test_numeric) result(res_4p_np4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ integer, intent (in), optional :: parf1,parf2,parf3,parf4
+ logical, intent (in), optional :: test_numeric
+ complex(ki), dimension(2) :: res_4p_np4
+ !
+ integer :: par1,par2,par3,par4
+ integer :: parn1,parn2,parn3,parn4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ integer :: taille
+ integer :: nb_par
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ real(ki) :: m1s,m2s,m3s,m4s,s1,s2,s3,s4
+ complex(ki) :: temp0
+ complex(ki), dimension(2) :: temp1,temp2,temp3
+ integer :: j,m1,m2,m3,m4
+ integer, dimension(4) :: s
+ integer, dimension(2) :: set
+ integer :: ib,b_pro_mj,dim_pin
+ real(ki) :: norma
+ logical :: not_numeric
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+
+ sortie : if ( (par1 == -1) .or. (par2 == -1).or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ res_4p_np4(:) = czero
+ !
+ else sortie
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini = (/par1,par2,par3,par4/)
+ !
+ nb_par = count(mask=z_param_ini/=0)
+ !
+ if (b_pro < 256) then
+ s = bit_sets(b_pro*8:b_pro*8+3)
+ else
+ s = unpackb(b_pro,4)
+ end if
+ !
+ ! test for switch to numerical evaluation needs to be performed only once
+ !
+ switch_to_numerics: if (present(test_numeric) ) then
+ !
+ not_numeric = test_numeric !this should always be true...
+ !
+ else switch_to_numerics
+ !
+ ! make sure numerical branch is never entered for cases where it is not implemented
+
+ ! NB: This order of the statements
+ ! reduces the number of comparisons required.
+ !
+ ! numerical branch not implemented for complex masses yet:
+ if (iand(s_mat_p%b_cmplx, b_pro) .ne. 0 ) then
+ !
+ not_numeric = .true.
+ !
+ else if (iand(s_mat_p%b_zero, b_pro) .ne. b_pro ) then !case internal masses
+ !
+ not_numeric = .true.
+ !
+ else
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ arg1 = s_mat_p%pt_real(m2,m4)
+ arg2 = s_mat_p%pt_real(m1,m3)
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ m1s = -s_mat_p%pt_real(m1,m1)/2._ki
+ m2s = -s_mat_p%pt_real(m2,m2)/2._ki
+ m3s = -s_mat_p%pt_real(m3,m3)/2._ki
+ m4s = -s_mat_p%pt_real(m4,m4)/2._ki
+ !
+ ! end if
+ !
+ s1=arg3+m1s+m4s
+ s2=arg4+m1s+m2s
+ s3=arg5+m2s+m3s
+ s4=arg6+m3s+m4s
+ !
+ ! else
+ ! case 4 non-light-like legs
+ if ( .not.(equal_real(s1,zero)) .and. &
+ & .not.(equal_real(s2,zero)) .and. &
+ & .not.(equal_real(s3,zero)) .and. &
+ & .not.(equal_real(s4,zero))) then
+ not_numeric = .true.
+ else
+ not_numeric=.not. ( abs(norma_sumb(b_pin)) < coupure(s_mat_p,s) )
+ end if
+ !
+ end if
+ !
+ end if switch_to_numerics
+ !
+ if (nb_par == 0) then
+ !
+ norma = 1._ki/6._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = 1._ki/24._ki
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ taille = dim_s - size(s)
+ !
+ select case(taille)
+ !
+ case(0)
+ !
+ set_tot = 0
+ !
+ case(1)
+ !
+ if (b_pin < 256) then
+ set(1:1) = bit_sets(b_pin*8:b_pin*8)
+ else
+ set(1:1) = unpackb(b_pin,1)
+ end if
+ set_tot(1) = 0
+ set_tot(2) = set(1)
+ !
+ case(2)
+ !
+ if (b_pin < 256) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set = unpackb(b_pin,2)
+ end if
+ !
+ set_tot(1:2) = set(1:2)
+ !
+ end select
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ cache : if ( computed_f4p_np4(set_tot(1),set_tot(2),par4) ) then
+ !
+ res_4p_np4 = results_f4p_np4(set_tot(1),set_tot(2),par4,:)
+ !
+ else cache
+ !
+ ! before: numeric : if ( not_numeric .and. &
+ ! & (abs(norma_sumb(b_pin)) >= coupure(s_mat_p,s) )) then
+ numeric : if ( not_numeric ) then
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ if (nb_par == 1) then
+ !
+ temp0 = f4p_np2(s_mat_p,b_pro,b_pin, parf4 = par4, test_numeric = not_numeric)/3._ki
+ temp1 = b(par4,b_pin)*f4p_np4(s_mat_p,b_pro,b_pin, test_numeric = not_numeric)
+ temp2(:) = czero
+ temp3(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp2 = temp2 + inv_s(j,par4,b_pin)*f3p_np2(s_mat_p,b_pro_mj)/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j,b_pin)*f3p_np2(s_mat_p,b_pro_mj,par4)/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb(b_pin))
+ res_4p_np4(2) = ( temp1(2)+temp1(1)/6._ki+temp2(2)+temp2(1)/2._ki &
+ +temp3(2)+temp3(1)/2._ki+temp0 )/(2._ki*sumb(b_pin))
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ else if (nb_par == 0) then
+ !
+ temp0 = f4p_np2(s_mat_p,b_pro,b_pin,test_numeric = not_numeric)
+ !
+ temp1(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp1 = temp1 + b(j,b_pin)*f3p_np2(s_mat_p,b_pro_mj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np4(1) = ( -temp1(1) )/(3._ki*sumb(b_pin))
+ res_4p_np4(2) = (temp0 - temp1(2) - 2._ki/3._ki*temp1(1) )/(3._ki*sumb(b_pin) )
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb((/par1,par2,par3,par4/)),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ else numeric
+ !
+ where (z_param_out /= 0)
+ !
+ z_param_out = locateb(z_param_out,b_pro)
+ !
+ elsewhere
+ !
+ z_param_out = 0
+ !
+ end where
+ !
+ parn1 = z_param_out(1)
+ parn2 = z_param_out(2)
+ parn3 = z_param_out(3)
+ parn4 = z_param_out(4)
+ !
+ res_4p_np4 = f4p_np4_numeric(s_mat_p,b_pro,parn1,parn2,parn3,parn4)
+ !
+ end if numeric
+ !
+ computed_f4p_np4(set_tot(1),set_tot(2),par4) = .true.
+ results_f4p_np4(set_tot(1),set_tot(2),par4,:) = res_4p_np4
+ !
+ end if cache
+ !
+ end if sortie
+ !
+ end function f4p_np4
+ !
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np2_numeric
+ ! NAME
+ !
+ ! Function f4p_np2_numeric
+ !
+ ! USAGE
+ !
+ ! complex = f4p_np2_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes numerically the generic four point function in n+2 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * par1 -- an integer, the label of the one Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the third Feynman parameter
+ ! * par4 -- an integer, the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex number!
+ !
+ ! NOTES
+ !
+ ! This function has been changed! It only accepts a s_matrix_poly type object!
+ ! It returns a complex number!
+ !
+ !*****
+ !
+ ! returns a complex number now!
+ !
+ function f4p_np2_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in) :: parf1,parf2,parf3,parf4
+ complex(ki) :: f4p_np2_numeric
+ !
+ integer :: par1,par2,par3,par4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ real(ki), dimension(4) :: temp
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ integer, dimension(4) :: s
+ integer :: dim_pro
+ logical, dimension(3:6) :: argz
+ !
+ sortie : if ( (parf1 == -1) .or. (parf2 == -1).or. (parf3 == -1) &
+ .or. (parf4 == -1) ) then
+ !
+ f4p_np2_numeric = czero
+ !
+ else sortie
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini(1) = parf1
+ z_param_ini(2) = parf2
+ z_param_ini(3) = parf3
+ z_param_ini(4) = parf4
+ !
+ if (b_pro < 256) then
+ dim_pro = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+dim_pro)
+ else
+ dim_pro = countb(b_pro)
+ s = unpackb(b_pro,dim_pro)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! arg1 = s, arg2 = t et les autres arguments sont les masses externes
+ !
+ ! only massless case is considered here, relevant piece of s_matrix is necessarily real
+ !
+ arg1 = s_mat_p%pt_real(m2,m4)
+ arg2 = s_mat_p%pt_real(m1,m3)
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ argz(3) = equal_real(arg3,zero)
+ argz(4) = equal_real(arg4,zero)
+ argz(5) = equal_real(arg5,zero)
+ argz(6) = equal_real(arg6,zero)
+ !
+ ! no external mass
+ !
+ if ( (argz(3)) .and. (argz(4)) .and. (argz(5)) &
+ .and. (argz(6)) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg1,arg2,0._ki,par1,par2,par3,par4)
+ !
+ ! one external mass
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg6,par1,par2,par3,par4)
+ !
+ ! two adjacent external masses
+ !
+ else if ( ( (argz(3)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg4,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg5,arg6,par1,par2,par3,par4)
+ !
+ ! two opposite external masses
+ !
+ else if ( ( (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_opp("n+2",arg2,arg1,arg5,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ temp = f4p2m_opp("n+2",arg1,arg2,arg4,arg6,par1,par2,par3,par4)
+ !
+ ! three external masses
+ !
+ else if (argz(3)) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ else if (argz(4)) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg5,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if (argz(5)) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg6,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if (argz(6)) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg3,arg4,arg5,par1,par2,par3,par4)
+ !
+ ! four external masses
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_np2_numeric:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'four external mass four point integral not yet implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ f4p_np2_numeric = temp(3) + i_ * temp(4)
+ !
+ end if sortie
+ !
+ end function f4p_np2_numeric
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np4_numeric
+ ! NAME
+ !
+ ! Function f4p_np4_numeric
+ !
+ ! USAGE
+ !
+ ! complex_dim2 = f4p_np4_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes numerically the generic four point function in n+4 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2.
+ !
+ ! NOTES
+ !
+ ! This function has been changed! It only accepts a s_matrix_poly type object!
+ ! It returns a complex array!
+ !
+ !
+ !
+ !*****
+ !
+ function f4p_np4_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2,parf3,parf4
+ complex(ki), dimension(2) :: f4p_np4_numeric
+ !
+ real(ki), dimension(4) :: temp
+ integer :: par1,par2,par3,par4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ integer, dimension(4) :: s
+ integer :: pro_dim
+ logical, dimension(3:6) :: argz
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+ sortie : if ( (par1 == -1) .or. (par2 == -1).or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ f4p_np4_numeric(:) = czero
+ !
+ else sortie
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini(1) = par1
+ z_param_ini(2) = par2
+ z_param_ini(3) = par3
+ z_param_ini(4) = par4
+ !
+ if (b_pro < 256) then
+ pro_dim = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+pro_dim)
+ else
+ pro_dim = countb(b_pro)
+ s = unpackb(b_pro,pro_dim)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! arg1 = s, arg2 = t et les autres arguments sont les masses externes
+ !
+ ! only massless case is considered here, relevant piece of s_matrix is necessarily real
+ !
+ arg1 = s_mat_p%pt_real(m2,m4)
+ arg2 = s_mat_p%pt_real(m1,m3)
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ argz(3) = equal_real(arg3,zero)
+ argz(4) = equal_real(arg4,zero)
+ argz(5) = equal_real(arg5,zero)
+ argz(6) = equal_real(arg6,zero)
+ !
+ ! no external mass
+ !
+ if ( (argz(3)) .and. (argz(4)) .and. (argz(5)) .and. (argz(6)) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg1,arg2,0._ki,par1,par2,par3,par4)
+ !
+ ! one external mass
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg2,arg1,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg1,arg2,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg2,arg1,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg1,arg2,arg6,par1,par2,par3,par4)
+ !
+ ! two adjacent external masses
+ !
+ else if ( ( (argz(3)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg2,arg1,arg4,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg2,arg1,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg1,arg2,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg1,arg2,arg5,arg6,par1,par2,par3,par4)
+ !
+ ! two opposite external masses
+ !
+ else if ( ( (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_opp("n+4",arg2,arg1,arg5,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_opp("n+4",arg1,arg2,arg4,arg6,par1,par2,par3,par4)
+ !
+ ! three external masses
+ !
+ else if (argz(3)) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg1,arg2,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ else if (argz(4)) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg2,arg1,arg5,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if (argz(5)) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg1,arg2,arg6,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if (argz(6)) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg2,arg1,arg3,arg4,arg5,par1,par2,par3,par4)
+ !
+ ! four external masses
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_np4_numeric:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'four external mass four point integral not yet implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ f4p_np4_numeric(1) = temp(1) + i_ * temp(2)
+ f4p_np4_numeric(2) = temp(3) + i_ * temp(4)
+ !
+ end if sortie
+ !
+ end function f4p_np4_numeric
+ !
+ !****if* src/integrals/four_point/generic_function_4p/coupure
+ ! NAME
+ !
+ ! Function coupure
+ !
+ ! USAGE
+ !
+ ! real = coupure(s_mat_p,s)
+ !
+ ! DESCRIPTION
+ !
+ ! Depending on the set s and the S matrix (s_mat), this function returns
+ ! the value of the cut to switch from analytic to numeric
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly object. The S matrix.
+ ! * s -- an integer array of rank 1 and shape 4, the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function coupure(s_mat_p,s)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in), dimension(4) :: s
+ real(ki) :: coupure
+ !
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg3,arg4,arg5,arg6
+ real(ki), dimension(4) :: table_arg
+ integer :: count_mass
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! arg1 = s, arg2 = t et les autres arguments sont les masses externes
+ !
+ ! function coupure only defined for massless matrices so far. if masses are involved, the args do not
+ ! reflect the invariant masses of the external legs (or s and t)
+ !
+ !
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ !
+ table_arg = (/arg3,arg4,arg5,arg6/)
+ count_mass = count(mask=table_arg/=zero)
+ !
+ select case(count_mass)
+ !
+ case(0,1)
+ !
+ coupure = coupure_4p1m
+ !
+ case(2)
+ !
+ if ( (equal_real(arg3*arg5,0._ki)) .and. (equal_real(arg4*arg6,0._ki)) ) then
+ !
+ coupure = coupure_4p2m_adj
+ !
+ else
+ !
+ coupure = coupure_4p2m_opp
+ !
+ end if
+ !
+ case(3)
+ !
+ coupure = coupure_4p3m
+ !
+ case(4)
+ !
+ coupure = coupure_4p4m
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function coupure:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the case required for four point integral not yet &
+ &implemented'
+ call catch_exception(0)
+ !
+ end select
+ !
+ end function coupure
+ !
+ ! *********************************************************************
+ ! added for massive case
+ ! ***********************************************************************
+ !****f* src/integrals/four_point/generic_function_4p/f4p
+ ! NAME
+ !
+ ! Function f4p
+ !
+ ! USAGE
+ !
+ ! cmplx_dim3 = f4p(s_mat,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic four point function in n dimensions
+ ! only scalar case is implemented!!!
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * b_pin -- an integer which represents the set of the pinched propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 3
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f4p(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: b_pin, parf1,parf2,parf3,parf4
+ complex(ki), dimension(3) :: f4p
+ real(ki), dimension(6) :: f4p_real
+ !
+ f4p_real = f4p_ra(s_mat_p,b_pro,b_pin=b_pin,parf1=parf1,parf2=parf2,parf3=parf3,parf4=parf4)
+ !
+ f4p(1) = f4p_real(1) + i_ * f4p_real(2)
+ f4p(2) = f4p_real(3) + i_ * f4p_real(4)
+ f4p(3) = f4p_real(5) + i_ * f4p_real(6)
+ !
+ end function f4p
+ !
+ function f4p_ra(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4) result(res_4p)
+ !
+ type(s_matrix_poly), intent (in) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: b_pin, parf1,parf2,parf3,parf4
+ real(ki), dimension(6) :: res_4p
+ !
+ integer :: par1,par2,par3,par4
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+ sortie : if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ res_4p(:) = 0._ki
+ !
+ else if ( (par1+par2+par3+par4) /= 0 ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In f4p_ra: called with non-zero Feynman parameters!'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The 4-dim box is only implemented for the scalar case!'
+ !
+ call catch_exception(0)
+ !
+ else sortie
+ !
+ res_4p = f4p_sca(s_mat_p,b_pro)
+ !
+ end if sortie
+ !
+ !
+ end function f4p_ra
+ !
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_sca
+ ! NAME
+ !
+ ! Function f4p_sca
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f4p_sca(s_mat_p,b_pro)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic four point function in n dimensions,
+ ! without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a s_matrix_poly type, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 6
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f4p_sca_p(s_mat_p,b_pro)
+ !
+ type(s_matrix_poly), intent(in) :: s_mat_p
+ integer, intent (in) :: b_pro
+ !
+ real(ki), dimension(6) :: f4p_sca_p
+ !
+ if (iand(s_mat_p%b_cmplx, b_pro) .eq. 0 ) then
+ !
+ f4p_sca_p = f4p_sca_r(s_mat_p%pt_real, b_pro)
+ !
+ else
+ !
+ f4p_sca_p = f4p_sca_c(s_mat_p%pt_cmplx, b_pro)
+ !
+ end if
+ !
+ end function f4p_sca_p
+ !
+ function f4p_sca_r(s_mat_r,b_pro)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro
+ real(ki), dimension(6) :: f4p_sca_r,temp
+ integer :: par1,par2,par3,par4
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ real(ki) :: m1s,m2s,m3s,m4s,s12,s23,s1,s2,s3,s4
+ complex(ki_avh) :: D0res
+ complex(ki_avh), dimension(0:2) :: D0olo
+ integer, dimension(4) :: s
+ integer :: pro_dim
+ logical, dimension(4) :: msz, ssz
+ logical, dimension(4,4) :: meqs
+ !
+ ! mu2_scale_par is defined globally:
+ ! default mu2_scale_par=1 is set in paramtere.f90,
+ ! unless defined otherwise by user in his main program
+ !
+ if (b_pro < 256) then
+ pro_dim = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+pro_dim-1)
+ else
+ pro_dim = countb(b_pro)
+ s = unpackb(b_pro,pro_dim)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ !
+ arg1 = s_mat_r(m2,m4)
+ arg2 = s_mat_r(m1,m3)
+ arg3 = s_mat_r(m1,m4)
+ arg4 = s_mat_r(m1,m2)
+ arg5 = s_mat_r(m2,m3)
+ arg6 = s_mat_r(m3,m4)
+ !
+ m1s = -s_mat_r(m1,m1)/2._ki
+ m2s = -s_mat_r(m2,m2)/2._ki
+ m3s = -s_mat_r(m3,m3)/2._ki
+ m4s = -s_mat_r(m4,m4)/2._ki
+ !
+ msz(1) = equal_real(m1s,zero)
+ msz(2) = equal_real(m2s,zero)
+ msz(3) = equal_real(m3s,zero)
+ msz(4) = equal_real(m4s,zero)
+ !
+ s1=arg3+m1s+m4s
+ s2=arg4+m1s+m2s
+ s3=arg5+m2s+m3s
+ s4=arg6+m3s+m4s
+ !
+ call cut_s(s1,m1s,m4s)
+ call cut_s(s2,m1s,m2s)
+ call cut_s(s3,m2s,m3s)
+ call cut_s(s4,m3s,m4s)
+ !
+ ssz(1) = equal_real(s1,zero)
+ ssz(2) = equal_real(s2,zero)
+ ssz(3) = equal_real(s3,zero)
+ ssz(4) = equal_real(s4,zero)
+ !
+ meqs(1,1) = equal_real(m1s,s1)
+ meqs(1,2) = equal_real(m1s,s2)
+ meqs(1,3) = equal_real(m1s,s3)
+ meqs(1,4) = equal_real(m1s,s4)
+ meqs(2,1) = equal_real(m2s,s1)
+ meqs(2,2) = equal_real(m2s,s2)
+ meqs(2,3) = equal_real(m2s,s3)
+ meqs(2,4) = equal_real(m2s,s4)
+ meqs(3,1) = equal_real(m3s,s1)
+ meqs(3,2) = equal_real(m3s,s2)
+ meqs(3,3) = equal_real(m3s,s3)
+ meqs(3,4) = equal_real(m3s,s4)
+ meqs(4,1) = equal_real(m4s,s1)
+ meqs(4,2) = equal_real(m4s,s2)
+ meqs(4,3) = equal_real(m4s,s3)
+ meqs(4,4) = equal_real(m4s,s4)
+ !
+ !
+ s12 = arg1+m4s+m2s
+ s23 = arg2+m1s+m3s
+ !
+ call cut_s(s12,m4s,m2s)
+ call cut_s(s23,m1s,m3s)
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ temp(:) = 0._ki
+ !
+ ! case no internal masses:
+ !
+ if ( (msz(1)) .and. (msz(2)) .and. (msz(3)) &
+ .and. (msz(4)) ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'use dim=n+2 for boxes with no internal masses !'
+ call catch_exception(0)
+ !
+ else ! at least one internal mass nonzero
+ !
+ ! ********************************************************
+ ! ********** massive case (internal masses) **************
+ !
+ ! case two massive on-shell legs, three internal masses, all masses equal
+ if ( .not.(msz(1)) .and..not.(msz(2)) .and.(msz(3)) &
+ & .and..not.(msz(4)) .and. (equal_real(m1s,m2s)) .and. (equal_real(m2s,m4s)) &
+ & .and.(meqs(2,3)) .and.(meqs(4,4)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massless internal line
+ !
+ else if ( .not.(msz(2)) .and..not.(msz(3)) .and.(msz(4)) &
+ & .and..not.(msz(1)) .and. (equal_real(m2s,m3s)) .and. (equal_real(m3s,m1s)) &
+ & .and.(meqs(3,4)) .and.(meqs(1,1)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ !
+ else if ( .not.(msz(3)) .and..not.(msz(4)) .and.(msz(1)) &
+ & .and..not.(msz(2)) .and. (equal_real(m3s,m4s)) .and. (equal_real(m4s,m2s)) &
+ & .and.(meqs(4,1)) .and.(meqs(2,2)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and..not.(msz(1)) .and.(msz(2)) &
+ & .and..not.(msz(3)) .and. (equal_real(m4s,m1s)) .and. (equal_real(m1s,m3s)) &
+ & .and.(meqs(1,2)) .and.(meqs(3,3)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 6 *****************
+ ! QCDL m4 is golem m3
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) &
+ & .and.(equal_real(s3,s4)) .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql6("n",s1,s2,m3s,m3s,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) &
+ & .and.(equal_real(s4,s1)) .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql6("n",s2,s3,m4s,m4s,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) &
+ & .and.(equal_real(s1,s2)) .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql6("n",s3,s4,m1s,m1s,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) &
+ & .and.(equal_real(s2,s3)) .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql6("n",s4,s1,m2s,m2s,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 7 *****************
+ ! QCDL m_i is golem m_{i-1}
+ !
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) &
+ & .and. (meqs(3,3)) ) then
+ !
+ temp = f4p_ql7("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) &
+ & .and. (meqs(4,4)) ) then
+ !
+ temp = f4p_ql7("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) &
+ & .and. (meqs(1,1)) ) then
+ !
+ temp = f4p_ql7("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) &
+ & .and.(meqs(2,2)) ) then
+ !
+ temp = f4p_ql7("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 7b *****************
+ !~ p4^2=m3^2 instead of p3^2=m3^2 (in golem labelling) is also possible!
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) &
+ & .and. (meqs(3,4)) ) then
+ !
+ temp = f4p_ql7("n",s1,s2,s4,s3,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) &
+ & .and. (meqs(4,1)) ) then
+ !
+ temp = f4p_ql7("n",s2,s3,s1,s4,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) &
+ & .and. (meqs(1,2)) ) then
+ !
+ temp = f4p_ql7("n",s3,s4,s2,s1,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql7("n",s4,s1,s3,s2,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 8 *****************
+ !
+ ! limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) ) then
+ !
+ temp = f4p_ql8("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) ) then
+ !
+ temp = f4p_ql8("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) ) then
+ !
+ temp = f4p_ql8("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) ) then
+ !
+ temp = f4p_ql8("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 9 *****************
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(2)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql9("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(3)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql9("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(4)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql9("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(1)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql9("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 10 *****************
+ !
+ ! note that limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(2)) ) then
+ !
+ if (ssz(4).and.meqs(3,2).and.meqs(3,3)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(3)) ) then
+ !
+ if (ssz(1).and.meqs(4,3).and.meqs(4,4)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(4)) ) then
+ !
+ if (ssz(2).and.meqs(1,4).and.meqs(1,1)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(1)) ) then
+ !
+ if (ssz(3).and.meqs(2,1).and.meqs(2,2)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! *********** case QCDLoop box 10b *****************
+ !~ m2^2 nonzero instead of m3^2 (in golem labelling) is also possible!
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(4)) ) then
+ !
+ if (ssz(2).and.meqs(2,3).and.meqs(2,4)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line (permu1)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(1)) ) then
+ !
+ if (ssz(3).and.meqs(3,4).and.meqs(3,1)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line (permu2)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(2)) ) then
+ !
+ if (ssz(4).and.meqs(4,1).and.meqs(4,2)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line (permu3)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(3)) ) then
+ !
+ if (ssz(1).and.meqs(1,2).and.meqs(1,3)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! *********** case QCDLoop box 11 *****************
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(2,2)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql11("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(3,3)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql11("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(4,4)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql11("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(1,1)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql11("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 12 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql12.f90
+ ! limit p4^2 -> 0 is harmless, so do not restrict s4 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(2,2)) ) then
+ !
+ temp = f4p_ql12("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(3,3)) ) then
+ !
+ temp = f4p_ql12("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(4,4)) ) then
+ !
+ temp = f4p_ql12("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(1,1)) ) then
+ !
+ temp = f4p_ql12("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 12b *****************
+ !~ TAKE INTO ACCOUNT MIRROR SYMMETRY, corrected 16.8.2011
+ !~ mass ordering corrected 13.9.2011
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql12("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql12("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql12("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql12("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 13 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql13.f90
+ ! limits p4^2,p2^2 -> 0 are harmless, so do not restrict s4,s2 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) ) then
+ !
+ temp = f4p_ql13("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) ) then
+ !
+ temp = f4p_ql13("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) ) then
+ !
+ temp = f4p_ql13("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) ) then
+ !
+ temp = f4p_ql13("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 14 *****************
+ !
+ else if ( .not.(msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) .and.(meqs(1,2)) &
+ & .and.(meqs(3,3)) .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql14("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) .and.(meqs(2,3)) &
+ & .and.(meqs(4,4)) .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql14("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) .and.(meqs(3,4)) &
+ & .and.(meqs(1,1)) .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql14("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) .and.(meqs(4,1)) &
+ & .and.(meqs(2,2)) .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql14("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 15 *****************
+ ! limit s2,s3->0 is finite, so do not impose condition on s2,s3
+ !
+ else if ( .not.(msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql15("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql15("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql15("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql15("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 16 *****************
+ !
+ ! note that limits s2->0 and s3->0 are nonsingular, so do not require s2,s3 not=0
+ !
+ else if ( .not.(msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql16("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql16("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql16("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql16("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ ! changed to include LT option Jan2011
+ ! use avh_olo or LT
+!AC! if (withlt) then
+ !
+!AC! D0res = D0(real(s1,ki_lt),real(s2,ki_lt),real(s3,ki_lt),real(s4,ki_lt),&
+!AC! & !AC!real(s12,ki_lt),real(s23,ki_lt),real(m4s,ki_lt),real(m1s,ki_lt),&
+!AC! & real(m2s,ki_lt),real(m3s,ki_lt))
+ !
+!AC! else ! use avholo
+ !
+ if (.not. olo) then
+! call avh_olo_onshell(100._ki*epsilon(1._ki))
+ call olo_onshell(1.e-10_ki)
+ call olo_scale(sqrt(mu2_scale_par))
+ olo=.true.
+ end if
+ !
+ call olo_d0(D0olo,real(s1,ki_avh),real(s2,ki_avh),real(s3,ki_avh),real(s4,ki_avh),&
+ & real(s12,ki_avh),real(s23,ki_avh),real(m4s,ki_avh),real(m1s,ki_avh),&
+ & real(m2s,ki_avh),real(m3s,ki_avh))
+ D0res = D0olo(0)
+ !
+!AC! end if ! end if with lt
+ !
+ temp(5)= real(D0res)
+ temp(6)= aimag(D0res)
+ !
+ end if ! end distuinguish different cases of internal masses
+ !
+ end if ! end test if internal masses are present
+ !
+ f4p_sca_r = temp
+ !
+ !
+ end function f4p_sca_r
+ !
+ !
+ function f4p_sca_c(s_mat_c,b_pro)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in) :: b_pro
+ real(ki), dimension(6) :: f4p_sca_c,temp
+ integer :: par1,par2,par3,par4
+ integer :: m1,m2,m3,m4
+ complex(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ complex(ki) :: m1s, m2s, m3s, m4s
+ real(ki) :: s12,s23,s1,s2,s3,s4
+ complex(ki_avh) :: D0res
+ complex(ki_avh), dimension(0:2) :: D0olo
+ complex(ki_avh) :: cp1,cp2,cp3,cp4,cp12,cp23,cm1,cm2,cm3,cm4
+ integer, dimension(4) :: s
+ integer :: pro_dim
+ integer :: nb_cm
+ logical, dimension(4) :: msz, ssz, msc
+ logical, dimension(4,4) :: meqs
+ logical :: avh_olo_div
+ !
+ ! mu2_scale_par is defined globally:
+ ! default mu2_scale_par=1 is set in paramtere.f90,
+ ! unless defined otherwise by user in his main program
+ !
+ if (b_pro < 256) then
+ pro_dim = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+pro_dim-1)
+ else
+ pro_dim = countb(b_pro)
+ s = unpackb(b_pro,pro_dim)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ !
+ arg1 = s_mat_c(m2,m4)
+ arg2 = s_mat_c(m1,m3)
+ arg3 = s_mat_c(m1,m4)
+ arg4 = s_mat_c(m1,m2)
+ arg5 = s_mat_c(m2,m3)
+ arg6 = s_mat_c(m3,m4)
+ !
+ m1s = -s_mat_c(m1,m1)/2._ki
+ m2s = -s_mat_c(m2,m2)/2._ki
+ m3s = -s_mat_c(m3,m3)/2._ki
+ m4s = -s_mat_c(m4,m4)/2._ki
+ !
+ msc(1) = (.not. equal_real(aimag(m1s),zero) )
+ msc(2) = (.not. equal_real(aimag(m2s),zero) )
+ msc(3) = (.not. equal_real(aimag(m3s),zero) )
+ msc(4) = (.not. equal_real(aimag(m4s),zero) )
+ !
+ nb_cm = count(mask=msc .eqv. .true.)
+ !
+ where (msc)
+ !
+ msz = .false.
+ !
+ elsewhere
+ !
+ msz = equal_real(real( (/ m1s,m2s,m3s,m4s /) , ki), zero)
+ !
+ end where
+ !
+ s1 = real(arg3+m1s+m4s,ki)
+ s2 = real(arg4+m1s+m2s,ki)
+ s3 = real(arg5+m2s+m3s,ki)
+ s4 = real(arg6+m3s+m4s,ki)
+ !
+ call cut_s(s1,m1s,m4s)
+ call cut_s(s2,m1s,m2s)
+ call cut_s(s3,m2s,m3s)
+ call cut_s(s4,m3s,m4s)
+ !
+ ssz(1) = equal_real(s1,zero)
+ ssz(2) = equal_real(s2,zero)
+ ssz(3) = equal_real(s3,zero)
+ ssz(4) = equal_real(s4,zero)
+ !
+ !
+ s12 = arg1+m4s+m2s
+ s23 = arg2+m1s+m3s
+ !
+ call cut_s(s12,m4s,m2s)
+ call cut_s(s23,m1s,m3s)
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ temp(:) = 0._ki
+ !
+ meqs(:,:) = .false.
+ !
+ avh_olo_div = .false.
+ !
+ number_complex_masses: select case (nb_cm)
+ !
+ case (0)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In f4p_sca_c call with zero complex masses!'
+ call catch_exception(0)
+ !
+ case (1) ! cases with one complex mass! only the following cases need to be considered!
+ !
+ if ( msc(1) ) then
+ !
+ meqs(2,3) = equal_real(real(m2s,ki),s3)
+ meqs(4,4) = equal_real(real(m4s,ki),s4)
+ !
+ else if ( msc(2) ) then
+ !
+ meqs(1,1) = equal_real(real(m1s,ki),s1)
+ meqs(3,4) = equal_real(real(m3s,ki),s4)
+ !
+ else if (msc(3) ) then
+ !
+ meqs(2,2) = equal_real(real(m2s,ki),s2)
+ meqs(4,1) = equal_real(real(m4s,ki),s1)
+ !
+ else if ( msc(4) ) then
+ !
+ meqs(1,2) = equal_real(real(m1s,ki),s2)
+ meqs(3,3) = equal_real(real(m3s,ki),s3)
+ !
+ end if
+ !
+ ! ************************************************
+ ! The following Integrals are not implemented
+ ! for complex masses yet. A call to avh_olo is
+ ! made instead!
+ !
+ ! *********** case QCDLoop box 8 *****************
+ !
+ ! limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ if ( (msz(1)) .and. (msz(2)) .and. .not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ !
+ ! *********** case QCDLoop box 10 *****************
+ !
+ ! note that limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! *********** case QCDLoop box 10b *****************
+ !~ m2^2 nonzero instead of m3^2 (in golem labelling) is also possible!
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line (permu1)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line (permu2)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line (permu3)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ !
+ ! *********** case QCDLoop box 12 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql12.f90
+ ! limit p4^2 -> 0 is harmless, so do not restrict s4 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(2,2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(3,3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(4,4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(1,1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 13 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql13.f90
+ ! limits p4^2,p2^2 -> 0 are harmless, so do not restrict s4,s2 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ !
+ ! *********** case QCDLoop box 16 *****************
+ !
+ ! note that limits s2->0 and s3->0 are nonsingular, so do not require s2,s3 not=0
+ !
+ else if ( .not.(msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ end if
+ !
+ case (2) ! only one divergent box integral in this case!
+ ! ! no meqs required!
+ !
+ ! *********** case QCDLoop box 13 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql13.f90
+ ! limits p4^2,p2^2 -> 0 are harmless, so do not restrict s4,s2 to nonzero value
+ !
+ if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ end if
+ !
+ case default
+ !
+ avh_olo_div = .false.
+ !
+ end select number_complex_masses
+ !
+ ! changed to include LT option Jan2011
+ ! use avh_olo or LT in finite case
+!AC! if (withlt.and..not.avh_olo_div) then
+ !
+!AC! D0res = D0C(real(s1,ki_lt),real(s2,ki_lt),real(s3,ki_lt),real(s4,ki_lt),&
+!AC! & real(s12,ki_lt),real(s23,ki_lt),m4s,m1s,m2s,m3s)
+ !
+!AC! temp(5)= real(D0res,ki)
+!AC! temp(6)= aimag(D0res)
+ !
+!AC! else
+ ! use avh_olo
+ !
+ if (.not. olo) then
+! call avh_olo_onshell(100._ki*epsilon(1._ki))
+ call avh_olo_onshell(1.e-10_ki)
+ call avh_olo_mu_set(sqrt(mu2_scale_par))
+ olo=.true.
+ end if
+ !
+ cp1 = cmplx(s1,0._ki_avh,ki_avh)
+ cp2 = cmplx(s2,0._ki_avh,ki_avh)
+ cp3 = cmplx(s3,0._ki_avh,ki_avh)
+ cp4 = cmplx(s4,0._ki_avh,ki_avh)
+ cp12 = cmplx(s12,0._ki_avh,ki_avh)
+ cp23 = cmplx(s23,0._ki_avh,ki_avh)
+ !
+ cm1 = cmplx(m1s,kind=ki_avh)
+ cm2 = cmplx(m2s,kind=ki_avh)
+ cm3 = cmplx(m3s,kind=ki_avh)
+ cm4 = cmplx(m4s,kind=ki_avh)
+ !
+ call olo_d0(D0olo,cp1,cp2,cp3,cp4,cp12,cp23,cm4,cm1,cm2,cm3)
+ !
+ !
+ if (avh_olo_div) then
+ !
+ temp(1) = real(D0olo(2),ki)
+ temp(2) = aimag(D0olo(2) )
+ temp(3) = real(D0olo(1),ki)
+ temp(4) = aimag(D0olo(1) )
+ temp(5) = real(D0olo(0),ki)
+ temp(6) = aimag(D0olo(0) )
+ !
+ else
+ !
+ D0res = D0olo(0)
+ !
+ temp(5)= real(D0res,ki)
+ temp(6)= aimag(D0res)
+ !
+ !
+ !
+ end if ! ends if (avh_olo_div)
+!AC! end if ! When using LT, this ends if (withlt.and..not.avh_olo_div)
+
+ !
+ f4p_sca_c = real(temp,ki)
+ !
+ end function f4p_sca_c
+ !
+ !~********************************************************************
+ !
+ !
+end module generic_function_4p
+
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/Makefile.in (revision 119)
@@ -0,0 +1,618 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/integrals/four_point
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/generic_function_4p.f90.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = generic_function_4p.f90
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_integrals_four_point_la_LIBADD =
+am_libgolem95_integrals_four_point_la_OBJECTS = \
+ libgolem95_integrals_four_point_la-function_4p1m.lo \
+ libgolem95_integrals_four_point_la-function_4p2m_3mi_onshell.lo \
+ libgolem95_integrals_four_point_la-function_4p2m_adj.lo \
+ libgolem95_integrals_four_point_la-function_4p2m_opp.lo \
+ libgolem95_integrals_four_point_la-function_4p3m.lo \
+ libgolem95_integrals_four_point_la-function_4p4m.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql10.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql11.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql12.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql13.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql14.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql15.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql16.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql6.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql7.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql8.lo \
+ libgolem95_integrals_four_point_la-function_4p_ql9.lo \
+ libgolem95_integrals_four_point_la-generic_function_4p.lo
+libgolem95_integrals_four_point_la_OBJECTS = \
+ $(am_libgolem95_integrals_four_point_la_OBJECTS)
+libgolem95_integrals_four_point_la_LINK = $(LIBTOOL) --tag=FC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_integrals_four_point_la_SOURCES)
+DIST_SOURCES = $(libgolem95_integrals_four_point_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_integrals_four_point.la
+AM_FCFLAGS = \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical \
+ -I$(top_builddir)/src/integrals/one_point \
+ -I$(top_builddir)/src/integrals/two_point \
+ -I$(top_builddir)/src/integrals/three_point \
+ -I$(top_builddir)/avh_olo-2.2.1
+
+libgolem95_integrals_four_point_la_SOURCES = \
+ function_4p1m.f90 function_4p2m_3mi_onshell.f90 function_4p2m_adj.f90 \
+ function_4p2m_opp.f90 function_4p3m.f90 function_4p4m.f90 \
+ function_4p_ql10.f90 function_4p_ql11.f90 function_4p_ql12.f90 \
+ function_4p_ql13.f90 function_4p_ql14.f90 function_4p_ql15.f90 \
+ function_4p_ql16.f90 function_4p_ql6.f90 function_4p_ql7.f90 \
+ function_4p_ql8.f90 function_4p_ql9.f90 generic_function_4p.f90
+
+libgolem95_integrals_four_point_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = function_4p4m.mod function_4p_ql7.mod \
+ generic_function_4p.mod function_4p2m_adj.mod function_4p_ql14.mod \
+ function_4p_ql13.mod function_4p_ql15.mod function_4p_ql10.mod \
+ function_4p_ql9.mod function_4p_ql8.mod \
+ function_4p2m_3mi_onshell.mod function_4p_ql11.mod \
+ function_4p_ql12.mod function_4p2m_opp.mod function_4p3m.mod \
+ function_4p1m.mod function_4p_ql16.mod function_4p_ql6.mod
+
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/integrals/four_point/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/integrals/four_point/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+generic_function_4p.f90: $(top_builddir)/config.status $(srcdir)/generic_function_4p.f90.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_integrals_four_point.la: $(libgolem95_integrals_four_point_la_OBJECTS) $(libgolem95_integrals_four_point_la_DEPENDENCIES)
+ $(libgolem95_integrals_four_point_la_LINK) $(libgolem95_integrals_four_point_la_OBJECTS) $(libgolem95_integrals_four_point_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_integrals_four_point_la-function_4p1m.lo: function_4p1m.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p1m.lo $(FCFLAGS_f90) `test -f 'function_4p1m.f90' || echo '$(srcdir)/'`function_4p1m.f90
+
+libgolem95_integrals_four_point_la-function_4p2m_3mi_onshell.lo: function_4p2m_3mi_onshell.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p2m_3mi_onshell.lo $(FCFLAGS_f90) `test -f 'function_4p2m_3mi_onshell.f90' || echo '$(srcdir)/'`function_4p2m_3mi_onshell.f90
+
+libgolem95_integrals_four_point_la-function_4p2m_adj.lo: function_4p2m_adj.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p2m_adj.lo $(FCFLAGS_f90) `test -f 'function_4p2m_adj.f90' || echo '$(srcdir)/'`function_4p2m_adj.f90
+
+libgolem95_integrals_four_point_la-function_4p2m_opp.lo: function_4p2m_opp.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p2m_opp.lo $(FCFLAGS_f90) `test -f 'function_4p2m_opp.f90' || echo '$(srcdir)/'`function_4p2m_opp.f90
+
+libgolem95_integrals_four_point_la-function_4p3m.lo: function_4p3m.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p3m.lo $(FCFLAGS_f90) `test -f 'function_4p3m.f90' || echo '$(srcdir)/'`function_4p3m.f90
+
+libgolem95_integrals_four_point_la-function_4p4m.lo: function_4p4m.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p4m.lo $(FCFLAGS_f90) `test -f 'function_4p4m.f90' || echo '$(srcdir)/'`function_4p4m.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql10.lo: function_4p_ql10.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql10.lo $(FCFLAGS_f90) `test -f 'function_4p_ql10.f90' || echo '$(srcdir)/'`function_4p_ql10.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql11.lo: function_4p_ql11.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql11.lo $(FCFLAGS_f90) `test -f 'function_4p_ql11.f90' || echo '$(srcdir)/'`function_4p_ql11.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql12.lo: function_4p_ql12.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql12.lo $(FCFLAGS_f90) `test -f 'function_4p_ql12.f90' || echo '$(srcdir)/'`function_4p_ql12.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql13.lo: function_4p_ql13.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql13.lo $(FCFLAGS_f90) `test -f 'function_4p_ql13.f90' || echo '$(srcdir)/'`function_4p_ql13.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql14.lo: function_4p_ql14.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql14.lo $(FCFLAGS_f90) `test -f 'function_4p_ql14.f90' || echo '$(srcdir)/'`function_4p_ql14.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql15.lo: function_4p_ql15.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql15.lo $(FCFLAGS_f90) `test -f 'function_4p_ql15.f90' || echo '$(srcdir)/'`function_4p_ql15.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql16.lo: function_4p_ql16.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql16.lo $(FCFLAGS_f90) `test -f 'function_4p_ql16.f90' || echo '$(srcdir)/'`function_4p_ql16.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql6.lo: function_4p_ql6.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql6.lo $(FCFLAGS_f90) `test -f 'function_4p_ql6.f90' || echo '$(srcdir)/'`function_4p_ql6.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql7.lo: function_4p_ql7.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql7.lo $(FCFLAGS_f90) `test -f 'function_4p_ql7.f90' || echo '$(srcdir)/'`function_4p_ql7.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql8.lo: function_4p_ql8.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql8.lo $(FCFLAGS_f90) `test -f 'function_4p_ql8.f90' || echo '$(srcdir)/'`function_4p_ql8.f90
+
+libgolem95_integrals_four_point_la-function_4p_ql9.lo: function_4p_ql9.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-function_4p_ql9.lo $(FCFLAGS_f90) `test -f 'function_4p_ql9.f90' || echo '$(srcdir)/'`function_4p_ql9.f90
+
+libgolem95_integrals_four_point_la-generic_function_4p.lo: generic_function_4p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_four_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_four_point_la-generic_function_4p.lo $(FCFLAGS_f90) `test -f 'generic_function_4p.f90' || echo '$(srcdir)/'`generic_function_4p.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql10.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql10.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql10.f90 (revision 119)
@@ -0,0 +1,828 @@
+!
+!****h* src/integrals/four_point/function_4p_ql10
+! NAME
+!
+! Module function_4p_ql10
+!
+! USAGE
+!
+! use function_4p_ql10
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 10
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql10, f4p_ql10_c,f4p_ql10a, f4p_ql10a_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql10
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql10,f4p_ql10_c,f4p_ql10a,f4p_ql10a_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql10/f4p_ql10
+ ! NAME
+ !
+ ! Function f4p_ql10
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql10(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql10(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql10
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: coupure_4p_ql10
+ real(ki) :: norma
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql10 = 0._ki
+ coupure_4p_ql10 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql10) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql10 (in file f4p_ql10.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql10'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql10) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql10_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql10= a4p_ql10_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql10: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql10: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql10 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql10 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql10
+ !
+ !****f* src/integrals/four_point/function_4p_ql10/f4p_ql10_c
+ ! NAME
+ !
+ ! Function f4p_ql10_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql10_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql10
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql10
+ !
+ !*****
+ function f4p_ql10_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql10_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql10(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql10_c)
+ !
+ end function f4p_ql10_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql10/a4p_ql10_n
+ ! NAME
+ !
+ ! recursive function a4p_ql10_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql10_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql10_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql10_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql10_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,msq,deno
+ complex(ki) :: ds12,ds23,dm,dp2,dp3,dp4,di1,di2,di3,logp2mu,logs23mu,logp4mu,logsmu
+ complex(ki) :: eta1,eta2,eta3,etatt1,etatt2,etatt3
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ msq=m3s
+ deno=-s12*(msq-s23)-s2*(s4-msq)
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dm=msq-i_*del
+ dp2= s2 +i_*del
+ dp3= s3 +i_*del
+ dp4= s4 +i_*del
+ di1 = cdilog(1._ki-(dm-dp3)*(dm-ds23)/dm/(-dp2))
+ di2 = cdilog(1._ki-(dm-dp3)*(dm-dp4)/dm/(-ds12))
+ di3 = cdilog(1._ki-(-dp2)/(-ds12)*(dm-dp4)/(dm-ds23))
+ logp2mu=log(-dp2/mu2)
+ logsmu=log(-ds12/mu2)
+ logs23mu=log((msq-ds23)/mu2)
+ logp4mu=log((msq-dp4)/mu2)
+ eta1=log((dm-dp3)/dm*(dm-ds23)/(-dp2))-log((dm-dp3)/dm)-log((dm-ds23)/(-dp2))
+ eta2=log((dm-dp3)/dm*(dm-dp4)/(-ds12))-log((dm-dp3)/dm)-log((dm-dp4)/(-ds12))
+ eta3=log((dm-dp4)/(dm-ds23)*(-dp2)/(-ds12))-log((dm-dp4)/(dm-ds23))-log((-dp2)/(-ds12))
+ etatt1=eta1*log(1._ki-(dm-dp3)*(dm-ds23)/(-dp2*dm))
+ etatt2=eta2*log(1._ki-(dm-dp3)*(dm-dp4)/(-ds12*dm))
+ etatt3=eta3*log(1._ki-(dm-dp4)/(dm-ds23)*dp2/ds12)
+ !
+ res_4p_ql10_n(1) = 0._ki
+ res_4p_ql10_n(2) = 0._ki
+ res_4p_ql10_n(3) = real( -(log((-ds12)/mu2)-log((-dp2)/mu2)+log((msq-ds23)/mu2)-&
+ & log((msq-dp4)/mu2) )/deno )
+ res_4p_ql10_n(4) = aimag( -(log((-ds12)/mu2)-log((-dp2)/mu2)+log((msq-ds23)/mu2)-&
+ & log((msq-dp4)/mu2) )/deno )
+ res_4p_ql10_n(5) = real( (di1+etatt1-di2-etatt2+2*(di3+etatt3) + &
+ & 2*cdilog(1._ki-(dm-ds23)/(dm-dp4))-2*cdilog(1._ki-dp2/ds12) + &
+ & 2*(log(msq/(msq-ds23))+log(mu2/msq)/2._ki)* &
+ & (-logsmu-logs23mu+logp2mu+logp4mu) )/deno )
+ res_4p_ql10_n(6) = aimag( (di1+etatt1-di2-etatt2+2*(di3+etatt3) + &
+ & 2*cdilog(1._ki-(dm-ds23)/(dm-dp4))-2*cdilog(1._ki-dp2/ds12) + &
+ & 2*(log(msq/(msq-ds23))+log(mu2/msq)/2._ki)* &
+ & (-logsmu-logs23mu+logp2mu+logp4mu) )/deno )
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql10: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql10_n
+ !
+ !****f* src/integrals/four_point/function_4p_ql10a/f4p_ql10a
+ ! NAME
+ !
+ ! Function f4p_ql10a
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql10a(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql10a(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql10a
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: coupure_4p_ql10
+ real(ki) :: norma
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql10a = 0._ki
+ coupure_4p_ql10 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql10) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql10 (in file f4p_ql10.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql10'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql10) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql10a_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql10a= a4p_ql10a_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql10: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql10a: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql10 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql10 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql10a
+ !
+ !****f* src/integrals/four_point/function_4p_ql10/f4p_ql10a_c
+ ! NAME
+ !
+ ! Function f4p_ql10a_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql10a_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql10
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql10
+ !
+ !*****
+ function f4p_ql10a_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql10a_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql10(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql10a_c)
+ !
+ end function f4p_ql10a_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql10a/a4p_ql10a_n
+ ! NAME
+ !
+ ! recursive function a4p_ql10a_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql10a_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql10a_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql10a_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql10a_n
+ !
+ !integer, dimension(3) :: smj
+ !integer, dimension(3) :: sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,msq,deno
+ complex(ki) :: ds12,ds23,dm,dp2,dp3,dp4,di3,logs23mu,logm2mu,logsmu
+ !complex(ki) :: logp2mu
+ !complex(ki) :: eta3,etatt3,c1,c2,c3,c4,c5
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ !
+ msq=m3s
+ deno=s12*s23-s12*msq+msq**2
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dm=msq-i_*del
+ dp2= s2 +i_*del
+ dp3= s3 +i_*del
+ dp4= s4 +i_*del
+ di3 = cdilog(1._ki-msq**2/(ds12)/(dm-ds23))
+ logsmu=log(-ds12/mu2)
+ logs23mu=log((msq-ds23)/mu2)
+ logm2mu=log(msq/mu2)
+ !
+ res_4p_ql10a_n(1) = 0._ki
+ res_4p_ql10a_n(2) = 0._ki
+ res_4p_ql10a_n(3) = real( -(log((-ds12)/mu2)+log((ds23-msq)/mu2)-&
+ & 2*logm2mu )/deno )
+ res_4p_ql10a_n(4) = aimag( -(log((-ds12)/mu2)+log((ds23-msq)/mu2)-&
+ & 2*logm2mu )/deno )
+ res_4p_ql10a_n(5) = real( (2*di3 + &
+ & 2*cdilog(1._ki-(dm-ds23)/dm)-2*cdilog(1._ki-msq/ds12) + &
+ & 2*(log(msq/(msq-ds23))+log(mu2/msq)/2._ki)* &
+ & (-logsmu-log((ds23-msq)/mu2) +2*logm2mu) )/deno )
+ res_4p_ql10a_n(6) = aimag( (2*di3 + &
+ & 2*cdilog(1._ki-(dm-ds23)/dm)-2*cdilog(1._ki-msq/ds12) + &
+ & 2*(log(msq/(msq-ds23))+log(mu2/msq)/2._ki)* &
+ & (-logsmu-log((ds23-msq)/mu2)+2*logm2mu) )/deno )
+ !
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql10: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql10a_n
+ !
+ !
+ !
+end module function_4p_ql10
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p1m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p1m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p1m.f90 (revision 119)
@@ -0,0 +1,1717 @@
+!
+!****h* src/integrals/four_point/function_4p1m
+! NAME
+!
+! Module function_4p1m
+!
+! USAGE
+!
+! use function_4p1m
+!
+! DESCRIPTION
+!
+! This module computes the six-dimensional and eight dimensional
+! one mass four point function with or without Feynman parameters
+! in the numerator.
+!
+! OUTPUT
+!
+! This module exports three functions f4p1m,f4p1m_c and f1
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+!
+!*****
+module function_4p1m
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=3) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ !
+ public :: f4p1m,f1,f4p1m_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p1m/f4p1m
+ ! NAME
+ !
+ ! Function f4p1m
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p1m(dim,s24,s13,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the six dimensional/eight dimensional
+ ! one mass four point function with or without Feynman parameters
+ ! in the numerator, Note that it also computes the zero mass four
+ ! point function
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! one mass four point function, dim="n+4" eight dimensional
+ ! one mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! If the user wants to compute:
+ ! * a six dimensional one mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p1m("n+2",s24,s13,s34,0,0,0,0)
+ ! * a eight dimensional one mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p1m("n+4",s24,s13,s34,0,0,0,0)
+ ! * a six dimensional zero mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p1m("n+2",s24,s13,0._ki,0,0,0,0)
+ ! * a six dimensional one mass four point function
+ ! with the Feynman parameter z1 in the numerator:
+ ! real_dim_4 = f4p1m("n+2",s24,s13,s34,0,0,0,1)
+ ! * a six dimensional one mass four point function
+ ! with the Feynman parameters z1^2*z2 in the numerator:
+ ! real_dim_4 = f4p1m("n+2",s24,s13,s34,0,2,1,1)
+ !
+ !*****
+ function f4p1m(dim,s24,s13,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: f4p1m
+ !
+ integer :: nb_par
+ real(ki) :: lamb
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/0._ki,0._ki,s13,0._ki/)
+ s_mat(2,:) = (/0._ki,0._ki,0._ki,s24/)
+ s_mat(3,:) = (/s13,0._ki,0._ki,s34/)
+ s_mat(4,:) = (/0._ki,s24,s34,0._ki/)
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ !
+ plus_grand = maxval(array=abs(s_mat))
+ s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(2,4)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = 1._ki/s_mat(2,4)
+ !
+ sumb = 2._ki*(s_mat(1,3)+s_mat(2,4)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ !
+ invs(1,1) = 0._ki
+ invs(1,2) = -s_mat(3,4)/(s_mat(1,3)*s_mat(2,4))
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = 0._ki
+ invs(2,1) = -s_mat(3,4)/(s_mat(1,3)*s_mat(2,4))
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = 0._ki
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)+s_mat(2,4)-s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ !
+ norma = 1._ki/6._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = 1._ki/24._ki
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p1m = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p1m) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p1m (in file function_4p1m.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p1m'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p1m) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n+2") then
+ !
+ f4p1m(3:4)= a4p1m_np2(s_mat(2,4),s_mat(1,3),s_mat(3,4),&
+ &par1,par2,par3,par4)/plus_grand
+ !
+ else if (dim == "n+4") then
+ !
+ f4p1m = a4p1m_np4(s_mat(2,4),s_mat(1,3),s_mat(3,4),&
+ &par1,par2,par3,par4)
+ f4p1m(3) = f4p1m(3)-log(plus_grand)*norma
+ !
+ end if
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ par4_glob = par4
+ !
+ s13_glob = s_mat(1,3)
+ s24_glob = s_mat(2,4)
+ s34_glob = s_mat(3,4)
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s24+(1-z)*s34 = s34+x*(s24-s34)-i*eps*y*(s24-s34)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s24-s34) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = sign(1._ki,s34_glob-s24_glob)
+ !
+ origine_info_par = "f4p1m, dimension "//dim
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = (s_mat(1,3)*s_mat(2,4))
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ if (dim == "n+2") then
+ resto = resto/plus_grand
+ else if (dim == "n+4") then
+ f4p1m(1) = norma
+ f4p1m(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ end if
+ !
+ f4p1m(3) = real(resto,ki)
+ f4p1m(4) = aimag(resto)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p1m
+ !
+ !****f* src/integrals/four_point/function_4p1m/f4p1m_c
+ ! NAME
+ !
+ ! Function f4p1m_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_2 = f4p1m_c(dim,s24,s13,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing that the fucntion f4p1m
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! one mass four point function, dim="n+4" eight dimensional
+ ! one mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p1m
+ !
+ !*****
+ function f4p1m_c(dim,s24,s13,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(2) :: f4p1m_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f4p1m(dim,s24,s13,s34,par1,par2,par3,par4)
+ call to_complex(res4,f4p1m_c)
+ !
+ end function f4p1m_c
+ !
+ !****if* src/integrals/four_point/function_4p1m/a4p1m_np2
+ ! NAME
+ !
+ ! recursive function a4p1m_np2
+ !
+ ! USAGE
+ !
+ ! real_dim_2 = a4p1m_np2(s24,s13,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the six dimensional
+ ! one/zero mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two reals (type ki) corresponding to the
+ ! real and imaginary part of the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p1m_np2(s24,s13,s34,par1,par2,par3,par4) result(res_4p1m_np2)
+ !
+ real(ki), intent (in) :: s13,s24,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(2) :: res_4p1m_np2
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(6) :: truc1,truc2,truc3
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(6) :: temp1,temp2,temp3,temp4
+ real(ki), dimension(2) :: temp10,temp11,temp12,temp13,temp14,temp15
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ ctemp = -1._ki*f1(s13,s24,s34)/(s13+s24-s34)
+ res_4p1m_np2(1) = real(ctemp,ki)
+ res_4p1m_np2(2) = aimag(ctemp)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p1m_np2(s24,s13,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp0 = b(par4)*temp0
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3(j,1)) then
+ truc1 = resultat3(j,1,:)
+ else
+ truc1 = f3p_sc(s_mat,smj)
+ resultat3(j,1,:) = truc1
+ deja_calcule3(j,1) = .true.
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/2._ki
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 - b(j)*truc2/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p1m_np2(1) = (temp0(1) + temp1(5) + temp2(5))/sumb
+ res_4p1m_np2(2) = (temp0(2) + temp1(6) + temp2(6))/sumb
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule(par_plus(4))) then
+ !
+ temp10 = resultat(par_plus(4),:)
+ !
+ else
+ !
+ temp10 = a4p1m_np2(s24,s13,s34,0,0,0,par4)
+ resultat(par_plus(4),:) = temp10
+ deja_calcule(par_plus(4)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule(par_plus(3))) then
+ !
+ temp11 = resultat(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a4p1m_np2(s24,s13,s34,0,0,0,par3)
+ resultat(par_plus(3),:) = temp11
+ deja_calcule(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp12 = resultat(1,:)
+ temp0 = b(par3)*temp10+b(par4)*temp11 - invs(par3,par4)*temp12/2._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule3(j,par_plus(3))) then
+ !
+ truc1 = resultat3(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj))
+ resultat3(j,par_plus(3),:) = truc1
+ deja_calcule3(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs(j,par3)*truc2/4._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ if (deja_calcule33(j,par_plus(3),par_plus(4))) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ !
+ else
+ !
+ truc3 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))
+ resultat33(j,par_plus(3),par_plus(4),:) = truc3
+ deja_calcule33(j,par_plus(3),par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp3 = temp3 - b(j)*truc3/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p1m_np2(1) = (temp0(1) + temp1(5) + temp2(5) + temp3(5)) &
+ *2._ki/3._ki/sumb
+ res_4p1m_np2(2) = (temp0(2) + temp1(6) + temp2(6) + temp3(6)) &
+ *2._ki/3._ki/sumb
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp10 = a4p1m_np2(s24,s13,s34,0,0,par2,par3)
+ temp11 = a4p1m_np2(s24,s13,s34,0,0,par2,par4)
+ temp12 = a4p1m_np2(s24,s13,s34,0,0,par3,par4)
+ !
+ temp13 = resultat(par_plus(4),:)
+ temp14 = resultat(par_plus(3),:)
+ temp15 = resultat(par_plus(2),:)
+ !
+ temp0 = b(par4)*temp10+b(par3)*temp11+b(par2)*temp12 &
+ - ( invs(par2,par3)*temp13+invs(par2,par4)*temp14&
+ +invs(par3,par4)*temp15 )/3._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ temp4 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ truc1 = resultat33(j,par_plus(2),par_plus(3),:)
+ temp1 = temp1 + invs(j,par4)*truc1/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ truc2 = resultat33(j,par_plus(2),par_plus(4),:)
+ temp2 = temp2 + invs(j,par3)*truc2/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ temp3 = temp3 + invs(j,par2)*truc3/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j)*f3p_sc(s_mat,smj,locateb(par2,b_pro_mj), &
+ locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p1m_np2(1) = ( temp0(1) + temp1(5) + temp2(5) + temp3(5) &
+ + temp4(5) )/2._ki/sumb
+ res_4p1m_np2(2) = ( temp0(2) + temp1(6) + temp2(6) + temp3(6) &
+ + temp4(6) )/2._ki/sumb
+ !
+ end if
+ !
+ end function a4p1m_np2
+ !
+ !****if* src/integrals/four_point/function_4p1m/a4p1m_np4
+ ! NAME
+ !
+ ! recursive function a4p1m_np4
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p1m_np4(s24,s13,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the eight dimensional
+ ! one/zero mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p1m_np4(s24,s13,s34,par1,par2,par3,par4) result(res_4p1m_np4)
+ !
+ real(ki), intent (in) :: s13,s24,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: res_4p1m_np4
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p1m_np2(s24,s13,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3_np2(j,1)) then
+ !
+ truc1 = resultat3_np2(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_np2_sc(s_mat,smj)
+ resultat3_np2(j,1,:) = truc1
+ deja_calcule3_np2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p1m_np4(1) = (-temp1(1))/(3._ki*sumb)
+ res_4p1m_np4(2) = (-temp1(2))/(3._ki*sumb)
+ res_4p1m_np4(3) = (temp0(1)-temp1(3)-2._ki/3._ki*temp1(1))/(3._ki*sumb)
+ res_4p1m_np4(4) = (temp0(2)-temp1(4)-2._ki/3._ki*temp1(2))/(3._ki*sumb)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ temp0 = a4p1m_np2(s24,s13,s34,0,0,0,par4)/3._ki
+ temp1 = b(par4)*a4p1m_np4(s24,s13,s34,0,0,0,0)
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ truc1 = resultat3_np2(j,1,:)
+ temp2 = temp2 + invs(j,par4)*truc1/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j)*f3p_np2_sc(s_mat,smj,locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p1m_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb)
+ res_4p1m_np4(2) = ( temp1(2)+temp2(2)+temp3(2) )/(2._ki*sumb)
+ res_4p1m_np4(3) = ( temp1(3)+temp1(1)/6._ki+temp2(3)+temp2(1)/2._ki &
+ +temp3(3)+temp3(1)/2._ki+temp0(1) )/(2._ki*sumb)
+ res_4p1m_np4(4) = ( temp1(4)+temp1(2)/6._ki+temp2(4)+temp2(2)/2._ki &
+ +temp3(4)+temp3(2)/2._ki+temp0(2) )/(2._ki*sumb)
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a4p1m_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p1m_np4
+ !
+ !****f* src/integrals/four_point/function_4p1m/f1
+ ! NAME
+ !
+ ! function f1
+ !
+ ! USAGE
+ !
+ ! complex = f1(a,b,c)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the "finite part" of the scalar four dimensional one/zero mass
+ ! four point function. The expression has been taken in
+ ! Nucl. Phys. {\bf B615} (2001) , 385
+ !
+ !
+ ! INPUTS
+ !
+ ! * a -- a real (type ki), (p1+p2)^2
+ ! * b -- a real (type ki), (p2+p3)^2
+ ! * c -- a real (type ki), p4^2
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ ! Affected by the variable rat_or_tot_par (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ ! attention f1 modifiee pour tenir compte de 4-point 0-masse
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ function f1(a,b,c)
+ !
+ real(ki), intent(in) :: a,b,c
+ complex(ki) :: f1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f1 = zdilog(1._ki-c/a,sign(un,c-a)) &
+ + zdilog(1._ki-c/b,sign(un,c-b)) &
+ - zdilog(-a/b,sign(un,a-b)) &
+ - zdilog(-b/a,sign(un,b-a))
+ !
+ else ! if (rat_or_tot_par%rat_selected) then
+ !
+ f1 = 0._ki
+ !
+ end if
+ !
+ end function f1
+ !
+ !****if* src/integrals/four_point/function_4p1m/eval_numer_gi
+ ! NAME
+ !
+ ! function eval_numer_gi
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gi(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the integrand for the numerical computation in phase
+ ! space region where det(G) ~ 0
+ !
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), between 0 and 1
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki). It is called by
+ ! the routine adapt_gauss1 in the function f4p1m
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gi(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gi
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ z = x - eps_glob*i_*y
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ !
+ eval_numer_gi = fg(z,s24_glob,s13_glob,s34_glob,&
+ & par1_glob,par2_glob,par3_glob,par4_glob,&
+ & dim_glob)
+ eval_numer_gi = eval_numer_gi*jacob
+ !
+ end function eval_numer_gi
+ !
+ !****if* src/integrals/four_point/function_4p1m/fg
+ ! NAME
+ !
+ ! function fg
+ !
+ ! USAGE
+ !
+ ! complex = fg(z,s24,s13,s34,par1,par2,par3,par4,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the one dimensional integral representation of
+ ! the six/eight dimensional one/zero mass four point function
+ !
+ !
+ ! INPUTS
+ !
+ ! * z -- a real (type ki), integration variable
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! one mass four point function, dim="n+4" eight dimensional
+ ! one mass four point function
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki) corresponding to the
+ ! one dimensional integral representation of the six/eight dimensional
+ ! one/zero mass four point function
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fg(z,s24,s13,s34,par1,par2,par3,par4,dim)
+ !
+ complex(ki), intent (in) :: z
+ real(ki), intent (in) :: s24,s13,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ character (len=3) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(4) :: par
+ integer :: nb_par
+ complex(ki) :: c_var,e_var,f_var
+ !
+ par = (/par1,par2,par3,par4/)
+ nb_par = count(mask=par/=0)
+ !
+ c_var = (1._ki-z)*s13
+ !
+ f_var = z*s24+(1._ki-z)*(s34-s13)
+ !
+ e_var = z*s24+(1._ki-z)*s34
+ !
+ if (dim == "n+2") then
+ if (nb_par == 0) then
+ !
+ fg=-(log(e_var)-log(1._ki-z)-z_log(s13,1._ki))/f_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*(e_var*log(1._ki-z)+e_var*z_log(s13,1._ki)-e_var*log(e&
+ &_var)+f_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*z*(-log(e_var)+log(1._ki-z)+z_log(s13,1._ki))/f_var
+ !
+ case(3)
+ !
+ fg=-1._ki/2._ki*(-1._ki+z)*(-log(e_var)+log(1._ki-z)+z_log(s13,1._ki))&
+ &/f_var
+ !
+ case(4)
+ !
+ fg=-1._ki/2._ki*(-log(e_var)*c_var+c_var*log(1._ki-z)+c_var*z_log(s1&
+ &3,1._ki)+f_var)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*(-2._ki*e_var**2*log(1._ki-z)-2._ki*e_var**2*z_log(s13&
+ &,1._ki)+2._ki*e_var**2*log(e_var)+c_var*f_var-3._ki*e_var*f_var)/f&
+ &_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*z*(e_var*log(1._ki-z)+e_var*z_log(s13,1._ki)-e_var*log&
+ &(e_var)+f_var)/f_var**2
+ !
+ case(3)
+ !
+ fg=-1._ki/6._ki*(e_var*log(1._ki-z)+e_var*z_log(s13,1._ki)-e_var*log(&
+ &e_var)+f_var)*(-1._ki+z)/f_var**2
+ !
+ case(4)
+ !
+ fg=-1._ki/6._ki*(2._ki*c_var*e_var*log(1._ki-z)+2._ki*c_var*e_var*z_lo&
+ &g(s13,1._ki)-2._ki*e_var*log(e_var)*c_var+c_var*f_var+e_var*f_var&
+ &)/f_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*z**2*(-log(e_var)+log(1._ki-z)+z_log(s13,1._ki))/f_var
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki*z*(-1._ki+z)*(-log(e_var)+log(1._ki-z)+z_log(s13,1._ki&
+ &))/f_var
+ !
+ case(4)
+ !
+ fg=-1._ki/6._ki*z*(-log(e_var)*c_var+c_var*log(1._ki-z)+c_var*z_log(&
+ &s13,1._ki)+f_var)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=1._ki/3._ki*(-1._ki+z)**2*(-log(e_var)+log(1._ki-z)+z_log(s13,1._ki&
+ &))/f_var
+ !
+ case(4)
+ !
+ fg=1._ki/6._ki*(-log(e_var)*c_var+c_var*log(1._ki-z)+c_var*z_log(s13&
+ &,1._ki)+f_var)*(-1._ki+z)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/6._ki*(2._ki*log(e_var)*e_var*c_var**2*f_var+2._ki*log(e_va&
+ &r)*c_var**2*f_var**2+2._ki*log(e_var)*e_var**2*c_var**2+4._ki*log&
+ &(e_var)*c_var*f_var**3-2._ki*log(e_var)*f_var**2*e_var*c_var-2._k&
+ &i*log(e_var)*e_var**2*c_var*f_var+2._ki*log(e_var)*f_var**4-4._ki&
+ &*log(e_var)*f_var**3*e_var+2._ki*log(e_var)*f_var**2*e_var**2-2.&
+ &_ki*e_var**2*c_var**2*log(1._ki-z)-2._ki*e_var**2*c_var**2*z_log(s&
+ &13,1._ki)-3._ki*e_var**2*c_var*f_var+e_var**3*f_var)/e_var**2/f_v&
+ &ar**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=1._ki/24._ki*(6._ki*e_var**3*log(1._ki-z)+6._ki*e_var**3*z_log(s13,&
+ &1._ki)-6._ki*e_var**3*log(e_var)+2._ki*c_var**2*f_var-7._ki*c_var*e&
+ &_var*f_var+11._ki*e_var**2*f_var)/f_var**4
+ !
+ case(2)
+ !
+ fg=1._ki/24._ki*z*(2._ki*e_var**2*log(1._ki-z)+2._ki*e_var**2*z_log(s1&
+ &3,1._ki)-2._ki*e_var**2*log(e_var)-f_var*c_var+3._ki*e_var*f_var)/&
+ &f_var**3
+ !
+ case(3)
+ !
+ fg=-1._ki/24._ki*(2._ki*e_var**2*log(1._ki-z)+2._ki*e_var**2*z_log(s13&
+ &,1._ki)-2._ki*e_var**2*log(e_var)-f_var*c_var+3._ki*e_var*f_var)*(&
+ &-1._ki+z)/f_var**3
+ !
+ case(4)
+ !
+ fg=-1._ki/24._ki*(6._ki*c_var*e_var**2*log(1._ki-z)+6._ki*c_var*e_var*&
+ &*2*z_log(s13,1._ki)-6._ki*e_var**2*log(e_var)*c_var-c_var**2*f_va&
+ &r+5._ki*c_var*e_var*f_var+2._ki*e_var**2*f_var)/f_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z**2*(e_var*log(1._ki-z)+e_var*z_log(s13,1._ki)-e_var&
+ &*log(e_var)+f_var)/f_var**2
+ !
+ case(3)
+ !
+ fg=-1._ki/12._ki*z*(e_var*log(1._ki-z)+e_var*z_log(s13,1._ki)-e_var*l&
+ &og(e_var)+f_var)*(-1._ki+z)/f_var**2
+ !
+ case(4)
+ !
+ fg=-1._ki/24._ki*z*(2._ki*c_var*e_var*log(1._ki-z)+2._ki*c_var*e_var*z&
+ &_log(s13,1._ki)-2._ki*e_var*log(e_var)*c_var+f_var*c_var+e_var*f_&
+ &var)/f_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=1._ki/12._ki*(-1._ki+z)**2*(e_var*log(1._ki-z)+e_var*z_log(s13,1._k&
+ &i)-e_var*log(e_var)+f_var)/f_var**2
+ !
+ case(4)
+ !
+ fg=1._ki/24._ki*(2._ki*c_var*e_var*log(1._ki-z)+2._ki*c_var*e_var*z_lo&
+ &g(s13,1._ki)-2._ki*e_var*log(e_var)*c_var+f_var*c_var+e_var*f_var&
+ &)*(-1._ki+z)/f_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=1._ki/24._ki*(6._ki*c_var**2*e_var**2*log(1._ki-z)+6._ki*c_var**2*e&
+ &_var**2*z_log(s13,1._ki)-4._ki*log(e_var)*c_var**2*f_var*e_var-2.&
+ &_ki*log(e_var)*c_var**2*f_var**2-6._ki*log(e_var)*c_var**2*e_var*&
+ &*2+4._ki*log(e_var)*c_var*f_var*e_var**2-4._ki*log(e_var)*c_var*f&
+ &_var**3-2._ki*log(e_var)*f_var**4+4._ki*log(e_var)*f_var**3*e_var&
+ &-2._ki*log(e_var)*f_var**2*e_var**2-e_var**3*f_var+2._ki*c_var**2&
+ &*f_var*e_var+5._ki*c_var*f_var*e_var**2)/e_var/f_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*z**3*(-log(e_var)+log(1._ki-z)+z_log(s13,1._ki))/f_var
+ !
+ case(3)
+ !
+ fg=-1._ki/4._ki*z**2*(-1._ki+z)*(-log(e_var)+log(1._ki-z)+z_log(s13,1&
+ &._ki))/f_var
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki*z**2*(-log(e_var)*c_var+c_var*log(1._ki-z)+c_var*z_&
+ &log(s13,1._ki)+f_var)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=1._ki/4._ki*z*(-1._ki+z)**2*(-log(e_var)+log(1._ki-z)+z_log(s13,1.&
+ &_ki))/f_var
+ !
+ case(4)
+ !
+ fg=1._ki/12._ki*z*(-log(e_var)*c_var+c_var*log(1._ki-z)+c_var*z_log(&
+ &s13,1._ki)+f_var)*(-1._ki+z)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=1._ki/24._ki*z*(-2._ki*log(e_var)*c_var**2*e_var**2-6._ki*log(e_va&
+ &r)*c_var**2*f_var**2-4._ki*log(e_var)*c_var**2*f_var*e_var-12._ki&
+ &*log(e_var)*c_var*f_var**3+4._ki*log(e_var)*c_var*f_var*e_var**2&
+ &+8._ki*log(e_var)*c_var*f_var**2*e_var+12._ki*log(e_var)*f_var**3&
+ &*e_var-6._ki*log(e_var)*f_var**4-6._ki*log(e_var)*f_var**2*e_var*&
+ &*2+2._ki*c_var**2*e_var**2*log(1._ki-z)+2._ki*c_var**2*e_var**2*z_&
+ &log(s13,1._ki)+3._ki*c_var*f_var*e_var**2-e_var**3*f_var)/e_var**&
+ &2/f_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ fg=-1._ki/4._ki*(-1._ki+z)**3*(-log(e_var)+log(1._ki-z)+z_log(s13,1._k&
+ &i))/f_var
+ !
+ case(4)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)**2*(-log(e_var)*c_var+c_var*log(1._ki-z)+&
+ &c_var*z_log(s13,1._ki)+f_var)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/24._ki*(-2._ki*log(e_var)*c_var**2*e_var**2-6._ki*log(e_var&
+ &)*c_var**2*f_var**2-4._ki*log(e_var)*c_var**2*f_var*e_var-12._ki*&
+ &log(e_var)*c_var*f_var**3+4._ki*log(e_var)*c_var*f_var*e_var**2+&
+ &8._ki*log(e_var)*c_var*f_var**2*e_var+12._ki*log(e_var)*f_var**3*&
+ &e_var-6._ki*log(e_var)*f_var**4-6._ki*log(e_var)*f_var**2*e_var**&
+ &2+2._ki*c_var**2*e_var**2*log(1._ki-z)+2._ki*c_var**2*e_var**2*z_l&
+ &og(s13,1._ki)+3._ki*c_var*f_var*e_var**2-e_var**3*f_var)*(-1._ki+z&
+ &)/e_var**2/f_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par3)
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ fg=-1._ki/24._ki*(6._ki*log(e_var)*c_var*f_var**2*e_var**2-6._ki*log(&
+ &e_var)*c_var*f_var**4-6._ki*log(e_var)*c_var**3*f_var**2-12._ki*l&
+ &og(e_var)*c_var**2*f_var**3-6._ki*log(e_var)*c_var**3*e_var**2+6&
+ &._ki*c_var**3*e_var**2*log(1._ki-z)+6._ki*c_var**3*e_var**2*z_log(&
+ &s13,1._ki)+2._ki*e_var**4*f_var+11._ki*c_var**2*e_var**2*f_var-7._k&
+ &i*c_var*e_var**3*f_var)/e_var**2/f_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par2 should be 1, 2, 3 or 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unexpected value for nb_par = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else if (dim == "n+4") then
+ !
+ if (nb_par == 0) then
+ !
+ fg=1._ki/18._ki*(-3._ki*e_var*log(-e_var)+3._ki*c_var*log(1._ki-z)+3._k&
+ &i*c_var*z_log(-s13,-1._ki)+8._ki*f_var)/f_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ fg=1._ki/144._ki*(6._ki*c_var**2*log(1._ki-z)+6._ki*c_var**2*z_log(-s1&
+ &3,-1._ki)+12._ki*c_var*f_var*log(1._ki-z)+12._ki*c_var*f_var*z_log(&
+ &-s13,-1._ki)-6._ki*e_var**2*log(-e_var)-13._ki*c_var*f_var+19._ki*e&
+ &_var*f_var)/f_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/36._ki*z*(-3._ki*e_var*log(-e_var)+3._ki*c_var*log(1._ki-z)+3&
+ &._ki*c_var*z_log(-s13,-1._ki)+8._ki*f_var)/f_var
+ !
+ case(3)
+ !
+ fg=-1._ki/36._ki*(-3._ki*e_var*log(-e_var)+3._ki*c_var*log(1._ki-z)+3.&
+ &_ki*c_var*z_log(-s13,-1._ki)+8._ki*f_var)*(-1._ki+z)/f_var
+ !
+ case(4)
+ !
+ fg=-1._ki/144._ki*(6._ki*e_var*log(-e_var)*f_var-6._ki*e_var*log(-e_v&
+ &ar)*c_var+6._ki*c_var**2*log(1._ki-z)+6._ki*c_var**2*z_log(-s13,-1&
+ &._ki)+19._ki*c_var*f_var-13._ki*e_var*f_var)/f_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par4 should be 4 but is %d0"
+ tab_erreur_par(2)%arg_int = par4
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unexpected value for nb_par = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = "In function fg (function_4p1m.f90):"
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unexpected value for nb_dim = %c0"
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function fg
+ !
+end module function_4p1m
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql11.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql11.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql11.f90 (revision 119)
@@ -0,0 +1,466 @@
+!
+!****h* src/integrals/four_point/function_4p_ql11
+! NAME
+!
+! Module function_4p_ql11
+!
+! USAGE
+!
+! use function_4p_ql11
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 11
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql11, f4p_ql11_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql11
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql11,f4p_ql11_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql11/f4p_ql11
+ ! NAME
+ !
+ ! Function f4p_ql11
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql11(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql11(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql11
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: coupure_4p_ql11
+ real(ki) :: norma
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql11 = 0._ki
+ coupure_4p_ql11 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql11) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql11 (in file f4p_ql11.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql11'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql11) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql11_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql11= a4p_ql11_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql11: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql11: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql11 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql11 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql11
+ !
+ !****f* src/integrals/four_point/function_4p_ql11/f4p_ql11_c
+ ! NAME
+ !
+ ! Function f4p_ql11_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql11_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql11
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql11
+ !
+ !*****
+ function f4p_ql11_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql11_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql11(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql11_c)
+ !
+ end function f4p_ql11_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql11/a4p_ql11_n
+ ! NAME
+ !
+ ! recursive function a4p_ql11_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql11_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql11_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql11_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql11_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,deno,s3cut
+ !real(ki) :: msq
+ complex(ki) :: ds12,ds23,dp3,dp4,logm3,logm4,logmu3,logmu4
+ complex(ki) :: dm3,dm4,m34p3,gaplus,gaminus
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ s3cut=1.e-8_ki
+ !
+ deno=(m2s-s12)*(m3s-s23)
+ ! relabel masses to LoopTools conventions
+ dm3=m2s-i_*del
+ dm4=m3s-i_*del
+ !
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp3= s3 +i_*del
+ dp4= s4 +i_*del
+ logm3=log((dm3-ds12)/dm3)
+ logm4=log((dm4-ds23)/dm4)
+ logmu3=log(dm3/mu2)
+ logmu4=log(dm4/mu2)
+ m34p3=1._ki-(dm3-dm4)/dp3
+ gaplus=(m34p3+Sqrt(m34p3**2-4*dm4/dp3))/2._ki
+ gaminus=(m34p3-Sqrt(m34p3**2-4*dm4/dp3))/2._ki
+ !
+ ! case p3^2 > s3cut
+ if (abs(s3) > s3cut) then
+ res_4p_ql11_n(1) = 1._ki/deno
+ res_4p_ql11_n(2) = 0._ki
+ res_4p_ql11_n(3) = real( -(logm3+logm4+logmu3/2._ki+logmu4/2._ki)/deno )
+ res_4p_ql11_n(4) = aimag(-(logm3+logm4+logmu3/2._ki+logmu4/2._ki)/deno )
+ res_4p_ql11_n(5) = real( ( 2*(logm3+logmu3/2._ki)*(logm4+logmu4/2._ki) &
+ & - Pi**2/2+Log(dm3/dm4)**2/4._ki-Log(gaplus/(gaplus-1.0_ki))**2/2._ki &
+ & - Log(gaminus/(gaminus-1._ki))**2/2._ki )/deno )
+ res_4p_ql11_n(6) = aimag( ( 2*(logm3+logmu3/2._ki)*(logm4+logmu4/2._ki) &
+ & +Log(dm3/dm4)**2/4._ki-Log(gaplus/(gaplus-1.0_ki))**2/2._ki &
+ & - Log(gaminus/(gaminus-1._ki))**2/2._ki )/deno )
+ !
+ else ! limit p3^2 -> 0
+ res_4p_ql11_n(1) = 1._ki/deno
+ res_4p_ql11_n(2) = 0._ki
+ res_4p_ql11_n(3) = real( -(logm3+logm4+logmu3/2._ki+logmu4/2._ki)/deno )
+ res_4p_ql11_n(4) = aimag(-(logm3+logm4+logmu3/2._ki+logmu4/2._ki)/deno )
+ res_4p_ql11_n(5) = real( ( 2*(logm3+logmu3/2._ki)*(logm4+logmu4/2._ki) &
+ & - Pi**2/2 - Log(dm3/dm4)**2/4._ki )/deno )
+ res_4p_ql11_n(6) = aimag( ( 2*(logm3+logmu3/2._ki)*(logm4+logmu4/2._ki) &
+ & -Log(dm3/dm4)**2/4._ki )/deno )
+ !
+ end if ! end p3^2 > s3cut
+ !
+ else ! QL11 shouldn't be called in non-scalar case
+ !
+ !~ call print_error('In function f4p_ql11: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql11: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if ! end if (nb_par_loc == 0)
+ !
+ end function a4p_ql11_n
+ !
+ !
+end module function_4p_ql11
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql12.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql12.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql12.f90 (revision 119)
@@ -0,0 +1,507 @@
+!
+!****h* src/integrals/four_point/function_4p_ql12
+! NAME
+!
+! Module function_4p_ql12
+!
+! USAGE
+!
+! use function_4p_ql12
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 12
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql12, f4p_ql12_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql12
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ !~ use more_integ_info
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ !
+ public :: f4p_ql12,f4p_ql12_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql12/f4p_ql12
+ ! NAME
+ !
+ ! Function f4p_ql12
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql12(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql12(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql12
+ !
+ integer :: nb_par
+ real(ki) :: norma,coupure_4p_ql12
+ !real(ki) :: plus_grand
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql12 = 0._ki
+ coupure_4p_ql12 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql12) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql12 (in file f4p_ql12.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql12'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql12) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql12_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql12= a4p_ql12_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql12: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql12: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql12 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql12 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql12
+ !
+ !****f* src/integrals/four_point/function_4p_ql12/f4p_ql12_c
+ ! NAME
+ !
+ ! Function f4p_ql12_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql12_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql12
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql12
+ !
+ !*****
+ function f4p_ql12_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql12_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql12(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql12_c)
+ !
+ end function f4p_ql12_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql12/a4p_ql12_n
+ ! NAME
+ !
+ ! recursive function a4p_ql12_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql12_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql12_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql12_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql12_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki) :: del,m3sq,m4sq,deno,m3mu,s3cut
+ complex(ki) :: ds12,ds23,dp3,dp4,dm3,dm4,logm3,logm4
+ complex(ki) :: logmu3,logmu4
+ !complex(ki) :: logsmu, logsm, test1,test2,test3,test4,test0
+ complex(ki) :: eta1,eta2,anacon1,anacon2,eta3,anacon3
+ complex(ki) :: gaplus43,gaplus34,gaminus43,gaminus34,m34,m43
+!
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ s3cut=1.e-8_ki
+ !
+ ! relabel to QCDL conventions
+ m3sq=m2s
+ m4sq=m3s
+ dm3=m2s-i_*del
+ dm4=m3s-i_*del
+ !
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp3= s3 +i_*del;
+ dp4= s4 +i_*del;
+!
+ logm3=log((dm3-ds12)/dm3)
+ logm4=log((dm4-ds23)/dm3)
+ logmu3=log(dm3/mu2)
+ logmu4=log(dm4/mu2)
+ m3mu=sqrt(m3sq*mu2)
+!
+ deno=(s12-m3sq)*(s23-m4sq)
+ m34=1._ki-(dm3-dm4)/dp3
+ m43=1._ki-(dm4-dm3)/dp3
+ gaplus34=(m34+Sqrt(m34**2-4*dm4/dp3))/2._ki
+ gaminus34=(m34-Sqrt(m34**2-4*dm4/dp3))/2._ki
+ gaplus43=(m43+Sqrt(m43**2-4*dm3/dp3))/2._ki
+ gaminus43=(m43-Sqrt(m43**2-4*dm3/dp3))/2._ki
+ !
+ eta1=log( (dm4-dp4)/(dm3-ds12)*gaplus43/(gaplus43-1._ki) ) &
+ & - log( (dm4-dp4)/(dm3-ds12) ) - log( gaplus43/(gaplus43-1._ki) )
+ eta2=log( (dm4-dp4)/(dm3-ds12)*gaminus43/(gaminus43-1._ki) ) &
+ & - log( (dm4-dp4)/(dm3-ds12) ) - log( gaminus43/(gaminus43-1._ki) )
+ eta3=log( (dm4-dp4)/(dm3-ds12)*dm3/dm4 ) &
+ & - log( (dm4-dp4)/(dm3-ds12) ) - log( dm3/dm4 )
+ anacon1=cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*gaplus43/(gaplus43-1._ki))+ &
+ & eta1*log(1._ki-(dm4-dp4)/(dm3-ds12)*gaplus43/(gaplus43-1._ki))
+ anacon2=cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*gaminus43/(gaminus43-1._ki))+ &
+ & eta2*log(1._ki-(dm4-dp4)/(dm3-ds12)*gaminus43/(gaminus43-1._ki))
+ anacon3=cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*dm3/dm4)+ &
+ & eta3*log(1._ki-(dm4-dp4)/(dm3-ds12)*dm3/dm4)
+ !
+ ! case p3^2 > delta
+ if (abs(s3) > s3cut) then
+ !
+ res_4p_ql12_n(1) = 1._ki/2._ki/deno
+ res_4p_ql12_n(2) = 0._ki
+ res_4p_ql12_n(3) = real( -(logm3+log((dm4-ds23)/(dm4-dp4))+logmu3/2._ki )/deno )
+ res_4p_ql12_n(4) = aimag( -(logm3+log((dm4-ds23)/(dm4-dp4))+logmu3/2._ki )/deno )
+ res_4p_ql12_n(5) = real( (2*log((dm4-ds23)/m3mu)*log((dm3-ds12)/m3mu) &
+ & -(log((dm4-dp4)/m3mu))**2 - Pi**2/12 &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/dm3) &
+ & -log(gaplus34/(gaplus34-1._ki))**2/2._ki &
+ & -log(gaminus34/(gaminus34-1._ki))**2/2._ki &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23))-anacon1-anacon2)/deno )
+ res_4p_ql12_n(6) = aimag( (2*log((dm4-ds23)/m3mu)*log((dm3-ds12)/m3mu) &
+ & -(log((dm4-dp4)/m3mu))**2 &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/dm3) &
+ & -log(gaplus34/(gaplus34-1._ki))**2/2._ki &
+ & -log(gaminus34/(gaminus34-1._ki))**2/2._ki &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23))-anacon1-anacon2)/deno )
+ !
+ else ! limit p3^2 -> 0
+ !
+ res_4p_ql12_n(1) = 1._ki/2._ki/deno
+ res_4p_ql12_n(2) = 0._ki
+ res_4p_ql12_n(3) = real( -(logm3+log((dm4-ds23)/(dm4-dp4))+logmu3/2._ki )/deno )
+ res_4p_ql12_n(4) = aimag( -(logm3+log((dm4-ds23)/(dm4-dp4))+logmu3/2._ki )/deno )
+ res_4p_ql12_n(5) = real( (2*log((dm4-ds23)/m3mu)*log((dm3-ds12)/m3mu) &
+ & -(log((dm4-dp4)/m3mu))**2 - Pi**2/12 &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/dm3) &
+ & -log(dm4/dm3)**2/2._ki &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23)) &
+ & - cdilog(1._ki-(dm4-dp4)/(dm3-ds12)) &
+ & - cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*dm3/dm4) )/deno )
+ res_4p_ql12_n(6) = aimag( (2*log((dm4-ds23)/m3mu)*log((dm3-ds12)/m3mu) &
+ & -(log((dm4-dp4)/m3mu))**2 &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/dm3) &
+ & -log(dm4/dm3)**2/2._ki &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23)) &
+ & - cdilog(1._ki-(dm4-dp4)/(dm3-ds12)) &
+ & - anacon3 )/deno )
+ !
+ end if ! end p3^2 > s3cut
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql12: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql12: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql12_n
+ !
+ !
+end module function_4p_ql12
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p3m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p3m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p3m.f90 (revision 119)
@@ -0,0 +1,7390 @@
+!
+!****h* src/integrals/four_point/function_4p3m
+! NAME
+!
+! Module function_4p3m
+!
+! USAGE
+!
+! use function_4p3m
+!
+! DESCRIPTION
+!
+! This module computes the six-dimensional and eight dimensional
+! three mass four point function with or without Feynman parameters
+! in the numerator.
+!
+! OUTPUT
+!
+! This module exports three functions f4p3m, f4p3m_c and f3
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+!
+!*****
+module function_4p3m
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s23_glob,s24_glob,s34_glob,s12_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ integer :: flag_glob
+ character (len=3) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p3m,f3,f4p3m_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p3m/f4p3m
+ ! NAME
+ !
+ ! Function f4p3m
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p3m(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the six dimensional/eight dimensional
+ ! three mass four point function with or without Feynman parameters
+ ! in the numerator.
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! three mass four point function, dim="n+4" eight dimensional
+ ! three mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! If the user wants to compute:
+ ! * a six dimensional three mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p3m("n+2",s24,s13,s12,s23,s34,0,0,0,0)
+ ! * a eight dimensional three mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p3m("n+4",s24,s13,s12,s23,s34,0,0,0,0)
+ ! * a six dimensional three mass four point function
+ ! with the Feynman parameter z1 in the numerator:
+ ! real_dim_4 = f4p3m("n+2",s24,s13,s12,s23,s34,0,0,0,1)
+ ! * a six dimensional three mass four point function
+ ! with the Feynman parameters z1^2*z2 in the numerator:
+ ! real_dim_4 = f4p3m("n+2",s24,s13,s12,s23,s34,0,2,1,1)
+ !
+ !*****
+ function f4p3m(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: f4p3m
+ !
+ integer :: nb_par
+ real(ki) :: lamb
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: rest1,abserr1
+ complex(ki) :: rest2,abserr2
+ complex(ki) :: resto,abserro
+ complex(ki) :: extra_imag1,extra_imag2
+ real(ki) :: pole1,pole2
+ complex(ki) :: residue1,residue2
+ real(ki) :: t1,t2,t3,t4,t5,sign_arg
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/0._ki,s12,s13,0._ki/)
+ s_mat(2,:) = (/s12,0._ki,s23,s24/)
+ s_mat(3,:) = (/s13,s23,0._ki,s34/)
+ s_mat(4,:) = (/0._ki,s24,s34,0._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ plus_grand = maxval(array=abs(s_mat))
+ s_mat = s_mat/plus_grand
+ !
+ b(1)=-(-s_mat(1,2)*s_mat(3,4)**2+s_mat(3,4)*s_mat(1,3)*s_m&
+ &at(2,4)+s_mat(2,3)*s_mat(1,3)*s_mat(2,4)-2._ki*s_mat(2,4)&
+ &*s_mat(3,4)*s_mat(2,3)+s_mat(1,2)*s_mat(3,4)*s_mat(2,3)-&
+ &s_mat(2,4)**2*s_mat(1,3)+s_mat(1,2)*s_mat(3,4)*s_mat(2,4&
+ &))/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3))**2
+ b(2)=-(s_mat(1,3)-s_mat(3,4))/(s_mat(1,2)*s_mat(3,4)-s_mat&
+ &(2,4)*s_mat(1,3))
+ b(3)=(s_mat(1,2)-s_mat(2,4))/(s_mat(1,2)*s_mat(3,4)-s_mat(&
+ &2,4)*s_mat(1,3))
+ b(4)=(2._ki*s_mat(2,3)*s_mat(1,3)*s_mat(1,2)-s_mat(2,3)*s_m&
+ &at(1,3)*s_mat(2,4)+s_mat(1,2)**2*s_mat(3,4)-s_mat(1,2)*s&
+ &_mat(3,4)*s_mat(1,3)+s_mat(2,4)*s_mat(1,3)**2-s_mat(1,2)&
+ &*s_mat(3,4)*s_mat(2,3)-s_mat(2,4)*s_mat(1,3)*s_mat(1,2))&
+ &/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3))**2
+ !
+ sumb=2._ki*(s_mat(1,2)*s_mat(3,4)**2-s_mat(3,4)*s_mat(1,3)*&
+ &s_mat(2,4)-s_mat(2,3)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)*s&
+ &_mat(3,4)*s_mat(2,3)-s_mat(1,2)*s_mat(3,4)*s_mat(2,3)+s_&
+ &mat(2,4)**2*s_mat(1,3)-s_mat(1,2)*s_mat(3,4)*s_mat(2,4)+&
+ &s_mat(2,4)*s_mat(1,3)**2-s_mat(1,2)*s_mat(3,4)*s_mat(1,3&
+ &)+s_mat(1,2)**2*s_mat(3,4)-s_mat(2,4)*s_mat(1,3)*s_mat(1&
+ &,2)+s_mat(2,3)*s_mat(1,3)*s_mat(1,2))/(s_mat(1,2)*s_mat(&
+ &3,4)-s_mat(2,4)*s_mat(1,3))**2
+ !
+ invs(1,1)=2._ki*s_mat(2,4)*s_mat(3,4)*s_mat(2,3)/(s_mat(1,2&
+ &)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3))**2
+ invs(1,2)=s_mat(3,4)/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_m&
+ &at(1,3))
+ invs(1,3)=-s_mat(2,4)/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_&
+ &mat(1,3))
+ invs(1,4)=-s_mat(2,3)*(s_mat(1,2)*s_mat(3,4)+s_mat(2,4)*s_&
+ &mat(1,3))/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3))*&
+ &*2
+ invs(2,1) = invs(1,2)
+ invs(2,2)=0._ki
+ invs(2,3)=0._ki
+ invs(2,4)=-s_mat(1,3)/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_&
+ &mat(1,3))
+ invs(3,1) = invs(1,3)
+ invs(3,2) = invs(2,3)
+ invs(3,3)=0._ki
+ invs(3,4)=s_mat(1,2)/(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_m&
+ &at(1,3))
+ invs(4,1) = invs(1,4)
+ invs(4,2) = invs(2,4)
+ invs(4,3) = invs(3,4)
+ invs(4,4)=2._ki*s_mat(2,3)*s_mat(1,3)*s_mat(1,2)/(s_mat(1,2&
+ &)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3))**2
+ !
+ lamb = (s_mat(1,2)*s_mat(3,4)**2-s_mat(3,4)*s_mat(1,3)*&
+ &s_mat(2,4)-s_mat(2,3)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4)*s&
+ &_mat(3,4)*s_mat(2,3)-s_mat(1,2)*s_mat(3,4)*s_mat(2,3)+s_&
+ &mat(2,4)**2*s_mat(1,3)-s_mat(1,2)*s_mat(3,4)*s_mat(2,4)+&
+ &s_mat(2,4)*s_mat(1,3)**2-s_mat(1,2)*s_mat(3,4)*s_mat(1,3&
+ &)+s_mat(1,2)**2*s_mat(3,4)-s_mat(2,4)*s_mat(1,3)*s_mat(1&
+ &,2)+s_mat(2,3)*s_mat(1,3)*s_mat(1,2))
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p3m = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p3m) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p3m (in file f4p3m.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p3m'
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if (abs(sumb) > coupure_4p3m) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n+2") then
+ !
+ f4p3m(3:4)= a4p3m_np2(s_mat(2,4),s_mat(1,3),&
+ &s_mat(1,2),s_mat(2,3),s_mat(3,4),&
+ &par1,par2,par3,par4)/plus_grand
+ !
+ else if (dim == "n+4") then
+ !
+ f4p3m = a4p3m_np4(s_mat(2,4),s_mat(1,3),&
+ &s_mat(1,2),s_mat(2,3),s_mat(3,4),&
+ &par1,par2,par3,par4)
+ f4p3m(3) = f4p3m(3)-log(plus_grand)*norma
+ !
+ end if
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ par4_glob = par4
+ !
+ s12_glob = s_mat(1,2)
+ s13_glob = s_mat(1,3)
+ s23_glob = s_mat(2,3)
+ s24_glob = s_mat(2,4)
+ s34_glob = s_mat(3,4)
+ !
+ t1 = (s13_glob-s34_glob)*(s24_glob-s12_glob)
+ t2 = (s24_glob+s13_glob-s12_glob-s34_glob)
+ t3 = (s13_glob*s24_glob-s12_glob*s34_glob)
+ t4 = s13_glob-s34_glob
+ t5 = s12_glob-s13_glob
+ !
+ sign_arg = sign(un,(t1*s23_glob-t2*t3))
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s24+(1-z)*s34 = s34+x*(s24-s34)-i*eps*y*(s24-s34)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s24-s34) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ !
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = (s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3))**2
+ !
+ eps_glob = sign(1._ki,s34_glob-s24_glob)
+ flag_glob = 1
+ !
+ origine_info_par = "f4p3m part 1, dimension "//dim
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,rest1,abserr1)
+ !
+ residue1 = compute_residue(t1,t2,t3,t4,t5,s23_glob,sign_arg)
+ !
+ pole1 = (s13_glob-s34_glob)/t2
+ !
+ if ( (pole1 >= 0._ki) .and. (pole1 <= 1._ki) &
+ & .and. (eps_glob == sign(1._ki,t2)) ) then
+ extra_imag1 = -2._ki*i_*pi*residue1*eps_glob
+ else
+ extra_imag1 = 0._ki
+ end if
+ !
+ resto = resto + rest1 + extra_imag1
+ abserro = abserro + abserr1
+ !
+ eps_glob = sign(1._ki,s13_glob-s12_glob)
+ flag_glob = 2
+ !
+ origine_info_par = "f4p3m part 2, dimension "//dim
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,rest2,abserr2)
+ ! le residue au pole pour la somme des deux parties est nul
+ residue2 = -residue1
+ pole2 = pole1
+ !
+ if ( (pole2 >= 0._ki) .and. (pole2 <= 1._ki) &
+ & .and. (eps_glob == sign(1._ki,t2)) ) then
+ extra_imag2 = -2._ki*i_*pi*residue2*eps_glob
+ else
+ extra_imag2 = 0._ki
+ end if
+ !
+ resto = resto + rest2 + extra_imag2
+ abserro = abserro + abserr2
+ !
+ if (dim == "n+2") then
+ resto = resto/plus_grand
+ else if (dim == "n+4") then
+ f4p3m(1) = norma
+ f4p3m(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ end if
+ !
+ f4p3m(3) = real(resto,ki)
+ f4p3m(4) = aimag(resto)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p3m
+ !
+ !****f* src/integrals/four_point/function_4p3m/f4p3m_c
+ ! NAME
+ !
+ ! Function f4p3m_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_2 = f4p3m_c(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing that the function f4p3m
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two adjacent mass four point function, dim="n+4" eight dimensional
+ ! two adjacent mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p3m
+ !
+ !*****
+ function f4p3m_c(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(2) :: f4p3m_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f4p3m(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ call to_complex(res4,f4p3m_c)
+ !
+ end function f4p3m_c
+ !
+ !****if* src/integrals/four_point/function_4p3m/a4p3m_np2
+ ! NAME
+ !
+ ! recursive function a4p3m_np2
+ !
+ ! USAGE
+ !
+ ! real_dim_2 = a4p3m_np2(s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the six dimensional
+ ! three mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two reals (type ki) corresponding to the
+ ! real and imaginary part of the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p3m_np2(s24,s13,s12,s23,s34,par1,par2,par3,par4) result(res_4p3m_np2)
+ !
+ real(ki), intent (in) :: s24,s13,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(2) :: res_4p3m_np2
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(6) :: truc1,truc2,truc3
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(6) :: temp1,temp2,temp3,temp4
+ real(ki), dimension(2) :: temp10,temp11,temp12,temp13,temp14,temp15
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule3(1,1)) then
+ !
+ truc1 = resultat3(1,1,:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,unpackb(ibclr(b_pro,1),3))
+ resultat3(1,1,:) = truc1
+ deja_calcule3(1,1) = .true.
+ !
+ end if
+ !
+ if (deja_calcule3(4,1)) then
+ !
+ truc2 = resultat3(4,1,:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,unpackb(ibclr(b_pro,4),3))
+ resultat3(4,1,:) = truc2
+ deja_calcule3(4,1) = .true.
+ !
+ end if
+ !
+ ctemp = f3(s24,s13,s12,s23,s34)
+ res_4p3m_np2(1) = (real(ctemp,ki) - b(1)*truc1(5) - b(4)*truc2(5))/sumb
+ res_4p3m_np2(2) = (aimag(ctemp) - b(1)*truc1(6) - b(4)*truc2(6))/sumb
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp0 = b(par4)*temp0
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3(j,1)) then
+ !
+ truc1 = resultat3(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj)
+ resultat3(j,1,:) = truc1
+ deja_calcule3(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/2._ki
+ !
+ if (j /= par4) then
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 - b(j)*truc2/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p3m_np2(1) = (temp0(1) + temp1(5) + temp2(5))/sumb
+ res_4p3m_np2(2) = (temp0(2) + temp1(6) + temp2(6))/sumb
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule(par_plus(4))) then
+ !
+ temp10 = resultat(par_plus(4),:)
+ !
+ else
+ !
+ temp10 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,0,par4)
+ resultat(par_plus(4),:) = temp10
+ deja_calcule(par_plus(4)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule(par_plus(3))) then
+ !
+ temp11 = resultat(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,0,par3)
+ resultat(par_plus(3),:) = temp11
+ deja_calcule(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp12 = resultat(1,:)
+ temp0 = b(par3)*temp10+b(par4)*temp11 - invs(par3,par4)*temp12/2._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule3(j,par_plus(3))) then
+ !
+ truc1 = resultat3(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj))
+ resultat3(j,par_plus(3),:) = truc1
+ deja_calcule3(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs(j,par3)*truc2/4._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ if (deja_calcule33(j,par_plus(3),par_plus(4))) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ !
+ else
+ !
+ truc3 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))
+ resultat33(j,par_plus(3),par_plus(4),:) = truc3
+ deja_calcule33(j,par_plus(3),par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp3 = temp3 - b(j)*truc3/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p3m_np2(1) = (temp0(1) + temp1(5) + temp2(5) + temp3(5)) &
+ *2._ki/3._ki/sumb
+ res_4p3m_np2(2) = (temp0(2) + temp1(6) + temp2(6) + temp3(6)) &
+ *2._ki/3._ki/sumb
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp10 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,par2,par3)
+ temp11 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,par2,par4)
+ temp12 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,par3,par4)
+ !
+ temp13 = resultat(par_plus(4),:)
+ temp14 = resultat(par_plus(3),:)
+ temp15 = resultat(par_plus(2),:)
+ !
+ temp0 = b(par4)*temp10+b(par3)*temp11+b(par2)*temp12 &
+ - ( invs(par2,par3)*temp13+invs(par2,par4)*temp14&
+ +invs(par3,par4)*temp15 )/3._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ temp4 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ truc1 = resultat33(j,par_plus(2),par_plus(3),:)
+ temp1 = temp1 + invs(j,par4)*truc1/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ truc2 = resultat33(j,par_plus(2),par_plus(4),:)
+ temp2 = temp2 + invs(j,par3)*truc2/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ temp3 = temp3 + invs(j,par2)*truc3/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j)*f3p_sc(s_mat,smj,locateb(par2,b_pro_mj), &
+ locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p3m_np2(1) = ( temp0(1) + temp1(5) + temp2(5) + temp3(5) &
+ + temp4(5) )/2._ki/sumb
+ res_4p3m_np2(2) = ( temp0(2) + temp1(6) + temp2(6) + temp3(6) &
+ + temp4(6) )/2._ki/sumb
+ end if
+ !
+ end function a4p3m_np2
+ !
+ !****if* src/integrals/four_point/function_4p3m/a4p3m_np4
+ ! NAME
+ !
+ ! recursive function a4p3m_np4
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p3m_np4(s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the eight dimensional
+ ! three mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p3m_np4(s24,s13,s12,s23,s34,par1,par2,par3,par4) result(res_4p3m_np4)
+ !
+ real(ki), intent (in) :: s24,s13,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: res_4p3m_np4
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3_np2(j,1)) then
+ !
+ truc1 = resultat3_np2(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_np2_sc(s_mat,smj)
+ resultat3_np2(j,1,:) = truc1
+ deja_calcule3_np2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p3m_np4(1) = (-temp1(1))/(3._ki*sumb)
+ res_4p3m_np4(2) = (-temp1(2))/(3._ki*sumb)
+ res_4p3m_np4(3) = (temp0(1)-temp1(3)-2._ki/3._ki*temp1(1))/(3._ki*sumb)
+ res_4p3m_np4(4) = (temp0(2)-temp1(4)-2._ki/3._ki*temp1(2))/(3._ki*sumb)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ temp0 = a4p3m_np2(s24,s13,s12,s23,s34,0,0,0,par4)/3._ki
+ temp1 = b(par4)*a4p3m_np4(s24,s13,s12,s23,s34,0,0,0,0)
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ truc1 = resultat3_np2(j,1,:)
+ temp2 = temp2 + invs(j,par4)*truc1/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j)*f3p_np2_sc(s_mat,smj,locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p3m_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb)
+ res_4p3m_np4(2) = ( temp1(2)+temp2(2)+temp3(2) )/(2._ki*sumb)
+ res_4p3m_np4(3) = ( temp1(3)+temp1(1)/6._ki+temp2(3)+temp2(1)/2._ki &
+ +temp3(3)+temp3(1)/2._ki+temp0(1) )/(2._ki*sumb)
+ res_4p3m_np4(4) = ( temp1(4)+temp1(2)/6._ki+temp2(4)+temp2(2)/2._ki &
+ +temp3(4)+temp3(2)/2._ki+temp0(2) )/(2._ki*sumb)
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a4p3m_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),4/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function a4p3m_np4
+ !
+ !****f* src/integrals/four_point/function_4p3m/f3
+ ! NAME
+ !
+ ! function f3
+ !
+ ! USAGE
+ !
+ ! complex = f3(s,t,m2,m3,m4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the "finite part" of the scalar four dimensional three
+ ! mass four point function.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s -- a real (type ki), (p1+p2)^2
+ ! * t -- a real (type ki), (p2+p3)^2
+ ! * m2 -- a real (type ki), p2^2
+ ! * m3 -- a real (type ki), p3^2
+ ! * m4 -- a real (type ki), p4^2
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ ! Affected by the variable rat_or_tot_par (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f3(s,t,m2,m3,m4)
+ !
+ real(ki), intent(in) :: s,t,m2,m3,m4
+ complex(ki) :: f3
+ !
+ real(ki) :: lamb1
+ !
+ lamb1 = s*t-m2*m4
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f3 = ( z_log(m3/s,sign(un,s-m3))*z_log(m4/s,sign(un,s-m4)) &
+ &- z_log(t/s,sign(un,s-t))*z_log(m2/s,sign(un,s-m2)) &
+ &- z_log(t/s,sign(un,s-t))*z_log(m3/s,sign(un,s-m3)) &
+ &+ z_log(m2/s,sign(un,s-m2))*z_log(m3/s,sign(un,s-m3)) &
+ &- 2._ki*zdilog(1._ki-m2/s,sign(un,m2-s)) &
+ &- 2._ki*zdilog(1._ki-m4/t,sign(un,m4-t)) &
+ &+ 2._ki &
+ & *( zdilog(1._ki-m2*m4/(s*t),sign(un,m2*m4*(s+t)-s*t*(m2+m4))) &
+ +( z_log(m2*m4/(s*t),sign(un,-m2*m4*(s+t)+s*t*(m2+m4))) &
+ -z_log(m2/s,sign(un,s-m2))-z_log(m4/t,sign(un,t-m4)) ) &
+ *z_log(1._ki-m2*m4/(s*t),sign(un,m2*m4*(s+t)-s*t*(m2+m4))) ) &
+ & )/lamb1
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ f3 = 0._ki
+ !
+ end if
+ !
+ end function f3
+ !
+ !****if* src/integrals/four_point/function_4p3m/eval_numer_gi
+ ! NAME
+ !
+ ! function eval_numer_gi
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gi(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the integrand for the numerical computation in phase
+ ! space region where det(G) ~ 0
+ !
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), between 0 and 1
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki). It is called by
+ ! the routine adapt_gauss1 in the function f4p3m
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gi(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gi
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ z = x - eps_glob*i_*y
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ !
+ eval_numer_gi = fg(z,s24_glob,s13_glob,s12_glob,s23_glob,s34_glob,&
+ & par1_glob,par2_glob,par3_glob,par4_glob,flag_glob,&
+ & dim_glob)
+ eval_numer_gi = eval_numer_gi*jacob
+ !
+ end function eval_numer_gi
+ !
+ !****if* src/integrals/four_point/function_4p3m/compute_residue
+ ! NAME
+ !
+ ! Function compute_residue
+ !
+ ! USAGE
+ !
+ ! complex = compute_residue(t1,t2,t3,t4,t5,t6,sign_arg)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the residue of the pole in the case where the pole
+ ! is inside the contour
+ !
+ ! INPUTS
+ !
+ ! * t1 -- a real (type ki)
+ ! * t2 -- a real (type ki)
+ ! * t3 -- a real (type ki)
+ ! * t4 -- a real (type ki)
+ ! * t5 -- a real (type ki)
+ ! * t6 -- a real (type ki)
+ ! * sign_arg -- a real (type ki)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the global variable (for this module) dim_glob
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function compute_residue(t1,t2,t3,t4,t5,t6,sign_arg)
+ !
+ real(ki), intent (in) :: t1,t2,t3,t4,t5,t6,sign_arg
+ complex(ki) :: compute_residue
+ !
+ complex(ki) :: temp0,stemp1,stemp2,stemp3,stemp4,&
+ &stemp5,stemp6,stemp7,stemp8,stemp9,&
+ &stemp10,stemp11
+ integer, dimension(4) :: par
+ integer :: nb_par
+ !
+ par = (/par1_glob,par2_glob,par3_glob,par4_glob/)
+ nb_par = count(mask=par/=0)
+ !
+ if (dim_glob == "n+2") then
+ if (nb_par == 0) then
+ !
+ temp0=(-z_log(t1*t6/t2**2,1._ki)+q(1,(-t1*t6+t2*t3)/t2/t3,sign_arg&
+ &))/t2
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ temp0=(-1._ki/2._ki*(t2**2+t6*t2+t5*t2-2._ki*t6*t4)/t2**2*z_log(t1*t&
+ &6/t2**2,1._ki)+1._ki/2._ki/t3*(t2**2*t3+t5*t2*t3+t2*t3*t6-2._ki*t5*&
+ &t1*t6-2._ki*t2*t1*t6-2._ki*t3*t6*t4)/t2**2*q(2,(t2*t3-t1*t6)/t2/t&
+ &3,sign_arg)-1._ki/2._ki*(2._ki*t2**2+2._ki*t5*t2+t6*t2-2._ki*t6*t4)/&
+ &t2**2)/t2
+ !
+ case(2)
+ !
+ temp0=(-1._ki/2._ki*(t4*t2**3+2._ki*t2*t3*t6+2._ki*t6*t4*t5*t2-6._ki*t&
+ &3*t6*t4+2._ki*t5*t1*t6-4._ki*t4**2*t5*t6)/t2**4*z_log(t1*t6/t2**2&
+ &,1._ki)+1._ki/2._ki*t4/t2*q(2,(t2*t3-t1*t6)/t2/t3,sign_arg)-1._ki/2&
+ &._ki*(t4*t2**2*t3-4._ki*t4**2*t2*t3+2._ki*t2*t1*t3+2._ki*t2*t4*t5*t&
+ &1-6._ki*t4*t1*t3+4._ki*t4**3*t3-4._ki*t4**2*t5*t1)*t6/t1/t2**4)/t2
+ !
+ case(3)
+ !
+ temp0=(-1._ki/2._ki*(t2**4-t4*t2**3+2._ki*t6*t2**2*t5-4._ki*t2*t3*t6-&
+ &6._ki*t6*t4*t5*t2+6._ki*t3*t6*t4-2._ki*t5*t1*t6+4._ki*t4**2*t5*t6)/&
+ &t2**4*z_log(t1*t6/t2**2,1._ki)+1._ki/2._ki/t2*(t2-t4)*q(2,(t2*t3-t&
+ &1*t6)/t2/t3,sign_arg)-1._ki/2._ki*(t3*t2**3-5._ki*t4*t2**2*t3+2._ki&
+ &*t2**2*t1*t5+8._ki*t4**2*t2*t3-4._ki*t2*t1*t3-6._ki*t2*t4*t5*t1+6.&
+ &_ki*t4*t1*t3-4._ki*t4**3*t3+4._ki*t4**2*t5*t1)*t6/t1/t2**4)/t2
+ !
+ case(4)
+ !
+ temp0=(1._ki/2._ki*(t5*t2+t6*t2-2._ki*t6*t4)/t2**2*z_log(t1*t6/t2**2&
+ &,1._ki)-1._ki/2._ki/t3*(t5*t2*t3+t2*t3*t6-2._ki*t5*t1*t6-2._ki*t3*t6&
+ &*t4)/t2**2*q(2,(t2*t3-t1*t6)/t2/t3,sign_arg)+1._ki/2._ki*(t6*t2+2&
+ &._ki*t5*t2-2._ki*t6*t4)/t2**2)/t2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ & 'In function compute_residue (function_4p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par4 = %d0'
+ tab_erreur_par(2)%arg_int = par4_glob
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par3_glob)
+ !
+ case(1)
+ !
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ stemp2=-(-2._ki*t1*t6**2+4._ki*t6**2*t4**2-4._ki*t6**2*t2*t4+t6**2*t&
+ &2**2+t2**3*t6+t6*t2**2*t5-2._ki*t6*t4*t5*t2-2._ki*t4*t6*t2**2-t6*&
+ &t3*t2+t2**4+t5**2*t2**2+2._ki*t5*t2**3)/t2**4*z_log(t1*t6/t2**2,&
+ &1._ki)/3._ki
+ !
+ stemp3=(-6._ki*t1*t6*t2**2*t3*t5+t3**2*t2**4-3._ki*t1*t6*t2*t3*t5**&
+ &2+2._ki*t2**3*t3**2*t5+t2**2*t3**2*t5**2+t2**2*t3**2*t6*t5-t6*t2&
+ &*t3**3-2._ki*t2*t3**2*t6*t4*t5+3._ki*t2**2*t1**2*t6**2-3._ki*t3*t2&
+ &**3*t1*t6+3._ki*t1**2*t6**2*t5**2+t1*t6**2*t3**2+6._ki*t1**2*t6**&
+ &2*t5*t2-3._ki*t1*t6**2*t2*t3*t5+6._ki*t1*t6**2*t3*t4*t5-3._ki*t1*t&
+ &6**2*t2**2*t3+6._ki*t1*t6**2*t2*t3*t4-2._ki*t2**2*t3**2*t6*t4+t2*&
+ &*3*t3**2*t6-4._ki*t2*t3**2*t6**2*t4+t2**2*t3**2*t6**2+4._ki*t3**2&
+ &*t6**2*t4**2)/t3**2/t2**4*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/3._k&
+ &i+(2._ki*t1*t6**2*t3-12._ki*t6**2*t3*t4**2-3._ki*t6**2*t2**2*t3+12&
+ &._ki*t6**2*t2*t3*t4+3._ki*t6*t1*t2*t5**2+3._ki*t1*t6*t2**3+6._ki*t6&
+ &*t1*t2**2*t5+3._ki*t2*t3**2*t6-5._ki*t6*t3*t2**3+10._ki*t6*t2**2*t&
+ &3*t4-5._ki*t6*t5*t2**2*t3+10._ki*t6*t2*t3*t4*t5-6._ki*t2**4*t3-6._k&
+ &i*t2**2*t3*t5**2-17._ki*t2**3*t3*t5)/t2**4/t3/6._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(2)
+ !
+ stemp2=-(-36._ki*t6**2*t1*t5*t4+12._ki*t6**2*t1*t5*t2-12._ki*t1*t6**&
+ &2*t3-36._ki*t6**2*t2*t3*t4-24._ki*t6**2*t4**2*t5*t2+6._ki*t6**2*t2&
+ &**2*t4*t5+24._ki*t6**2*t5*t4**3+48._ki*t6**2*t3*t4**2+6._ki*t6**2*&
+ &t2**2*t3+2._ki*t1*t6*t2**3+2._ki*t6*t2**4*t4-4._ki*t6*t2**3*t4**2+&
+ &t4*t2**5+t4*t2**4*t5+t2**4*t3)/t2**6*z_log(t1*t6/t2**2,1._ki)/6.&
+ &_ki
+ !
+ stemp3=-(-2._ki*t6*t4*t2*t3+4._ki*t4**2*t6*t3+3._ki*t4*t2*t1*t6-t2**&
+ &2*t3*t4-t2*t3*t4*t5+3._ki*t4*t5*t1*t6-t2*t3**2+t1*t6*t3)/t2**3/t&
+ &3*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/6._ki-(-36._ki*t1**2*t6**2*t4&
+ &*t5+12._ki*t1**2*t6**2*t5*t2-12._ki*t1**2*t6**2*t3+18._ki*t6**2*t1&
+ &*t2**2*t4*t5-72._ki*t6**2*t1*t4**2*t5*t2+18._ki*t1*t6**2*t2**2*t3&
+ &+144._ki*t1*t6**2*t4**2*t3-108._ki*t1*t6**2*t2*t3*t4+72._ki*t6**2*&
+ &t1*t5*t4**3+4._ki*t6**2*t2**3*t3*t4+48._ki*t6**2*t4**3*t2*t3-24._k&
+ &i*t6**2*t2**2*t3*t4**2-32._ki*t6**2*t4**4*t3-8._ki*t6*t1*t2**3*t4&
+ &**2+4._ki*t6*t1*t4*t2**4+3._ki*t1*t4*t2**5+3._ki*t1*t4*t2**4*t5+t1&
+ &*t2**4*t3)/t2**6/t1/12._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(3)
+ !
+ stemp2=(24._ki*t6**2*t1*t5*t2-36._ki*t6**2*t1*t5*t4-12._ki*t1*t6**2*&
+ &t3+18._ki*t6**2*t2**2*t3-60._ki*t6**2*t2*t3*t4-48._ki*t6**2*t4**2*&
+ &t5*t2-6._ki*t6**2*t2**3*t5+48._ki*t6**2*t3*t4**2+24._ki*t6**2*t5*t&
+ &4**3+30._ki*t6**2*t2**2*t4*t5+2._ki*t1*t6*t2**3-2._ki*t6*t2**5+6._k&
+ &i*t6*t2**4*t4-4._ki*t6*t2**3*t4**2+t2**4*t3+t4*t2**4*t5+t4*t2**5&
+ &-t5*t2**5-t2**6)/t2**6*z_log(t1*t6/t2**2,1._ki)/6._ki
+ !
+ stemp3=(2._ki*t6*t2**2*t3-6._ki*t6*t4*t2*t3+t2**2*t3*t5+3._ki*t4*t2*&
+ &t1*t6-t2**2*t3*t4+4._ki*t4**2*t6*t3-t2*t3*t4*t5+3._ki*t4*t5*t1*t6&
+ &-3._ki*t5*t2*t1*t6+t2**3*t3-t2*t3**2-3._ki*t2**2*t1*t6+t1*t6*t3)/&
+ &t2**3/t3*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/6._ki+(24._ki*t1**2*t6&
+ &**2*t5*t2-36._ki*t1**2*t6**2*t4*t5-12._ki*t1**2*t6**2*t3-180._ki*t&
+ &1*t6**2*t2*t3*t4-18._ki*t6**2*t1*t5*t2**3+72._ki*t6**2*t1*t5*t4**&
+ &3-144._ki*t6**2*t1*t4**2*t5*t2+90._ki*t6**2*t1*t2**2*t4*t5+144._ki&
+ &*t1*t6**2*t4**2*t3+54._ki*t1*t6**2*t2**2*t3-32._ki*t6**2*t4**4*t3&
+ &+80._ki*t6**2*t4**3*t2*t3-4._ki*t6**2*t2**4*t3+28._ki*t6**2*t2**3*&
+ &t3*t4-72._ki*t6**2*t2**2*t3*t4**2-8._ki*t6*t1*t2**3*t4**2+12._ki*t&
+ &6*t1*t4*t2**4-4._ki*t6*t1*t2**5+3._ki*t1*t4*t2**4*t5+t1*t2**4*t3+&
+ &3._ki*t1*t4*t2**5-3._ki*t1*t5*t2**5-3._ki*t2**6*t1)/t2**6/t1/12._ki
+ !
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp2=(-4._ki*t1*t6**2-8._ki*t6**2*t2*t4+8._ki*t6**2*t4**2+2._ki*t6*&
+ &*2*t2**2-2._ki*t4*t6*t2**2+2._ki*t6*t2**2*t5-2._ki*t6*t3*t2-4._ki*t&
+ &6*t4*t5*t2+t2**3*t6+2._ki*t5*t2**3+2._ki*t5**2*t2**2)/t2**4*z_log&
+ &(t1*t6/t2**2,1._ki)/6._ki
+ !
+ stemp3=-(2._ki*t2**3*t3**2*t5+6._ki*t1**2*t6**2*t5*t2-6._ki*t1*t6*t2&
+ &**2*t3*t5+12._ki*t1*t6**2*t3*t4*t5+2._ki*t2**2*t3**2*t6*t5-4._ki*t&
+ &2*t3**2*t6*t4*t5-6._ki*t1*t6**2*t2*t3*t5+2._ki*t2**2*t3**2*t6**2-&
+ &8._ki*t2*t3**2*t6**2*t4+8._ki*t3**2*t6**2*t4**2+2._ki*t1*t6**2*t3*&
+ &*2-2._ki*t6*t2*t3**3+2._ki*t2**2*t3**2*t5**2+6._ki*t1**2*t6**2*t5*&
+ &*2-6._ki*t1*t6*t2*t3*t5**2+t2**3*t3**2*t6-2._ki*t2**2*t3**2*t6*t4&
+ &-3._ki*t1*t6**2*t2**2*t3+6._ki*t1*t6**2*t2*t3*t4)/t3**2/t2**4*q(3&
+ &,(t2*t3-t1*t6)/t2/t3,sign_arg)/6._ki-(4._ki*t1*t6**2*t3-24._ki*t6*&
+ &*2*t3*t4**2+24._ki*t6**2*t2*t3*t4-6._ki*t6**2*t2**2*t3+6._ki*t6*t1&
+ &*t2**2*t5+6._ki*t6*t1*t2*t5**2+6._ki*t2*t3**2*t6+20._ki*t6*t2*t3*t&
+ &4*t5-10._ki*t6*t5*t2**2*t3-5._ki*t6*t3*t2**3+10._ki*t6*t2**2*t3*t4&
+ &-12._ki*t2**2*t3*t5**2-12._ki*t2**3*t3*t5)/t2**4/t3/12._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4_glob)
+ !
+ case(2)
+ !
+ stemp4=2._ki*t1*t6*t2**2*t3*t5+4._ki*t6**2*t1*t2**2*t4*t5+6._ki*t1*t&
+ &6*t2*t3*t5**2-t4**2*t2**6/3._ki+t1**2*t6**2*t5*t2+16._ki*t2*t3**2&
+ &*t6**2*t4+20._ki*t6**2*t1*t5**2*t4**2-4._ki*t6**2*t4**3*t5*t2**2-&
+ &4._ki/3._ki*t6**2*t1*t4*t2**3+4._ki*t6**2*t4**4*t5*t2-48._ki*t6**2*&
+ &t4**3*t3*t5+8._ki*t6**2*t4**3*t5**2*t2-8._ki*t1*t6**2*t2*t3*t4-t2&
+ &**2*t1**2*t6**2/3._ki+4._ki*t1*t6**2*t3**2-8._ki*t1*t6**2*t2*t3*t5&
+ &+2._ki*t6**2*t2**3*t3*t4+12._ki*t6**2*t4**3*t2*t3-10._ki*t6**2*t2*&
+ &*2*t3*t4**2+4._ki/3._ki*t6*t1*t4*t2**4+6._ki*t2**2*t3**2*t6*t5-t3*&
+ &t2**3*t1*t6-2._ki*t6**2*t4**2*t5**2*t2**2+t6**2*t4**2*t5*t2**3+1&
+ &0._ki/3._ki*t6**2*t1*t4**2*t2**2+5._ki*t6*t4**2*t3*t2**3-4._ki*t6*t&
+ &4**3*t5**3*t2-8._ki*t6**2*t4**4*t5**2-2._ki*t6*t2*t3**3
+ !
+ stemp3=-2._ki*t2**2*t3**2*t6**2-4._ki/3._ki*t6**2*t4**4*t2**2-4._ki/3&
+ &._ki*t6*t4**3*t2**4+4._ki/3._ki*t6**2*t4**3*t2**3+2._ki/3._ki*t6*t4*&
+ &*2*t2**5-2._ki*t1**2*t6**2*t5**2-26._ki*t3**2*t6**2*t4**2+32._ki*t&
+ &1*t6**2*t3*t4*t5+4._ki*t6*t2**3*t3*t4*t5-10._ki*t6*t2**2*t3*t4**2&
+ &*t5+2._ki*t6*t4**2*t5**3*t2**2-2._ki*t6*t4**3*t5**2*t2**2-2._ki*t6&
+ &*t2**4*t3*t4+t6*t4**2*t5**2*t2**3-t6*t4**2*t5*t2**4+2._ki*t6*t4*&
+ &*3*t5*t2**3+2._ki*t1*t6**2*t2**2*t3-4._ki*t2**2*t3**2*t6*t4+stemp&
+ &4+4._ki*t6*t1*t4*t5**3*t2-2._ki*t6*t1*t4*t5*t2**3+2._ki*t6*t1*t4*t&
+ &5**2*t2**2-24._ki*t2*t3**2*t6*t4*t5-10._ki*t6**2*t1*t4**2*t5*t2-8&
+ &._ki*t6**2*t1*t4*t5**2*t2-30._ki*t6*t4**2*t3*t5**2*t2+12._ki*t6*t4&
+ &*t3*t5**2*t2**2-t6**2*t4**2*t2**4/3._ki+t2**3*t3**2*t6+40._ki*t6*&
+ &*2*t4**2*t3*t5*t2-8._ki*t6**2*t4*t3*t5*t2**2
+ !
+ stemp4=1._ki/t2**8*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=t4**2/t2**2*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/3._ki
+ !
+ stemp8=-3._ki*t6*t4**2*t5**2*t1**3*t2**2+12._ki*t6*t4**3*t5**2*t1**&
+ &3*t2-4._ki/3._ki*t6*t1**2*t4**2*t5*t3*t2**3-16._ki*t6*t1**2*t4**4*&
+ &t5*t3*t2+8._ki*t6*t1**2*t4**3*t5*t3*t2**2-2._ki*t6*t4**3*t3*t2**3&
+ &*t1**2+t6*t4**2*t2**4*t3*t1**2/3._ki-8._ki/3._ki*t6*t1**2*t4**5*t3&
+ &*t2-4._ki/3._ki*t4*t3**2*t2**3*t1**2*t6+t4**2*t3**2*t2**4*t1*t6/6&
+ &._ki+3._ki*t4**2*t5**2*t3*t2**3*t1**2+12._ki*t4*t3*t5**2*t1**3*t2*&
+ &*2+3._ki/2._ki*t6*t4**2*t5*t2**3*t1**3+6._ki*t4**3*t3**2*t2**2*t1*&
+ &*2-5._ki*t4**2*t3**2*t2**3*t1**2-2._ki*t4*t3*t2**4*t1**3+4._ki*t4*&
+ &*4*t3**3*t2**3+t2**3*t3**2*t1**3-4._ki/3._ki*t4**3*t2**4*t1**3-2.&
+ &_ki*t2*t3**3*t1**3-16._ki/3._ki*t4**5*t3**3*t2**2+t4**2*t3**3*t2**&
+ &5/6._ki-16._ki/3._ki*t6*t1*t4**5*t3**2*t2-15._ki*t6*t4**2*t3*t2**2*&
+ &t1**3+t6*t2**2*t3*t1**4
+ !
+ stemp7=-3._ki*t6*t3**2*t1**3*t2**2-12._ki*t6*t4**4*t5**2*t1**3+10._k&
+ &i*t6*t4**2*t5**2*t1**4+5._ki/3._ki*t6*t4**2*t2**2*t1**4-2._ki*t6*t&
+ &4**4*t2**2*t1**3-2._ki/3._ki*t6*t4*t2**3*t1**4+56._ki/3._ki*t6*t1**&
+ &2*t4**4*t3**2+8._ki/3._ki*t6*t1*t4**6*t3**2-39._ki*t6*t4**2*t1**3*&
+ &t3**2-t6*t1**3*t4**2*t2**4/2._ki+2._ki*t6*t1**3*t4**3*t2**3-12._ki&
+ &*t1*t4**3*t3**3*t2**2-2._ki*t1*t4**4*t3**2*t2**3+28._ki/3._ki*t1*t&
+ &4**4*t3**3*t2+4._ki/3._ki*t1*t4**5*t3**2*t2**2-12._ki*t1*t4**4*t3*&
+ &*2*t2**2*t5+6._ki*t1*t4**3*t3**2*t2**3*t5-12._ki*t6*t1**3*t2**2*t&
+ &3*t4*t5-24._ki*t4*t3**2*t1**3*t5*t2-30._ki*t4**2*t3**2*t5*t1**2*t&
+ &2**2-30._ki*t4**2*t3*t5**2*t1**3*t2-6._ki*t6*t4**3*t5*t2**2*t1**3&
+ &+18._ki*t6*t4**3*t3*t2*t1**3-4._ki*t6*t3*t5*t1**4*t2+60._ki*t6*t4*&
+ &*2*t3*t5*t1**3*t2+stemp8
+ !
+ stemp8=4._ki*t6*t4**4*t3**2*t2**2*t1+3._ki*t6*t4*t3*t2**3*t1**3+16.&
+ &_ki*t6*t3*t5*t1**4*t4-72._ki*t6*t4**3*t3*t5*t1**3-4._ki*t6*t2*t3*t&
+ &1**4*t4-t1*t4**2*t3**2*t2**4*t5+8._ki*t1*t4**5*t3**2*t5*t2+4._ki*&
+ &t6*t1**2*t4**4*t3*t2**2+36._ki*t4**3*t3**2*t5*t1**2*t2+10._ki*t6*&
+ &t1**2*t2**2*t3**2*t4**2+32._ki/3._ki*t6*t1**2*t4**5*t5*t3-4._ki/3.&
+ &_ki*t4**3*t3**2*t2**3*t1*t6+4._ki*t4**4*t5*t3*t2**2*t1**2+t4**2*t&
+ &5*t3*t2**4*t1**2+6._ki*t1**2*t2**3*t3**2*t4*t5-2._ki*t4**4*t3*t2*&
+ &*3*t1**2-t4**2*t3*t2**5*t1**2/2._ki-4._ki*t2**2*t3**2*t1**3*t4+t4&
+ &*t3**2*t2**4*t1**2-2._ki*t4**3*t5**2*t2**2*t1**3+2._ki*t4**2*t5**&
+ &3*t1**3*t2**2-2._ki/3._ki*t1*t4*t3**3*t2**4-t4**2*t3**2*t2**5*t1/&
+ &6._ki+2._ki*t4**3*t5*t2**3*t1**3-t4**2*t5*t2**4*t1**3
+ !
+ stemp6=-4._ki*t4**3*t5**3*t1**3*t2+5._ki*t4**2*t3**3*t1*t2**3+5._ki*&
+ &t4**2*t2**3*t1**3*t3+t4**3*t3**2*t2**4*t1+6._ki*t3**2*t5*t2**2*t&
+ &1**3-8._ki*t3**3*t2**2*t1**2*t4+13._ki*t3**3*t2*t1**2*t4**2+24._ki&
+ &*t6*t4*t3**2*t1**3*t2+6._ki*t6*t4**4*t5*t2*t1**3+stemp7+stemp8-2&
+ &4._ki*t6*t1**2*t4**3*t3**2*t2+2._ki/3._ki*t4**2*t2**5*t1**3+t1**2*&
+ &t2**3*t3**3+2._ki*t6*t3**2*t1**4-4._ki/3._ki*t4**3*t3**3*t2**4+8._k&
+ &i/3._ki*t4**6*t3**3*t2-10._ki*t4**2*t5*t3*t2**2*t1**3-4._ki*t4**3*&
+ &t5*t3*t2**3*t1**2+t4**2*t5**2*t2**3*t1**3-4._ki*t6*t4*t5**2*t1**&
+ &4*t2+2._ki*t4**3*t3*t2**4*t1**2+4._ki*t4*t5*t3*t2**3*t1**3-12._ki*&
+ &t4**3*t5**2*t3*t2**2*t1**2+12._ki*t4**4*t5**2*t3*t2*t1**2-5._ki*t&
+ &6*t4**2*t5*t2*t1**4+2._ki*t6*t4*t5*t2**2*t1**4
+ !
+ stemp7=t6/t1**3/t2**8
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(3)
+ !
+ stemp4=-72._ki*t6**2*t4**2*t3*t5*t2-t6*t1*t2**4*t5+2._ki*t6*t2**4*t&
+ &3*t5+32._ki*t6**2*t4*t3*t5*t2**2+2._ki*t1**2*t6**2*t5**2+2._ki/3._k&
+ &i*t6*t1*t2**5-2._ki/3._ki*t6**2*t1*t2**4+2._ki/3._ki*t6*t2**6*t4-t2&
+ &**7*t4/3._ki+2._ki*t6**2*t1*t5*t2**3+t6**2*t4*t2**4*t5-2._ki*t6**2&
+ &*t4*t5**2*t2**3-26._ki*t2*t3**2*t6**2*t4-t2**5*t6*t4*t5-20._ki*t6&
+ &**2*t1*t5**2*t4**2+8._ki*t6**2*t4**3*t5*t2**2+10._ki/3._ki*t6**2*t&
+ &1*t4*t2**3-4._ki*t6**2*t4**4*t5*t2+48._ki*t6**2*t4**3*t3*t5-16._ki&
+ &*t6**2*t4**3*t5**2*t2-4._ki*t6**2*t2**3*t3*t5+2._ki*t6*t4*t5**3*t&
+ &2**3+t6*t4*t5**2*t2**4-4._ki*t6**2*t1*t5**2*t2**2+6._ki*t6*t5**2*&
+ &t2**3*t3+t6*t1*t5**2*t2**3+2._ki*t6*t1*t5**3*t2**2+30._ki*t6*t4**&
+ &2*t3*t5**2*t2-30._ki*t6*t4*t3*t5**2*t2**2-4._ki*t6*t1*t4*t5**3*t2&
+ &+2._ki*t6*t1*t4*t5*t2**3-2._ki*t6*t1*t4*t5**2*t2**2-6._ki*t1*t6*t2&
+ &*t3*t5**2+2._ki*t6*t2*t3**3+6._ki*t2**2*t3**2*t6**2+5._ki/3._ki*t6*&
+ &*2*t4**2*t2**4+4._ki/3._ki*t6**2*t4**4*t2**2-t4*t2**5*t6**2/3._ki+&
+ &4._ki/3._ki*t6*t4**3*t2**4
+ !
+ stemp5=stemp4-8._ki/3._ki*t6**2*t4**3*t2**3-2._ki*t6*t4**2*t2**5-t6*&
+ &t3*t2**5+t4**2*t2**6/3._ki+24._ki*t2*t3**2*t6*t4*t5-10._ki*t6*t2**&
+ &3*t3*t4*t5+10._ki*t6*t2**2*t3*t4**2*t5+16._ki*t1*t6**2*t2*t3*t5-3&
+ &2._ki*t1*t6**2*t3*t4*t5+26._ki*t3**2*t6**2*t4**2+t2**2*t1**2*t6**&
+ &2/3._ki-2._ki*t2**3*t3**2*t6+t6**2*t2**4*t3-4._ki*t1*t6**2*t3**2+8&
+ &._ki*t6**2*t4**4*t5**2+8._ki*t1*t6**2*t2*t3*t4-2._ki*t1*t6*t2**2*t&
+ &3*t5-10._ki*t6**2*t1*t2**2*t4*t5+10._ki*t6**2*t1*t4**2*t5*t2
+ !
+ stemp3=stemp5+20._ki*t6**2*t1*t4*t5**2*t2-8._ki*t6**2*t2**3*t3*t4-1&
+ &2._ki*t6**2*t4**3*t2*t3+18._ki*t6**2*t2**2*t3*t4**2-4._ki/3._ki*t6*&
+ &t1*t4*t2**4+t3*t2**3*t1*t6+10._ki*t6**2*t4**2*t5**2*t2**2-5._ki*t&
+ &6**2*t4**2*t5*t2**3-10._ki/3._ki*t6**2*t1*t4**2*t2**2-5._ki*t6*t4*&
+ &*2*t3*t2**3+4._ki*t6*t4**3*t5**3*t2-6._ki*t6*t4**2*t5**3*t2**2+2.&
+ &_ki*t6*t4**3*t5**2*t2**2+5._ki*t6*t2**4*t3*t4-3._ki*t6*t4**2*t5**2&
+ &*t2**3+3._ki*t6*t4**2*t5*t2**4-2._ki*t6*t4**3*t5*t2**3-4._ki*t1*t6&
+ &**2*t2**2*t3+4._ki*t2**2*t3**2*t6*t4-t1**2*t6**2*t5*t2-12._ki*t2*&
+ &*2*t3**2*t6*t5
+ !
+ stemp4=1._ki/t2**8*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(-t2+t4)*t4/t2**2*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/3._ki
+ !
+ stemp8=12._ki*t6*t4**3*t5*t2**2*t1**3-18._ki*t6*t4**3*t3*t2*t1**3-1&
+ &5._ki/2._ki*t6*t4**2*t5*t2**3*t1**3+10._ki*t6*t4*t5**2*t1**4*t2+5.&
+ &_ki*t6*t4**2*t5*t2*t1**4-8._ki*t1*t4**5*t3**2*t5*t2+20._ki*t1*t4**&
+ &4*t3**2*t2**2*t5-18._ki*t1*t4**3*t3**2*t2**3*t5+30._ki*t4**2*t3*t&
+ &5**2*t1**3*t2+10._ki*t4**2*t5*t3*t2**2*t1**3+8._ki*t4**3*t5*t3*t2&
+ &**3*t1**2+2._ki/3._ki*t1**3*t2**6*t4-8._ki/3._ki*t4**6*t3**3*t2-t1*&
+ &*3*t2**5*t3-2._ki*t2**3*t3**2*t1**3-3._ki*t1**2*t2**3*t3**3+2._ki*&
+ &t2*t3**3*t1**3-6._ki*t6*t1**3*t2**3*t3*t5-4._ki/3._ki*t6*t1**2*t2*&
+ &*4*t3*t4*t5+t6*t1**2*t2**5*t3*t4/3._ki+24._ki*t4*t3**2*t1**3*t5*t&
+ &2-36._ki*t4**3*t3**2*t5*t1**2*t2-6._ki*t4**3*t3**2*t2**2*t1**2+9.&
+ &_ki*t4**2*t3**2*t2**3*t1**2+5._ki*t4*t3*t2**4*t1**3-5._ki*t6*t4*t5&
+ &*t2**2*t1**4+15._ki*t6*t4**2*t5**2*t1**3*t2**2-24._ki*t6*t4**3*t5&
+ &**2*t1**3*t2+7._ki*t1*t4**2*t3**2*t2**4*t5-4._ki*t4**4*t5*t3*t2**&
+ &2*t1**2-5._ki*t4**2*t5*t3*t2**4*t1**2-24._ki*t1**2*t2**3*t3**2*t4&
+ &*t5
+ !
+ stemp7=-28._ki/3._ki*t4**4*t3**3*t2**3-2._ki*t6*t3**2*t1**4-3._ki/2._k&
+ &i*t4**2*t3**3*t2**5-t6*t1**4*t2**4/3._ki+16._ki/3._ki*t4**3*t3**3*&
+ &t2**4-10._ki*t4*t5*t3*t2**3*t1**3+24._ki*t4**3*t5**2*t3*t2**2*t1*&
+ &*2-12._ki*t4**4*t5**2*t3*t2*t1**2-15._ki*t4**2*t5**2*t3*t2**3*t1*&
+ &*2-30._ki*t4*t3*t5**2*t1**3*t2**2+54._ki*t4**2*t3**2*t5*t1**2*t2*&
+ &*2+27._ki*t6*t4**2*t3*t2**2*t1**3+8._ki*t6*t3*t5*t1**4*t2-108._ki*&
+ &t6*t4**2*t3*t5*t1**3*t2-28._ki/3._ki*t6*t4**4*t3**2*t2**2*t1-12._k&
+ &i*t6*t4*t3*t2**3*t1**3-16._ki*t6*t3*t5*t1**4*t4-3._ki*t4**2*t5**2&
+ &*t2**3*t1**3+2._ki*t4**4*t3*t2**3*t1**2+5._ki/2._ki*t4**2*t3*t2**5&
+ &*t1**2+4._ki*t2**2*t3**2*t1**3*t4-4._ki*t4*t3**2*t2**4*t1**2+2._ki&
+ &*t4**3*t5**2*t2**2*t1**3-6._ki*t4**2*t5**3*t1**3*t2**2-4._ki*t4**&
+ &3*t3*t2**4*t1**2+11._ki/3._ki*t1*t4*t3**3*t2**4+7._ki/6._ki*t4**2*t&
+ &3**2*t2**5*t1-2._ki*t4**3*t5*t2**3*t1**3+3._ki*t4**2*t5*t2**4*t1*&
+ &*3+4._ki*t4**3*t5**3*t1**3*t2-13._ki*t4**2*t3**3*t1*t2**3-5._ki*t4&
+ &**2*t2**3*t1**3*t3+stemp8
+ !
+ stemp8=stemp7-3._ki*t4**3*t3**2*t2**4*t1-12._ki*t3**2*t5*t2**2*t1**&
+ &3+13._ki*t3**3*t2**2*t1**2*t4-13._ki*t3**3*t2*t1**2*t4**2+6._ki*t1&
+ &**3*t2**3*t3*t5**2+3._ki*t1**2*t2**4*t3**2*t5+t4*t5**2*t2**4*t1*&
+ &*3+2._ki*t4*t5**3*t2**3*t1**3-t1*t2**6*t3**2*t4/6._ki+56._ki/3._ki*&
+ &t1*t4**3*t3**3*t2**2+10._ki/3._ki*t1*t4**4*t3**2*t2**3-28._ki/3._ki&
+ &*t1*t4**4*t3**3*t2-4._ki/3._ki*t1*t4**5*t3**2*t2**2+2._ki*t2**4*t3&
+ &*t5*t1**3-t4*t2**5*t1**3*t5-t4*t2**6*t1**2*t3/2._ki-t6*t1**3*t4*&
+ &t2**5/2._ki+3._ki/2._ki*t6*t1**3*t2**4*t3-2._ki*t6*t2**2*t3*t1**4-2&
+ &._ki*t4**2*t2**5*t1**3-t1*t4*t3**2*t2**5*t5+t2**5*t3*t4*t1**2*t5&
+ &+3._ki*t4*t5**2*t2**4*t1**2*t3+16._ki/3._ki*t4**3*t3**2*t2**3*t1*t&
+ &6+22._ki/3._ki*t4*t3**2*t2**3*t1**2*t6-3._ki/2._ki*t4**2*t3**2*t2**&
+ &4*t1*t6+t4*t3**2*t2**5*t1*t6/6._ki+28._ki/3._ki*t6*t1**2*t4**2*t5*&
+ &t3*t2**3+80._ki/3._ki*t6*t1**2*t4**4*t5*t3*t2-24._ki*t6*t1**2*t4**&
+ &3*t5*t3*t2**2+6._ki*t6*t4**3*t3*t2**3*t1**2
+ !
+ stemp6=stemp8-7._ki/3._ki*t6*t4**2*t2**4*t3*t1**2+8._ki/3._ki*t6*t1**&
+ &2*t4**5*t3*t2-t1*t3**3*t2**5/3._ki+8._ki*t6*t1*t4**5*t3**2*t2+48.&
+ &_ki*t6*t1**3*t2**2*t3*t4*t5+t4*t3**3*t2**6/6._ki+4._ki/3._ki*t4**3*&
+ &t2**4*t1**3+t1**2*t2**5*t3**2/2._ki+8._ki*t4**5*t3**3*t2**2+9._ki*&
+ &t6*t3**2*t1**3*t2**2+12._ki*t6*t4**4*t5**2*t1**3-10._ki*t6*t4**2*&
+ &t5**2*t1**4-5._ki/3._ki*t6*t4**2*t2**2*t1**4+2._ki*t6*t4**4*t2**2*&
+ &t1**3+5._ki/3._ki*t6*t4*t2**3*t1**4-56._ki/3._ki*t6*t1**2*t4**4*t3*&
+ &*2-8._ki/3._ki*t6*t1*t4**6*t3**2+39._ki*t6*t4**2*t1**3*t3**2+5._ki/&
+ &2._ki*t6*t1**3*t4**2*t2**4+t6*t5*t2**3*t1**4-2._ki*t6*t1**4*t5**2&
+ &*t2**2-4._ki*t6*t1**3*t4**3*t2**3-2._ki/3._ki*t3**2*t2**4*t1**2*t6&
+ &+72._ki*t6*t4**3*t3*t5*t1**3+4._ki*t6*t2*t3*t1**4*t4-39._ki*t6*t4*&
+ &t3**2*t1**3*t2-6._ki*t6*t4**4*t5*t2*t1**3-20._ki/3._ki*t6*t1**2*t4&
+ &**4*t3*t2**2-26._ki*t6*t1**2*t2**2*t3**2*t4**2-32._ki/3._ki*t6*t1*&
+ &*2*t4**5*t5*t3+112._ki/3._ki*t6*t1**2*t4**3*t3**2*t2-3._ki*t6*t4*t&
+ &5**2*t2**3*t1**3+3._ki/2._ki*t6*t4*t5*t2**4*t1**3
+ !
+ stemp7=t6/t1**3/t2**8
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp1=(-6._ki*t1*t6**2*t3+6._ki*t6**2*t1*t5*t2-18._ki*t6**2*t1*t5*t&
+ &4-18._ki*t6**2*t2*t3*t4+3._ki*t6**2*t2**2*t4*t5+12._ki*t6**2*t5*t4&
+ &**3-12._ki*t6**2*t4**2*t5*t2+3._ki*t6**2*t2**2*t3+24._ki*t6**2*t3*&
+ &t4**2+2._ki*t1*t6*t2**3+2._ki*t6*t2**4*t4-4._ki*t6*t2**3*t4**2+t2*&
+ &*4*t3+t4*t2**4*t5)/t2**6*z_log(t1*t6/t2**2,1._ki)/6._ki+(3._ki*t4*&
+ &t5*t1*t6-t2*t3*t4*t5+t1*t6*t3-t2*t3**2-2._ki*t6*t4*t2*t3+4._ki*t4&
+ &**2*t6*t3)/t2**3/t3*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/6._ki+(-6.&
+ &_ki*t1**2*t6**2*t3+6._ki*t1**2*t6**2*t5*t2-18._ki*t1**2*t6**2*t4*t&
+ &5-54._ki*t1*t6**2*t2*t3*t4+36._ki*t6**2*t1*t5*t4**3+72._ki*t1*t6**&
+ &2*t4**2*t3-36._ki*t6**2*t1*t4**2*t5*t2+9._ki*t6**2*t1*t2**2*t4*t5&
+ &+9._ki*t1*t6**2*t2**2*t3-16._ki*t6**2*t4**4*t3+24._ki*t6**2*t4**3*&
+ &t2*t3-12._ki*t6**2*t2**2*t3*t4**2+2._ki*t6**2*t2**3*t3*t4+4._ki*t6&
+ &*t1*t4*t2**4-8._ki*t6*t1*t2**3*t4**2+t1*t2**4*t3+3._ki*t1*t4*t2**&
+ &4*t5)/t2**6/t1/12._ki
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ stemp5=-t2**8/3._ki-t2**6*t6**2/3._ki-4._ki/3._ki*t6*t4**3*t2**4-32._k&
+ &i*t6**2*t1*t4*t5**2*t2-30._ki*t6*t4**2*t3*t5**2*t2+48._ki*t6*t4*t&
+ &3*t5**2*t2**2+4._ki*t6*t1*t4*t5**3*t2+16._ki*t6*t2**3*t3*t4*t5-10&
+ &._ki*t6*t2**2*t3*t4**2*t5-t3*t2**3*t1*t6+2._ki/3._ki*t6*t2**7+3._ki&
+ &*t2**3*t3**2*t6+18._ki*t6**2*t2**3*t3*t4+12._ki*t6**2*t4**3*t2*t3&
+ &-26._ki*t6**2*t2**2*t3*t4**2+10._ki*t6*t4**2*t5**3*t2**2-2._ki*t6*&
+ &t4**3*t5**2*t2**2-8._ki*t6*t2**4*t3*t4+5._ki*t6*t4**2*t5**2*t2**3&
+ &-5._ki*t6*t4**2*t5*t2**4+2._ki*t6*t4**3*t5*t2**3
+ !
+ stemp4=stemp5+6._ki*t1*t6**2*t2**2*t3-4._ki*t2**2*t3**2*t6*t4+t1**2&
+ &*t6**2*t5*t2-6._ki*t6**2*t1*t5*t2**3-6._ki*t6**2*t4*t2**4*t5+12._k&
+ &i*t6**2*t4*t5**2*t2**3+36._ki*t2*t3**2*t6**2*t4+4._ki*t2**5*t6*t4&
+ &*t5+20._ki*t6**2*t1*t5**2*t4**2-16._ki/3._ki*t6**2*t1*t4*t2**3+4._k&
+ &i*t6**2*t4**4*t5*t2-48._ki*t6**2*t4**3*t3*t5+24._ki*t6**2*t4**3*t&
+ &5**2*t2+16._ki*t6**2*t2**3*t3*t5-8._ki*t6*t4*t5**3*t2**3-4._ki*t6*&
+ &t4*t5**2*t2**4+12._ki*t6**2*t1*t5**2*t2**2-18._ki*t6*t5**2*t2**3*&
+ &t3-2._ki*t6*t1*t5**2*t2**3-4._ki*t6*t1*t5**3*t2**2+2._ki*t6*t1*t2*&
+ &*4*t5-6._ki*t6*t2**4*t3*t5
+ !
+ stemp5=4._ki/3._ki*t6*t1*t4*t2**4+18._ki*t2**2*t3**2*t6*t5+104._ki*t6&
+ &**2*t4**2*t3*t5*t2-72._ki*t6**2*t4*t3*t5*t2**2-12._ki*t6**2*t4**3&
+ &*t5*t2**2-t4**2*t2**6/3._ki-2._ki*t6*t1*t4*t5*t2**3+2._ki*t6*t1*t4&
+ &*t5**2*t2**2+6._ki*t1*t6*t2*t3*t5**2-24._ki*t2*t3**2*t6*t4*t5-24.&
+ &_ki*t1*t6**2*t2*t3*t5+32._ki*t1*t6**2*t3*t4*t5+stemp4-26._ki*t6**2&
+ &*t4**2*t5**2*t2**2+13._ki*t6**2*t4**2*t5*t2**3+10._ki/3._ki*t6**2*&
+ &t1*t4**2*t2**2+5._ki*t6*t4**2*t3*t2**3-4._ki*t6*t4**3*t5**3*t2-8.&
+ &_ki*t1*t6**2*t2*t3*t4+2._ki*t1*t6*t2**2*t3*t5+16._ki*t6**2*t1*t2**&
+ &2*t4*t5-10._ki*t6**2*t1*t4**2*t5*t2
+ !
+ stemp3=stemp5+2._ki/3._ki*t2**7*t4-4._ki*t6**2*t2**4*t3+3._ki*t6*t3*t&
+ &2**5+t6**2*t2**5*t5+t6*t2**5*t5**2-t2**2*t1**2*t6**2/3._ki+4._ki*&
+ &t1*t6**2*t3**2-8._ki*t6**2*t4**4*t5**2-2._ki*t6*t2*t3**3-12._ki*t2&
+ &**2*t3**2*t6**2-13._ki/3._ki*t6**2*t4**2*t2**4-4._ki/3._ki*t6**2*t4&
+ &**4*t2**2+4._ki*t6**2*t4**3*t2**3+10._ki/3._ki*t6*t4**2*t2**5+2._ki&
+ &*t4*t2**5*t6**2-2._ki*t1**2*t6**2*t5**2-26._ki*t3**2*t6**2*t4**2-&
+ &4._ki/3._ki*t6*t1*t2**5+2._ki*t6**2*t1*t2**4-8._ki/3._ki*t6*t2**6*t4&
+ &-t5*t2**6*t6-2._ki*t6**2*t2**4*t5**2+2._ki*t6*t2**4*t5**3
+ !
+ stemp4=1._ki/t2**8*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=(-t2+t4)**2/t2**2*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/3._ki
+ !
+ stemp8=54._ki*t6*t4*t3**2*t1**3*t2+6._ki*t6*t4**4*t5*t2*t1**3+39._ki&
+ &/2._ki*t6*t4**2*t5*t2**3*t1**3+t3**3*t2**7/6._ki-10._ki*t4**2*t5*t&
+ &3*t2**2*t1**3-12._ki*t4**3*t5*t3*t2**3*t1**2+4._ki*t4**4*t5*t3*t2&
+ &**2*t1**2+2._ki/3._ki*t1**3*t2**7-112._ki/3._ki*t6*t1**2*t4**4*t5*t&
+ &3*t2+152._ki/3._ki*t6*t1**2*t4**3*t5*t3*t2**2-38._ki/3._ki*t6*t4**3&
+ &*t3*t2**3*t1**2-2._ki*t1**2*t2**5*t3**2+3._ki*t2**3*t3**2*t1**3+5&
+ &2._ki/3._ki*t4**4*t3**3*t2**3-6._ki*t2**5*t3*t4*t1**2*t5-18._ki*t4*&
+ &t5**2*t2**4*t1**2*t3-14._ki/3._ki*t1*t4**4*t3**2*t2**3+28._ki/3._ki&
+ &*t1*t4**4*t3**3*t2+4._ki/3._ki*t1*t4**5*t3**2*t2**2-6._ki*t2**4*t3&
+ &*t5*t1**3+4._ki*t4*t2**5*t1**3*t5+3._ki*t4*t2**6*t1**2*t3+t3**2*t&
+ &2**6*t1*t6/6._ki-6._ki*t6*t1**3*t2**4*t3-3._ki*t6*t5**2*t2**4*t1**&
+ &3-76._ki/3._ki*t1*t4**3*t3**3*t2**2+t6*t1**4*t2**4-t1**2*t2**7*t3&
+ &/2._ki+10._ki/3._ki*t4**2*t2**5*t1**3+5._ki/3._ki*t1*t3**3*t2**5-4._k&
+ &i/3._ki*t4**3*t2**4*t1**3-44._ki/3._ki*t4**3*t3**3*t2**4+6._ki*t1**&
+ &2*t2**3*t3**3-t2**6*t1**3*t5+2._ki*t5**3*t2**4*t1**3+41._ki/6._ki*&
+ &t4**2*t3**3*t2**5
+ !
+ stemp9=25._ki/3._ki*t6*t4**2*t2**4*t3*t1**2-8._ki/3._ki*t6*t1**2*t4**&
+ &5*t3*t2+28._ki/3._ki*t6*t1**2*t4**4*t3*t2**2+50._ki*t6*t1**2*t2**2&
+ &*t3**2*t4**2+3._ki*t6*t1**3*t4*t2**5+41._ki/6._ki*t4**2*t3**2*t2**&
+ &4*t1*t6-5._ki/3._ki*t4*t3**2*t2**5*t1*t6-39._ki*t6*t4**2*t3*t2**2*&
+ &t1**3-18._ki*t6*t4**3*t5*t2**2*t1**3+18._ki*t6*t4**3*t3*t2*t1**3+&
+ &48._ki*t4*t3*t5**2*t1**3*t2**2-24._ki*t4*t3**2*t1**3*t5*t2+36._ki*&
+ &t4**3*t3**2*t5*t1**2*t2-t1*t2**7*t3**2/6._ki+stemp8+13._ki*t4**2*&
+ &t5*t3*t2**4*t1**2+54._ki*t1**2*t2**3*t3**2*t4*t5+8._ki*t1*t4*t3**&
+ &2*t2**5*t5
+ !
+ stemp7=stemp9-25._ki*t1*t4**2*t3**2*t2**4*t5+8._ki*t1*t4**5*t3**2*t&
+ &5*t2-28._ki*t1*t4**4*t3**2*t2**2*t5+3._ki/2._ki*t6*t5*t2**5*t1**3+&
+ &t6*t1**2*t2**6*t3/3._ki+3._ki*t6*t2**2*t3*t1**4-18._ki*t6*t3**2*t1&
+ &**3*t2**2-12._ki*t6*t4**4*t5**2*t1**3+10._ki*t6*t4**2*t5**2*t1**4&
+ &+5._ki/3._ki*t6*t4**2*t2**2*t1**4-2._ki*t6*t4**4*t2**2*t1**3-8._ki/&
+ &3._ki*t6*t4*t2**3*t1**4+56._ki/3._ki*t6*t1**2*t4**4*t3**2+8._ki/3._k&
+ &i*t6*t1*t4**6*t3**2-39._ki*t6*t4**2*t1**3*t3**2-13._ki/2._ki*t6*t1&
+ &**3*t4**2*t2**4-3._ki*t6*t5*t2**3*t1**4+6._ki*t6*t1**4*t5**2*t2**&
+ &2+6._ki*t6*t1**3*t4**3*t2**3
+ !
+ stemp9=10._ki/3._ki*t3**2*t2**4*t1**2*t6+32._ki/3._ki*t6*t1**2*t4**5*&
+ &t5*t3-152._ki/3._ki*t6*t1**2*t4**3*t3**2*t2+18._ki*t6*t4*t5**2*t2*&
+ &*3*t1**3-9._ki*t6*t4*t5*t2**4*t1**3+24._ki*t6*t1**3*t2**3*t3*t5+3&
+ &2._ki/3._ki*t6*t1**2*t2**4*t3*t4*t5-8._ki/3._ki*t6*t1**2*t2**5*t3*t&
+ &4-44._ki/3._ki*t4**3*t3**2*t2**3*t1*t6-64._ki/3._ki*t4*t3**2*t2**3*&
+ &t1**2*t6+38._ki*t1*t4**3*t3**2*t2**3*t5-78._ki*t4**2*t3**2*t5*t1*&
+ &*2*t2**2-30._ki*t4**2*t3*t5**2*t1**3*t2+16._ki*t4*t5*t3*t2**3*t1*&
+ &*3-36._ki*t4**3*t5**2*t3*t2**2*t1**2+12._ki*t4**4*t5**2*t3*t2*t1*&
+ &*2+39._ki*t4**2*t5**2*t3*t2**3*t1**2-4._ki/3._ki*t6*t1**2*t2**5*t3&
+ &*t5
+ !
+ stemp8=stemp9-32._ki/3._ki*t6*t1*t4**5*t3**2*t2-108._ki*t6*t1**3*t2*&
+ &*2*t3*t4*t5-12._ki*t6*t3*t5*t1**4*t2+156._ki*t6*t4**2*t3*t5*t1**3&
+ &*t2+52._ki/3._ki*t6*t4**4*t3**2*t2**2*t1+27._ki*t6*t4*t3*t2**3*t1*&
+ &*3+16._ki*t6*t3*t5*t1**4*t4-72._ki*t6*t4**3*t3*t5*t1**3-4._ki*t6*t&
+ &2*t3*t1**4*t4+6._ki*t4**3*t3**2*t2**2*t1**2-13._ki*t4**2*t3**2*t2&
+ &**3*t1**2-8._ki*t4*t3*t2**4*t1**3+5._ki*t4**2*t5**2*t2**3*t1**3-2&
+ &._ki*t4**4*t3*t2**3*t1**2-13._ki/2._ki*t4**2*t3*t2**5*t1**2-4._ki*t&
+ &2**2*t3**2*t1**3*t4+9._ki*t4*t3**2*t2**4*t1**2-2._ki*t4**3*t5**2*&
+ &t2**2*t1**3
+ !
+ stemp6=stemp8+10._ki*t4**2*t5**3*t1**3*t2**2+6._ki*t4**3*t3*t2**4*t&
+ &1**2-32._ki/3._ki*t1*t4*t3**3*t2**4-25._ki/6._ki*t4**2*t3**2*t2**5*&
+ &t1+2._ki*t4**3*t5*t2**3*t1**3-5._ki*t4**2*t5*t2**4*t1**3-4._ki*t4*&
+ &*3*t5**3*t1**3*t2+25._ki*t4**2*t3**3*t1*t2**3+5._ki*t4**2*t2**3*t&
+ &1**3*t3+19._ki/3._ki*t4**3*t3**2*t2**4*t1+18._ki*t3**2*t5*t2**2*t1&
+ &**3-18._ki*t3**3*t2**2*t1**2*t4+13._ki*t3**3*t2*t1**2*t4**2+t2**6&
+ &*t3*t1**2*t5+3._ki*t2**5*t3*t5**2*t1**2-18._ki*t1**3*t2**3*t3*t5*&
+ &*2-12._ki*t1**2*t2**4*t3**2*t5-4._ki*t4*t5**2*t2**4*t1**3-8._ki*t4&
+ &*t5**3*t2**3*t1**3-t1*t2**6*t3**2*t5+4._ki/3._ki*t1*t2**6*t3**2*t&
+ &4-32._ki/3._ki*t4**5*t3**3*t2**2-t6*t1**3*t2**6/2._ki+8._ki/3._ki*t4&
+ &**6*t3**3*t2-2._ki*t2*t3**3*t1**3-5._ki/3._ki*t4*t3**3*t2**6+2._ki*&
+ &t6*t3**2*t1**4+3._ki*t1**3*t2**5*t3-8._ki/3._ki*t1**3*t2**6*t4+t5*&
+ &*2*t2**5*t1**3-16._ki*t6*t4*t5**2*t1**4*t2-5._ki*t6*t4**2*t5*t2*t&
+ &1**4+8._ki*t6*t4*t5*t2**2*t1**4-39._ki*t6*t4**2*t5**2*t1**3*t2**2&
+ &+36._ki*t6*t4**3*t5**2*t1**3*t2-100._ki/3._ki*t6*t1**2*t4**2*t5*t3&
+ &*t2**3+stemp7
+ !
+ stemp7=t6/t1**3/t2**8
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp2=-(12._ki*t6**2*t1*t5*t2-18._ki*t6**2*t1*t5*t4-6._ki*t1*t6**2*&
+ &t3-30._ki*t6**2*t2*t3*t4+12._ki*t6**2*t5*t4**3+15._ki*t6**2*t2**2*&
+ &t4*t5-24._ki*t6**2*t4**2*t5*t2+24._ki*t6**2*t3*t4**2+9._ki*t6**2*t&
+ &2**2*t3-3._ki*t6**2*t2**3*t5+2._ki*t1*t6*t2**3-2._ki*t6*t2**5+6._ki&
+ &*t6*t2**4*t4-4._ki*t6*t2**3*t4**2+t4*t2**4*t5-t5*t2**5+t2**4*t3)&
+ &/t2**6*z_log(t1*t6/t2**2,1._ki)/6._ki
+ !
+ stemp3=-(-3._ki*t5*t2*t1*t6+2._ki*t6*t2**2*t3+t2**2*t3*t5-6._ki*t6*t&
+ &4*t2*t3+4._ki*t4**2*t6*t3-t2*t3*t4*t5+3._ki*t4*t5*t1*t6+t1*t6*t3-&
+ &t2*t3**2)/t2**3/t3*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/6._ki-(12._k&
+ &i*t1**2*t6**2*t5*t2-18._ki*t1**2*t6**2*t4*t5-6._ki*t1**2*t6**2*t3&
+ &-9._ki*t6**2*t1*t5*t2**3+72._ki*t1*t6**2*t4**2*t3-90._ki*t1*t6**2*&
+ &t2*t3*t4+27._ki*t1*t6**2*t2**2*t3-72._ki*t6**2*t1*t4**2*t5*t2+45.&
+ &_ki*t6**2*t1*t2**2*t4*t5+36._ki*t6**2*t1*t5*t4**3-36._ki*t6**2*t2*&
+ &*2*t3*t4**2+40._ki*t6**2*t4**3*t2*t3+14._ki*t6**2*t2**3*t3*t4-2._k&
+ &i*t6**2*t2**4*t3-16._ki*t6**2*t4**4*t3-8._ki*t6*t1*t2**3*t4**2+12&
+ &._ki*t6*t1*t4*t2**4-4._ki*t6*t1*t2**5+3._ki*t1*t4*t2**4*t5+t1*t2**&
+ &4*t3-3._ki*t1*t5*t2**5)/t2**6/t1/12._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ temp0=(-(-2._ki*t1*t6**2+4._ki*t6**2*t4**2-4._ki*t6**2*t2*t4+t6**2*t&
+ &2**2-2._ki*t6*t4*t5*t2-t6*t3*t2+t6*t2**2*t5+t5**2*t2**2)/t2**4*z&
+ &_log(t1*t6/t2**2,1._ki)/3._ki+(6._ki*t1*t6**2*t3*t4*t5-3._ki*t1*t6*&
+ &t2*t3*t5**2+t1*t6**2*t3**2-3._ki*t1*t6**2*t2*t3*t5+3._ki*t1**2*t6&
+ &**2*t5**2+t2**2*t3**2*t6**2+t2**2*t3**2*t5**2-t6*t2*t3**3-4._ki*&
+ &t2*t3**2*t6**2*t4+t2**2*t3**2*t6*t5+4._ki*t3**2*t6**2*t4**2-2._ki&
+ &*t2*t3**2*t6*t4*t5)/t3**2/t2**4*q(3,(t2*t3-t1*t6)/t2/t3,sign_ar&
+ &g)/3._ki+(2._ki*t1*t6**2*t3-12._ki*t6**2*t3*t4**2+12._ki*t6**2*t2*t&
+ &3*t4-3._ki*t6**2*t2**2*t3+3._ki*t6*t1*t2*t5**2-5._ki*t6*t5*t2**2*t&
+ &3+10._ki*t6*t2*t3*t4*t5+3._ki*t2*t3**2*t6-6._ki*t2**2*t3*t5**2)/t2&
+ &**4/t3/6)/t2
+ !
+ end select
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par2_glob)
+ !
+ case(1)
+ !
+ select case(par3_glob)
+ !
+ case(1)
+ !
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ stemp2=-(4._ki*t6**2*t2*t3*t4-2._ki*t6*t4*t5**2*t2**2-4._ki*t6*t2**3&
+ &*t4*t5-2._ki*t6*t2**2*t3*t5-2._ki*t6**2*t1*t5*t2-2._ki*t6*t3*t2**3&
+ &+t6**2*t5*t2**3-2._ki*t6**2*t2**2*t3+3._ki*t5*t2**5+t2**5*t6+t6**&
+ &3*t2**3-8._ki*t6**3*t4**3-4._ki*t6**2*t5*t2**2*t4+4._ki*t6**2*t5*t&
+ &2*t4**2+12._ki*t6**3*t4**2*t2+t6*t2**3*t5**2-2._ki*t6*t2**4*t4+t5&
+ &**3*t2**3+t2**6+3._ki*t5**2*t2**4+t6**2*t2**4+2._ki*t6*t2**4*t5+1&
+ &2._ki*t6**3*t1*t4-6._ki*t6**3*t2**2*t4-4._ki*t6**2*t2**3*t4+4._ki*t&
+ &6**2*t2**2*t4**2-6._ki*t6**3*t1*t2-2._ki*t6**2*t1*t2**2)/t2**6*z_&
+ &log(t1*t6/t2**2,1._ki)/4._ki
+ !
+ stemp4=-(2._ki*t1**2*t6**2*t2**2-2._ki*t1*t6**2*t2**2*t3+t3**2*t6**&
+ &2*t2**2+4._ki*t1**2*t6**2*t5*t2+4._ki*t1*t6**2*t2*t3*t4-2._ki*t3*t&
+ &1*t6**2*t5*t2-4._ki*t3**2*t6**2*t4*t2+2._ki*t6**2*t1**2*t5**2+4._k&
+ &i*t3*t6**2*t4*t1*t5+2._ki*t3**2*t1*t6**2+4._ki*t3**2*t6**2*t4**2-&
+ &2._ki*t6*t1*t3*t2**3-4._ki*t1*t6*t2**2*t3*t5-2._ki*t6*t1*t3*t5**2*&
+ &t2-2._ki*t2*t3**3*t6+t3**2*t2**4+2._ki*t2**3*t3**2*t5+t3**2*t5**2&
+ &*t2**2)*(2._ki*t6*t3*t4+2._ki*t1*t6*t5-t3*t6*t2+2._ki*t1*t6*t2-t3*&
+ &t2*t5-t2**2*t3)/t3**3/t2**6*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/4&
+ &._ki
+ !
+ stemp7=2._ki*t6*t1*t3*t2**3*t5**2-11._ki/12._ki*t3**2*t2**3*t5**3+2.&
+ &_ki*t6*t1*t5*t2**4*t3+2._ki/3._ki*t6*t1*t3*t2**2*t5**3+7._ki/6._ki*t&
+ &6*t3**2*t2**3*t4*t5-11._ki/24._ki*t6**3*t2**3*t3**2-17._ki/6._ki*t6&
+ &**2*t2*t3**2*t4**2*t5+17._ki/6._ki*t6**2*t3**2*t4*t5*t2**2+11._ki/&
+ &3._ki*t6**3*t3**2*t4**3+t3**3*t2**3*t6/12._ki+5._ki/3._ki*t6*t3**2*&
+ &t2**2*t4*t5**2-11._ki/12._ki*t3**2*t2**6+t6**2*t1*t2**4*t3/2._ki+1&
+ &7._ki/6._ki*t6**2*t2**3*t3**2*t4-11._ki/6._ki*t6**2*t2*t3**3*t4-17.&
+ &_ki/24._ki*t6**2*t2**3*t3**2*t5-17._ki/6._ki*t6**2*t3**2*t4**2*t2**&
+ &2+2._ki/3._ki*t6*t1*t3*t2**5+5._ki/4._ki*t6**3*t1*t3**2*t2-5._ki/2._k&
+ &i*t6**3*t3**2*t1*t4-11._ki/2._ki*t6**3*t3**2*t2*t4**2
+ !
+ stemp6=stemp7+11._ki/4._ki*t6**3*t2**2*t3**2*t4-t6**2*t1**2*t5**2*t&
+ &2**2-t3**2*t2**2*t1*t6**2/12._ki+7._ki/6._ki*t6*t3**3*t2**2*t5-5._k&
+ &i/6._ki*t6*t3**2*t2**3*t5**2+5._ki/3._ki*t6*t2**4*t3**2*t4-7._ki/12&
+ &._ki*t6*t2**4*t3**2*t5-t6**2*t1**2*t5*t2**3-t6**2*t1**2*t2*t5**3&
+ &/3._ki-67._ki/12._ki*t3**2*t2**4*t5**2-17._ki/24._ki*t6**2*t3**2*t2*&
+ &*4-5._ki/6._ki*t6*t2**5*t3**2+11._ki/12._ki*t6**2*t2**2*t3**3+t6**2&
+ &*t1*t2**3*t3*t5-59._ki/12._ki*t2**5*t3**2*t5-t1**2*t2**4*t6**2/3.&
+ &_ki-t6**2*t1*t2*t3*t4*t5**2-t6**2*t1*t2*t5*t3**2/12._ki-2._ki*t6**&
+ &2*t1*t3*t4*t5*t2**2-t6**2*t1*t2**3*t3*t4+t6**2*t1*t5**2*t3*t2**&
+ &2/2._ki
+ !
+ stemp7=1._ki/t3**2/t2**6
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(2)
+ !
+ stemp2=-(2._ki*t3*t5*t2**5+t4*t2**7-36._ki*t6**3*t1**2*t5+2._ki*t6*t&
+ &1*t2**5-216._ki*t1*t6**3*t4*t5*t2-6._ki*t3*t4*t6*t2**4-96._ki*t6**&
+ &3*t4**4*t5-12._ki*t6**2*t2**4*t4**2-240._ki*t6**3*t3*t4**3+12._ki*&
+ &t6**3*t3*t2**3+2._ki*t6*t2**5*t3+12._ki*t6**2*t2**3*t4**3-18._ki*t&
+ &6**2*t1*t2**3*t4+288._ki*t6**3*t1*t5*t4**2+36._ki*t1*t6**3*t2**2*&
+ &t5+12._ki*t6**3*t2**3*t5*t4-72._ki*t6**3*t2**2*t5*t4**2+2._ki*t6*t&
+ &2**5*t4*t5-4._ki*t6*t2**4*t4**2*t5+180._ki*t6**3*t4*t1*t3+288._ki*&
+ &t6**3*t3*t2*t4**2-108._ki*t6**3*t3*t2**2*t4+2._ki*t6*t1*t2**4*t5-&
+ &72._ki*t6**3*t3*t2*t1+144._ki*t6**3*t4**3*t5*t2+2._ki*t6*t2**6*t4-&
+ &4._ki*t6*t2**5*t4**2+3._ki*t6**2*t2**5*t4+2._ki*t2**6*t4*t5+2._ki*t&
+ &3*t2**6+t4*t5**2*t2**5+6._ki*t6**2*t1*t2**4)/t2**8*z_log(t1*t6/t&
+ &2**2,1._ki)/12._ki
+ !
+ stemp4=(-4._ki*t3*t4*t5**2*t2*t1*t6+2._ki*t3**2*t2**3*t4*t5+4._ki*t1&
+ &**2*t6**2*t3*t2-6._ki*t1*t6*t3**2*t2**2-6._ki*t2*t6*t3**3*t4-2._ki&
+ &*t2*t1*t6**2*t3**2+6._ki*t4*t2**2*t1**2*t6**2+3._ki*t2**2*t4*t3**&
+ &2*t6**2+2._ki*t2**3*t4*t6*t3**2-4._ki*t2**2*t4**2*t6*t3**2+t3**2*&
+ &t4*t5**2*t2**2+12._ki*t4**3*t3**2*t6**2+2._ki*t4*t5*t3**2*t6*t2**&
+ &2-8._ki*t2**2*t4*t1*t6**2*t3+16._ki*t2*t4**2*t1*t6**2*t3+2._ki*t2*&
+ &*3*t3**3+t4*t3**2*t2**4+2._ki*t2**2*t5*t3**3+2._ki*t6*t3**3*t2**2&
+ &+4._ki*t5*t1**2*t6**2*t3+6._ki*t1*t6**2*t3**2*t4-12._ki*t2*t4**2*t&
+ &3**2*t6**2+6._ki*t4*t5**2*t6**2*t1**2+12._ki*t4*t5*t2*t6**2*t1**2&
+ &-4._ki*t4*t3*t2**3*t1*t6-6._ki*t2*t5*t1*t6*t3**2-8._ki*t3*t4*t5*t2&
+ &*t6**2*t1+16._ki*t3*t4**2*t5*t6**2*t1-4._ki*t3**2*t4**2*t5*t2*t6-&
+ &8._ki*t4*t3*t5*t2**2*t1*t6)/t2**5/t3**2*q(4,(t2*t3-t1*t6)/t2/t3,&
+ &sign_arg)/12._ki
+ !
+ stemp7=-5._ki/36._ki*t1*t2**6*t3*t4*t5-7._ki/36._ki*t1*t2**5*t3*t4*t5&
+ &**2-7._ki/18._ki*t6*t1*t2**6*t4*t3+t6*t1**2*t2**4*t4*t5**2/6._ki+2&
+ &._ki/3._ki*t6*t1*t4*t3**2*t2**4-2._ki/9._ki*t6*t1*t2**5*t3**2+t6*t1&
+ &**2*t2**5*t3/9._ki+t6**3*t3*t5*t1**3-25._ki/2._ki*t6**3*t1**2*t4*t&
+ &3**2+5._ki*t6**3*t1**2*t2*t3**2+110._ki/3._ki*t6**3*t1*t4**3*t3**2&
+ &+t1*t3**2*t2**6/36._ki+7._ki/9._ki*t6*t1*t2**5*t4**2*t3+15._ki*t6**&
+ &3*t1**2*t3*t4*t5*t2+3._ki/2._ki*t6**2*t1*t3*t2**4*t4**2-3._ki/2._ki&
+ &*t6**2*t1*t3*t2**3*t4**3-11._ki/6._ki*t6**3*t1*t3*t2**3*t5*t4+3._k&
+ &i/4._ki*t6**2*t1**2*t3*t2**3*t4-3._ki/8._ki*t6**2*t1*t3*t2**5*t4+t&
+ &6*t1**2*t2**6*t4/6._ki
+ !
+ stemp6=stemp7-t6**3*t4*t3**2*t2**4/4._ki-11._ki/6._ki*t6**3*t1*t3**2&
+ &*t2**3-6._ki*t6**3*t3**2*t2**2*t4**3-t6**2*t1**2*t3*t2**4/4._ki-4&
+ &4._ki*t6**3*t1*t2*t4**2*t3**2+11._ki*t6**3*t1*t3*t2**2*t5*t4**2+2&
+ &._ki*t6**3*t3**2*t2**3*t4**2+8._ki*t6**3*t3**2*t4**4*t2-2._ki/9._ki&
+ &*t1*t2**5*t3**2*t5-7._ki/36._ki*t1*t2**7*t3*t4+t6*t1**2*t2**5*t4*&
+ &t5/3._ki+44._ki/3._ki*t6**3*t1*t3*t4**4*t5+33._ki/2._ki*t6**3*t1*t2*&
+ &*2*t4*t3**2-20._ki*t6**3*t1**2*t3*t5*t4**2-5._ki/2._ki*t6**3*t1**2&
+ &*t3*t2**2*t5+t6*t1**2*t2**4*t5*t3/9._ki-22._ki*t6**3*t1*t3*t4**3*&
+ &t5*t2+7._ki/9._ki*t6*t1*t2**4*t3*t4**2*t5-7._ki/18._ki*t6*t1*t2**5*&
+ &t3*t4*t5-4._ki*t6**3*t3**2*t4**5
+ !
+ stemp7=1._ki/t1/t2**8/t3
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(3)
+ !
+ stemp2=-(-2._ki*t2**6*t4*t5+360._ki*t1*t6**3*t4*t5*t2+6._ki*t3*t4*t6&
+ &*t2**4+18._ki*t6**2*t1*t2**3*t4-6._ki*t6*t2**5*t4*t5+4._ki*t6*t2**&
+ &4*t4**2*t5+96._ki*t6**3*t4**4*t5+24._ki*t6**2*t2**4*t4**2-12._ki*t&
+ &6**2*t2**3*t4**3-6._ki*t6*t2**6*t4+4._ki*t6*t2**5*t4**2-t4*t2**7-&
+ &15._ki*t6**2*t2**5*t4+240._ki*t6**3*t3*t4**3-48._ki*t6**3*t3*t2**3&
+ &-2._ki*t3*t5*t2**5+2._ki*t5*t2**7-2._ki*t3*t2**6+t5**2*t2**6+2._ki*&
+ &t6*t2**7-288._ki*t6**3*t1*t5*t4**2-108._ki*t1*t6**3*t2**2*t5-84._k&
+ &i*t6**3*t2**3*t5*t4+216._ki*t6**3*t2**2*t5*t4**2-240._ki*t6**3*t4&
+ &**3*t5*t2+108._ki*t6**3*t3*t2*t1-180._ki*t6**3*t4*t1*t3-432._ki*t6&
+ &**3*t3*t2*t4**2+252._ki*t6**3*t3*t2**2*t4-2._ki*t6*t1*t2**4*t5-t4&
+ &*t5**2*t2**5-12._ki*t6**2*t1*t2**4-4._ki*t6*t2**5*t3+36._ki*t6**3*&
+ &t1**2*t5+12._ki*t6**3*t5*t2**4+2._ki*t6*t2**6*t5-2._ki*t6*t1*t2**5&
+ &+t2**8+3._ki*t6**2*t2**6)/t2**8*z_log(t1*t6/t2**2,1._ki)/12._ki
+ !
+ stemp6=t3**2*t5**2*t2**3/12._ki+t2**2*t1**2*t6**2*t5-t1**2*t6**2*t&
+ &3*t2/3._ki+t1*t6*t3**2*t2**2/2._ki+t5*t3**2*t6*t2**3/6._ki-t1*t6**&
+ &2*t3**2*t4/2._ki+t2*t6*t3**3*t4/2._ki+t2*t1*t6**2*t3**2/3._ki-t4*t&
+ &2**2*t1**2*t6**2/2._ki-t5*t1**2*t6**2*t3/3._ki-t4*t5**2*t6**2*t1*&
+ &*2/2._ki+2._ki*t2*t4**2*t3**2*t6**2-5._ki/4._ki*t2**2*t4*t3**2*t6**&
+ &2-t2**3*t4*t6*t3**2/2._ki+t2**2*t4**2*t6*t3**2/3._ki-t3**2*t2**3*&
+ &t4*t5/6._ki+t3**2*t2**3*t6**2/4._ki-4._ki/3._ki*t3*t4**2*t5*t6**2*t&
+ &1-t3*t2**2*t5**2*t1*t6/3._ki-2._ki/3._ki*t3*t5*t2**3*t1*t6-2._ki/3.&
+ &_ki*t3*t2**2*t6**2*t5*t1+t3**2*t2**5/12._ki
+ !
+ stemp5=stemp6-t2**3*t3**3/6._ki-2._ki/3._ki*t3*t2**3*t6**2*t1-t3*t2*&
+ &*4*t1*t6/3._ki+t2*t5**2*t1**2*t6**2/2._ki+t3**2*t4**2*t5*t2*t6/3.&
+ &_ki+t3*t4*t5**2*t2*t1*t6/3._ki+2._ki*t2**2*t4*t1*t6**2*t3+t3**2*t2&
+ &**4*t6/6._ki-t6*t3**3*t2**2/3._ki-t4**3*t3**2*t6**2-t4*t3**2*t2**&
+ &4/12._ki-t2**2*t5*t3**3/6._ki+t2**3*t1**2*t6**2/2._ki+t3**2*t2**4*&
+ &t5/6._ki-4._ki/3._ki*t2*t4**2*t1*t6**2*t3+2._ki/3._ki*t4*t3*t5*t2**2&
+ &*t1*t6-t4*t5*t2*t6**2*t1**2+t4*t3*t2**3*t1*t6/3._ki+t2*t5*t1*t6*&
+ &t3**2/2._ki+2._ki*t3*t4*t5*t2*t6**2*t1-t4*t5*t3**2*t6*t2**2/2._ki-&
+ &t3**2*t4*t5**2*t2**2/12._ki
+ !
+ stemp6=1._ki/t3**2/t2**5*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)
+ !
+ stemp4=stemp5*stemp6
+ !
+ stemp7=-t6**3*t3**2*t2**5/4._ki+3._ki/2._ki*t6**2*t1*t3*t2**3*t4**3-&
+ &3._ki*t6**2*t1*t3*t2**4*t4**2-t6*t1**2*t2**4*t5*t3/9._ki-44._ki/3.&
+ &_ki*t6**3*t1*t3*t4**4*t5-77._ki/2._ki*t6**3*t1*t2**2*t4*t3**2+20._k&
+ &i*t6**3*t1**2*t3*t5*t4**2+15._ki/2._ki*t6**3*t1**2*t3*t2**2*t5-3.&
+ &_ki/4._ki*t6**2*t1**2*t3*t2**3*t4+15._ki/8._ki*t6**2*t1*t3*t2**5*t4&
+ &-t6*t1**2*t2**5*t4*t5/3._ki-t6*t1**2*t2**4*t4*t5**2/6._ki+77._ki/6&
+ &._ki*t6**3*t1*t3*t2**3*t5*t4+110._ki/3._ki*t6**3*t1*t3*t4**3*t5*t2&
+ &+66._ki*t6**3*t1*t2*t4**2*t3**2-7._ki/18._ki*t6*t1*t2**6*t3*t5-33.&
+ &_ki*t6**3*t1*t3*t2**2*t5*t4**2-t1*t3**2*t2**6/36._ki+t6*t1**2*t2*&
+ &*7/6._ki-25._ki*t6**3*t1**2*t3*t4*t5*t2-11._ki/6._ki*t6**3*t1*t3*t5&
+ &*t2**4+7._ki/6._ki*t6*t1*t2**6*t4*t3-2._ki/3._ki*t6*t1*t4*t3**2*t2*&
+ &*4-7._ki/9._ki*t6*t1*t2**5*t4**2*t3+4._ki*t6**3*t3**2*t4**5
+ !
+ stemp6=stemp7-7._ki/36._ki*t1*t2**8*t3-7._ki/9._ki*t6*t1*t2**4*t3*t4*&
+ &*2*t5+7._ki/6._ki*t6*t1*t2**5*t3*t4*t5+5._ki/36._ki*t1*t2**6*t3*t4*&
+ &t5+7._ki/36._ki*t1*t2**5*t3*t4*t5**2-t6*t1**2*t2**5*t3/9._ki-3._ki/&
+ &8._ki*t6**2*t2**6*t1*t3+t6*t1**2*t5*t2**6/3._ki+t6*t1**2*t2**5*t5&
+ &**2/6._ki-7._ki/18._ki*t6*t1*t3*t2**7-t6**3*t3*t5*t1**3+25._ki/2._ki&
+ &*t6**3*t1**2*t4*t3**2-15._ki/2._ki*t6**3*t1**2*t2*t3**2-110._ki/3.&
+ &_ki*t6**3*t1*t4**3*t3**2+9._ki/4._ki*t6**3*t4*t3**2*t2**4+22._ki/3.&
+ &_ki*t6**3*t1*t3**2*t2**3+14._ki*t6**3*t3**2*t2**2*t4**3+t6**2*t1*&
+ &*2*t3*t2**4/2._ki-8._ki*t6**3*t3**2*t2**3*t4**2-12._ki*t6**3*t3**2&
+ &*t4**4*t2-t6*t1**2*t2**6*t4/6._ki+2._ki/9._ki*t1*t2**5*t3**2*t5+7.&
+ &_ki/36._ki*t1*t2**7*t3*t4+4._ki/9._ki*t6*t1*t2**5*t3**2-7._ki/36._ki*&
+ &t1*t2**6*t3*t5**2-5._ki/36._ki*t1*t3*t2**7*t5
+ !
+ stemp7=1._ki/t1/t2**8/t3
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp2=(-18._ki*t6**3*t1*t2+36._ki*t6**3*t1*t4-18._ki*t6**3*t2**2*t4&
+ &+3._ki*t5**3*t2**3+6._ki*t5**2*t2**4+3._ki*t5*t2**5+2._ki*t6**2*t2*&
+ &*4+t2**5*t6+3._ki*t6**3*t2**3-24._ki*t6**3*t4**3+36._ki*t6**3*t4**&
+ &2*t2-4._ki*t6**2*t1*t2**2-6._ki*t6**2*t2**2*t3+8._ki*t6**2*t2**2*t&
+ &4**2-8._ki*t6**2*t2**3*t4+3._ki*t6**2*t5*t2**3+3._ki*t6*t2**3*t5**&
+ &2+4._ki*t6*t2**4*t5-2._ki*t6*t2**4*t4-4._ki*t6*t3*t2**3-6._ki*t6**2&
+ &*t1*t5*t2-12._ki*t6**2*t5*t2**2*t4+12._ki*t6**2*t5*t2*t4**2+12._ki&
+ &*t6**2*t2*t3*t4-6._ki*t6*t4*t5**2*t2**2-8._ki*t6*t2**3*t4*t5-6._ki&
+ &*t6*t2**2*t3*t5)/t2**6*z_log(t1*t6/t2**2,1._ki)/12._ki
+ !
+ stemp6=t1**3*t6**3*t5**3+2._ki*t3**3*t6**3*t4**3-t3**3*t6*t2**5/12&
+ &._ki-3._ki/2._ki*t6**2*t5*t2*t1*t3**3-3._ki/2._ki*t2*t3*t1**2*t6**3*&
+ &t5**2+t2**2*t3**2*t1*t6**2*t5**2+4._ki*t3**2*t1*t6**3*t5*t4**2+t&
+ &2**2*t3**2*t1*t6*t5**3-3._ki/2._ki*t2*t3*t1**2*t6**2*t5**3+3._ki*t&
+ &3*t1**2*t6**3*t4*t5**2+t2**2*t3**2*t1*t6**3*t5-4._ki*t2*t3**2*t1&
+ &*t6**3*t5*t4-2._ki*t2*t3**2*t1*t6**2*t4*t5**2+t2**2*t3**3*t6**2*&
+ &t5*t4-t2*t3**3*t6**2*t5*t4**2+t2**2*t3**3*t6*t4*t5**2/2._ki+4._ki&
+ &*t6**3*t1**2*t3*t4*t5*t2+2._ki/3._ki*t3**3*t2**3*t6*t4*t5+t3*t2**&
+ &2*t6**3*t4*t1**2-2._ki/3._ki*t3**2*t2**3*t1*t6**2*t4-3._ki/2._ki*t3&
+ &*t2**3*t1**2*t6**2*t5+t3**2*t2**4*t1*t6*t5+2._ki*t5**2*t2*t1**3*&
+ &t6**3+2._ki/3._ki*t3**3*t2**3*t6**2*t4-t3**3*t2**4*t6*t5/3._ki-2._k&
+ &i/3._ki*t3**3*t2**2*t6**2*t4**2-t3*t2**3*t6**3*t1**2/2._ki+t3**2*&
+ &t2**4*t1*t6**2/3._ki
+ !
+ stemp5=stemp6+t3**3*t2**4*t6*t4/6._ki+t6*t5*t2**2*t3**4/2._ki-3._ki*&
+ &t2*t3**3*t6**3*t4**2+3._ki/2._ki*t2**2*t3**3*t6**3*t4+t3**3*t6**3&
+ &*t1*t4+t2**2*t1**3*t6**3*t5+t6**3*t5*t1**2*t3**2-t2**3*t3**3*t6&
+ &*t5**2/4._ki-t2**3*t3**3*t6**2*t5/4._ki+2._ki/3._ki*t6**3*t1**2*t2*&
+ &t3**2+2._ki/3._ki*t6**3*t1*t3**2*t2**3-t3**3*t2*t6**3*t1/2._ki-t3*&
+ &*4*t2*t6**2*t4-t6**2*t2**2*t1*t3**3-t3**3*t5**2*t2**4/2._ki-8._ki&
+ &/3._ki*t6**3*t1*t2**2*t4*t3**2-2._ki*t6**3*t1**2*t3*t2**2*t5+8._ki&
+ &/3._ki*t6**3*t1*t2*t4**2*t3**2-t3**3*t2**5*t5/4._ki-t2**3*t3**3*t&
+ &5**3/4._ki-t3**3*t2**4*t6**2/6._ki+4._ki/3._ki*t3**2*t2**3*t6**2*t5&
+ &*t1-8._ki/3._ki*t3**2*t2**2*t6**2*t4*t5*t1-3._ki*t3*t5**2*t2**2*t1&
+ &**2*t6**2+2._ki*t3**2*t5**2*t2**3*t1*t6+t6*t2**3*t3**4/3._ki+t3**&
+ &4*t2**2*t6**2/2._ki-t2**3*t3**3*t6**3/4._ki
+ !
+ stemp6=1._ki/t2**6/t3**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)
+ !
+ stemp4=stemp5*stemp6
+ !
+ stemp7=11._ki/24._ki*t6**3*t2**3*t3**2-11._ki/3._ki*t6**3*t3**2*t4**3&
+ &-11._ki/12._ki*t6**2*t2**2*t3**3+17._ki/36._ki*t6**2*t3**2*t2**4+5.&
+ &_ki/18._ki*t6*t2**5*t3**2+t6**2*t1*t2*t5*t3**2/12._ki+4._ki/3._ki*t6&
+ &**2*t1*t3*t4*t5*t2**2+t6**2*t1*t2**3*t3*t4/3._ki-t6**2*t1*t5**2*&
+ &t3*t2**2/2._ki+t6**2*t1**2*t5*t2**3/3._ki+t6**2*t1**2*t2*t5**3/3.&
+ &_ki-t6**2*t1*t2**4*t3/6._ki-17._ki/9._ki*t6**2*t2**3*t3**2*t4+11._ki&
+ &/6._ki*t6**2*t2*t3**3*t4+17._ki/24._ki*t6**2*t2**3*t3**2*t5+17._ki/&
+ &9._ki*t6**2*t3**2*t4**2*t2**2-5._ki/4._ki*t6**3*t1*t3**2*t2+5._ki/2&
+ &._ki*t6**3*t3**2*t1*t4+11._ki/2._ki*t6**3*t3**2*t2*t4**2
+ !
+ stemp6=stemp7-11._ki/4._ki*t6**3*t2**2*t3**2*t4+2._ki/3._ki*t6**2*t1*&
+ &*2*t5**2*t2**2+t3**2*t2**2*t1*t6**2/18._ki-7._ki/6._ki*t6*t3**3*t2&
+ &**2*t5+5._ki/6._ki*t6*t3**2*t2**3*t5**2-5._ki/9._ki*t6*t2**4*t3**2*&
+ &t4+10._ki/9._ki*t6*t2**4*t3**2*t5+17._ki/8._ki*t3**2*t2**4*t5**2+17&
+ &._ki/6._ki*t6**2*t2*t3**2*t4**2*t5-17._ki/6._ki*t6**2*t3**2*t4*t5*t&
+ &2**2-4._ki/3._ki*t6*t1*t3*t2**3*t5**2-2._ki/3._ki*t6*t1*t5*t2**4*t3&
+ &-2._ki/3._ki*t6*t1*t3*t2**2*t5**3-20._ki/9._ki*t6*t3**2*t2**3*t4*t5&
+ &-5._ki/3._ki*t6*t3**2*t2**2*t4*t5**2-2._ki/3._ki*t6**2*t1*t2**3*t3*&
+ &t5+t6**2*t1*t2*t3*t4*t5**2+11._ki/12._ki*t2**5*t3**2*t5-7._ki/9._ki&
+ &*t3**3*t2**3*t6+11._ki/12._ki*t3**2*t2**3*t5**3
+ !
+ stemp7=1._ki/t3**2/t2**6
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4_glob)
+ !
+ case(2)
+ !
+ stemp5=95._ki*t6**3*t3**2*t4**3+7._ki/12._ki*t6**2*t4**2*t2**6+6._ki*&
+ &t6**2*t4*t5*t3*t2**4-30._ki*t6**2*t4**2*t5*t3*t2**3+36._ki*t6**2*&
+ &t4**3*t5*t3*t2**2+15._ki*t6**2*t4*t5**2*t3*t2**3+10._ki*t6**2*t1*&
+ &t4*t5**3*t2**2+6._ki*t6**2*t1*t4*t5**2*t2**3-25._ki*t6**2*t1*t4**&
+ &2*t5**3*t2-t6*t4**2*t2**7/4._ki-t4**2*t5*t2**7/12._ki-5._ki*t6**2*&
+ &t2**2*t3**3+20._ki*t6**3*t4**5*t5**2-t4*t3*t2**7/6._ki-t6**3*t4**&
+ &2*t2**5/4._ki+3._ki/2._ki*t6**3*t4**3*t2**4-3._ki/4._ki*t6**3*t1**2*&
+ &t2**3+2._ki*t6**3*t4**5*t2**2+7._ki/3._ki*t6**2*t4**4*t2**4-60._ki*&
+ &t6**2*t3**2*t4*t5*t2**2+3._ki/2._ki*t6**2*t3**2*t2**4-30._ki*t6**3&
+ &*t1*t4**2*t5*t2**2+6._ki*t6**3*t1*t4*t5*t2**3+75._ki*t6**3*t4**2*&
+ &t3*t5*t2**2+10._ki*t6**2*t1*t2**3*t3*t4+15._ki*t6**2*t1*t5**2*t3*&
+ &t2**2
+ !
+ stemp4=195._ki/2._ki*t6**2*t2*t3**2*t4**2*t5+90._ki*t6**2*t4**3*t5**&
+ &2*t3*t2-15._ki*t6**2*t1*t4**2*t5**2*t2**2-75._ki*t6**2*t4**2*t5**&
+ &2*t3*t2**2+6._ki*t6**2*t1*t2**3*t3*t5-15._ki*t6**2*t1*t2*t5*t3**2&
+ &-24._ki*t6**2*t1*t3*t4*t5*t2**2-t6*t4*t2**6*t1/2._ki+30._ki*t6**3*&
+ &t2**2*t3**2*t4+3._ki/2._ki*t6**2*t1**2*t5**2*t2**2-3._ki*t3**2*t2*&
+ &*2*t1*t6**2+15._ki/2._ki*t6**3*t1*t4**2*t2**3-60._ki*t6**2*t1*t2*t&
+ &3*t4*t5**2-10._ki*t6**3*t4*t3*t5*t2**3-15._ki*t6**3*t1*t3*t5*t2**&
+ &2-12._ki*t6**3*t1**2*t5*t2*t4+25._ki/2._ki*t6**2*t1*t4**2*t5*t2**3&
+ &+stemp5+15._ki*t6**2*t2*t3**3*t4+15._ki/2._ki*t6**2*t2**3*t3**2*t5&
+ &+39._ki/2._ki*t6**2*t3**2*t4**2*t2**2+15._ki*t6**3*t1*t3**2*t2-45.&
+ &_ki*t6**3*t3**2*t1*t4-5._ki/4._ki*t6**2*t4**2*t5*t2**5+5._ki*t6**2*&
+ &t4**3*t5*t2**4-5._ki*t6**2*t4**4*t5*t2**3-15._ki*t6**2*t4**3*t3*t&
+ &2**3
+ !
+ stemp5=stemp4-5._ki/2._ki*t6**2*t4*t3*t2**5-6._ki*t6**2*t4**3*t5**2*&
+ &t2**3+6._ki*t6**2*t4**4*t5**2*t2**2+3._ki/2._ki*t6**2*t4**2*t5**2*&
+ &t2**4-10._ki*t6**2*t4**3*t5**3*t2**2+10._ki*t6**2*t4**4*t5**3*t2+&
+ &5._ki/2._ki*t6**2*t4**2*t5**3*t2**3-35._ki/6._ki*t6**2*t1*t4**2*t2*&
+ &*4+7._ki/3._ki*t6**2*t1*t4*t2**5-5._ki/4._ki*t6**2*t1**2*t5*t2**3+5&
+ &._ki/2._ki*t6**2*t1**2*t2*t5**3-5._ki/2._ki*t6**2*t1*t2**4*t3-12._ki&
+ &*t6**2*t2**3*t3**2*t4-195._ki/2._ki*t6**3*t3**2*t2*t4**2-5._ki*t6*&
+ &*2*t1*t4*t5*t2**4-180._ki*t6**3*t4**3*t3*t5*t2+120._ki*t6**3*t1*t&
+ &3*t5*t2*t4-15._ki*t6**3*t1*t4*t5**2*t2**2+36._ki*t6**3*t1*t4**3*t&
+ &5*t2+39._ki*t6**3*t1*t2*t3*t4**2-195._ki*t6**3*t1*t4**2*t3*t5+75.&
+ &_ki*t6**3*t1*t4**2*t5**2*t2-24._ki*t6**3*t1*t2**2*t3*t4-t4**2*t2*&
+ &*8/12._ki-3._ki/2._ki*t6**3*t1*t4*t2**4
+ !
+ stemp3=stemp5-90._ki*t6**3*t1*t4**3*t5**2+3._ki*t6**3*t1*t2**3*t3+1&
+ &5._ki*t6**3*t1**2*t3*t5+3._ki*t6**3*t1**2*t2**2*t4-28._ki*t6**3*t4&
+ &**4*t3*t2-15._ki*t6**3*t4**2*t3*t2**3-30._ki*t6**3*t4**4*t5**2*t2&
+ &+36._ki*t6**3*t4**3*t3*t2**2+2._ki*t6**3*t4*t3*t2**4+15._ki*t6**3*&
+ &t4**3*t5**2*t2**2-9._ki*t6**3*t1*t4**3*t2**2-8._ki*t6**3*t4**5*t5&
+ &*t2-5._ki/2._ki*t6**3*t4**2*t5**2*t2**3-6._ki*t6**3*t4**3*t5*t2**3&
+ &+12._ki*t6**3*t4**4*t5*t2**2+t6**3*t4**2*t5*t2**4+140._ki*t6**3*t&
+ &4**4*t3*t5+30._ki*t6**3*t1**2*t5**2*t4-15._ki/2._ki*t6**3*t1**2*t5&
+ &**2*t2-3._ki*t6**3*t1**2*t2*t3+3._ki*t6**3*t1**2*t5*t2**2+25._ki/2&
+ &._ki*t6**2*t4**2*t3*t2**4-3._ki*t6**3*t4**4*t2**3+7._ki/12._ki*t1**&
+ &2*t2**4*t6**2-7._ki/3._ki*t6**2*t4**3*t2**5+t6*t4**3*t2**6/2._ki-5&
+ &._ki/2._ki*t6**3*t2**3*t3**2
+ !
+ stemp4=1._ki/t2**10*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(-t2**2*t3*t4+4._ki*t4*t2*t1*t6-3._ki*t6*t4*t2*t3+6._ki*t4**&
+ &2*t3*t6-2._ki*t3**2*t2+2._ki*t3*t1*t6+4._ki*t4*t1*t6*t5-t3*t5*t2*t&
+ &4)*t4/t2**4/t3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp9=-25._ki/2._ki*t6**3*t1**4*t4*t5**2*t2**2+22._ki*t6**3*t1**3*t&
+ &4**4*t5*t2**2-t1**3*t4**2*t2**8/9._ki+t6**2*t1**2*t4*t3**2*t2**5&
+ &-14._ki*t6**2*t1**2*t4**4*t3**2*t2**2-55._ki/3._ki*t6**3*t1**3*t4*&
+ &t3*t5*t2**3-45._ki*t6**3*t1**2*t4**3*t3**2*t2**2-8._ki*t6**3*t1**&
+ &2*t4**5*t3*t2**2-45._ki*t6**2*t1**3*t4**2*t5*t3*t2**3+54._ki*t6**&
+ &2*t1**3*t4**3*t5*t3*t2**2+15._ki*t6**2*t1**3*t4**4*t5**3*t2-5._ki&
+ &/4._ki*t6**3*t1**2*t4**2*t5*t2**4*t3-5._ki/12._ki*t6**2*t1*t2**5*t&
+ &3**3*t4-5._ki/8._ki*t6**2*t1*t4**2*t3**2*t2**5*t5-25._ki/2._ki*t6**&
+ &3*t1**4*t3*t5*t2**2+70._ki/3._ki*t6**2*t1*t4**4*t3**3*t2**2+25._ki&
+ &/6._ki*t6**2*t1*t2**4*t3**3*t4**2-15._ki/2._ki*t6**2*t1**4*t4**2*t&
+ &5**2*t2**2-5._ki/2._ki*t6**2*t1**4*t4*t5*t2**4-25._ki/2._ki*t6**2*t&
+ &1**4*t4**2*t5**3*t2
+ !
+ stemp8=stemp9+25._ki/4._ki*t6**2*t1**4*t4**2*t5*t2**3+5._ki*t6**2*t1&
+ &**4*t4*t5**3*t2**2+3._ki*t6**2*t1**4*t2**3*t3*t5-2._ki*t6**2*t1*t&
+ &4**6*t3**2*t2**2+4._ki*t6**2*t1*t4**5*t3**2*t2**3+t6**2*t1*t3**2&
+ &*t4**3*t2**5-10._ki*t6**3*t1*t4**5*t3**2*t2**2-4._ki*t6**3*t1**5*&
+ &t5*t2*t4+10._ki*t6**3*t1*t4**6*t3**2*t2+5._ki*t6**3*t1*t4**4*t3**&
+ &2*t2**3-t6**3*t1**5*t2**3/4._ki+15._ki/4._ki*t6**2*t1**3*t4**2*t5*&
+ &*3*t2**3+45._ki/2._ki*t6**2*t1**3*t4*t5**2*t3*t2**3-325._ki/2._ki*t&
+ &6**3*t1**4*t4**2*t3*t5+100._ki*t6**3*t1**4*t3*t5*t2*t4+15._ki/2._k&
+ &i*t6**2*t1**3*t4**3*t5*t2**4-15._ki/2._ki*t6**2*t1**3*t4**4*t5*t2&
+ &**3+5._ki*t6**2*t1*t4**3*t3**2*t5*t2**4-3._ki*t6**2*t1*t4**4*t3**&
+ &2*t2**4-95._ki/3._ki*t6**2*t1**2*t3**3*t4**3*t2+65._ki/2._ki*t6**2*&
+ &t1**2*t3**3*t4**2*t2**2
+ !
+ stemp9=20._ki*t6**2*t1*t4**5*t3**2*t5*t2**2-15._ki/8._ki*t6**2*t1**3&
+ &*t4**2*t5*t2**5-t6**2*t1*t4**2*t3**2*t2**6/8._ki+117._ki/4._ki*t6*&
+ &*2*t1**3*t3**2*t2**2*t4**2-18._ki*t6**2*t1**3*t3**2*t2**3*t4-15.&
+ &_ki*t6**2*t1**3*t4**3*t5**3*t2**2+125._ki/2._ki*t6**3*t1**4*t4**2*&
+ &t5**2*t2-6._ki*t6**2*t1**2*t4**3*t5*t3*t2**4-5._ki/4._ki*t6**3*t1*&
+ &t4**3*t3**2*t2**4-20._ki*t6**2*t1**2*t4**5*t3*t5**2*t2-70._ki*t6*&
+ &*2*t1**2*t3**2*t4**4*t5*t2+5._ki*t6**2*t1**4*t2**3*t3*t4-12._ki*t&
+ &6**2*t1**4*t2**2*t3*t4*t5-30._ki*t6**2*t1**4*t5**2*t3*t2*t4+55._k&
+ &i*t6**3*t1**3*t4*t3**2*t2**2+11._ki/3._ki*t6**3*t1**3*t4*t3*t2**4&
+ &+770._ki/3._ki*t6**3*t1**3*t4**4*t3*t5+11._ki/6._ki*t6**3*t1**3*t4*&
+ &*2*t5*t2**4-330._ki*t6**3*t1**3*t4**3*t3*t5*t2-715._ki/4._ki*t6**3&
+ &*t1**3*t3**2*t4**2*t2+9._ki*t6**2*t1**3*t4*t5*t3*t2**4
+ !
+ stemp7=stemp9+9._ki/4._ki*t6**2*t1**3*t4**2*t5**2*t2**4-44._ki/3._ki*&
+ &t6**3*t1**3*t4**5*t5*t2-15._ki*t6**2*t1**2*t4**3*t3*t5**2*t2**3+&
+ &10._ki/3._ki*t6**2*t1**2*t4**5*t3*t2**3-15._ki/2._ki*t6**2*t1**2*t4&
+ &**2*t3**2*t2**4+12._ki*t6**2*t1**2*t4**4*t5*t3*t2**3+90._ki*t6**2&
+ &*t1**2*t3**2*t4**3*t5*t2**2+3._ki*t6**2*t1**4*t4*t5**2*t2**3-15.&
+ &_ki/2._ki*t6**2*t1**4*t3**2*t5*t2+15._ki/2._ki*t6**2*t1**4*t5**2*t3&
+ &*t2**2+5._ki*t6**3*t1**5*t3*t5+10._ki*t6**3*t1**5*t5**2*t4-5._ki/2&
+ &._ki*t6**3*t1**5*t5**2*t2+t6**3*t1**5*t5*t2**2-t6**3*t1**5*t2*t3&
+ &-15._ki/2._ki*t6**3*t1**4*t4**3*t2**2+25._ki/4._ki*t6**3*t1**4*t4**&
+ &2*t2**3-5._ki/4._ki*t6**3*t1**4*t4*t2**4-75._ki/2._ki*t6**3*t1**4*t&
+ &3**2*t4-75._ki*t6**3*t1**4*t4**3*t5**2+stemp8
+ !
+ stemp9=stemp7+5._ki/2._ki*t6**3*t1**4*t2**3*t3+25._ki/2._ki*t6**3*t1*&
+ &*4*t3**2*t2+11._ki/4._ki*t6**3*t1**3*t4**3*t2**4+11._ki/3._ki*t6**3&
+ &*t1**3*t4**5*t2**2-55._ki/12._ki*t6**3*t1**3*t3**2*t2**3+110._ki/3&
+ &._ki*t6**3*t1**3*t4**5*t5**2+1045._ki/6._ki*t6**3*t1**3*t3**2*t4**&
+ &3-11._ki/24._ki*t6**3*t1**3*t4**2*t2**5-11._ki/2._ki*t6**3*t1**3*t4&
+ &**4*t2**3-15._ki/2._ki*t6**2*t1**3*t3**3*t2**2-35._ki/12._ki*t6**2*&
+ &t1**4*t4**2*t2**4-5._ki/4._ki*t6**2*t1**4*t2**4*t3-3._ki/2._ki*t6**&
+ &2*t1**4*t3**2*t2**2+5._ki/6._ki*t6**2*t1**2*t3**3*t2**4+10._ki/3._k&
+ &i*t6**2*t4**4*t3**3*t2**4-20._ki/3._ki*t6**2*t4**5*t3**3*t2**3+20&
+ &._ki/3._ki*t6**2*t4**6*t3**3*t2**2-8._ki/3._ki*t6**2*t4**7*t3**3*t2&
+ &+7._ki/6._ki*t6**2*t1**4*t4*t2**5+7._ki/8._ki*t6**2*t1**3*t4**2*t2*&
+ &*6
+ !
+ stemp8=stemp9+7._ki/2._ki*t6**2*t1**3*t4**4*t2**4-7._ki/2._ki*t6**2*t&
+ &1**3*t4**3*t2**5+9._ki/4._ki*t6**2*t1**3*t3**2*t2**4+t6*t1**3*t4*&
+ &*3*t2**6/2._ki-t6*t1**3*t4**2*t2**7/4._ki+t6**2*t2**6*t3**3*t4**2&
+ &/12._ki+t6**3*t1**5*t2**2*t4-10._ki*t6**2*t1*t4**6*t3**2*t5*t2-15&
+ &._ki*t6**2*t1*t4**4*t3**2*t5*t2**3-15._ki*t6**2*t1*t2**3*t3**3*t4&
+ &**3+5._ki/2._ki*t6**2*t1**2*t4**2*t3*t5**2*t2**4-8._ki*t6**2*t1**2&
+ &*t4**5*t5*t3*t2**2+5._ki*t6**2*t1**2*t4*t3**2*t5*t2**4-10._ki*t6*&
+ &*2*t1**2*t4*t3**3*t2**3-5._ki/12._ki*t6**2*t1**2*t4**2*t3*t2**6-5&
+ &._ki*t6**2*t1**2*t4**4*t3*t2**4+18._ki*t6**2*t1**2*t4**3*t3**2*t2&
+ &**3+5._ki/2._ki*t6**2*t1**2*t4**3*t3*t2**5-55._ki*t6**3*t1**3*t4**&
+ &4*t5**2*t2+55._ki/2._ki*t6**3*t1**3*t4**3*t5**2*t2**2+275._ki/2._ki&
+ &*t6**3*t1**3*t4**2*t3*t5*t2**2
+ !
+ stemp9=stemp8+40._ki*t6**3*t1**2*t4**5*t3*t5*t2+t6**3*t1**2*t4**2*&
+ &t3*t2**5/4._ki-5._ki/4._ki*t6**3*t1**2*t4*t3**2*t2**4-225._ki/2._ki*&
+ &t6**2*t1**3*t4**2*t5**2*t3*t2**2+135._ki*t6**2*t1**3*t4**3*t5**2&
+ &*t3*t2+5._ki*t6**3*t1**4*t4*t5*t2**3+45._ki/4._ki*t6**2*t1**3*t2**&
+ &3*t3**2*t5+75._ki/4._ki*t6**2*t1**3*t4**2*t3*t2**4-55._ki/12._ki*t6&
+ &**3*t1**3*t4**2*t5**2*t2**3-55._ki/2._ki*t6**3*t1**3*t4**2*t3*t2*&
+ &*3+66._ki*t6**3*t1**3*t4**3*t3*t2**2-154._ki/3._ki*t6**3*t1**3*t4*&
+ &*4*t3*t2+t6**3*t1*t4**2*t3**2*t2**5/8._ki+30._ki*t6**3*t1**4*t4**&
+ &3*t5*t2+65._ki/2._ki*t6**3*t1**4*t2*t3*t4**2-11._ki*t6**3*t1**3*t4&
+ &**3*t5*t2**3-5._ki/6._ki*t6**2*t2**5*t3**3*t4**3-t1**3*t4**2*t5*t&
+ &2**7/9._ki+585._ki/4._ki*t6**2*t1**3*t3**2*t5*t2*t4**2-90._ki*t6**2&
+ &*t1**3*t3**2*t5*t2**2*t4
+ !
+ stemp6=stemp9-45._ki/2._ki*t6**2*t1**3*t4**3*t3*t2**3-15._ki/4._ki*t6&
+ &**2*t1**3*t4*t3*t2**5+45._ki/2._ki*t6**2*t1**3*t3**3*t2*t4-9._ki*t&
+ &6**2*t1**3*t4**3*t5**2*t2**3-75._ki/2._ki*t6**2*t1**2*t3**2*t4**2&
+ &*t5*t2**3+30._ki*t6**2*t1**2*t4**4*t3*t5**2*t2**2-40._ki/3._ki*t6*&
+ &*2*t1*t4**5*t3**3*t2-2._ki*t6**3*t1**2*t4**3*t3*t2**4+25._ki/2._ki&
+ &*t6**3*t1**2*t4**2*t3**2*t2**3-20._ki*t6**3*t1**2*t4**6*t3*t5+4.&
+ &_ki*t6**3*t1**2*t4**6*t3*t2+6._ki*t6**3*t1**2*t4**4*t3*t2**3+t6**&
+ &2*t1**2*t4**2*t5*t3*t2**5-30._ki*t6**3*t1**2*t4**4*t3*t5*t2**2+1&
+ &0._ki*t6**3*t1**2*t4**3*t3*t5*t2**3-20._ki*t6**3*t1**4*t2**2*t3*t&
+ &4-25._ki*t6**3*t1**4*t4**2*t5*t2**2-t1**3*t4*t3*t2**7/18._ki-40._k&
+ &i*t6**3*t1**2*t4**5*t3**2-4._ki*t6**3*t1*t4**7*t3**2+9._ki*t6**2*&
+ &t1**3*t4**4*t5**2*t2**2+70._ki*t6**3*t1**2*t4**4*t3**2*t2
+ !
+ stemp7=1._ki/t1**3/t2**10
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(3)
+ !
+ stemp5=54._ki*t6**3*t1*t4**2*t5*t2**2-24._ki*t6**3*t1*t4*t5*t2**3-t&
+ &6*t1*t2**7/4._ki+7._ki/12._ki*t6**2*t4*t2**7+3._ki/4._ki*t6*t4**2*t2&
+ &**7+t6**3*t2**5*t3-3._ki/4._ki*t6**3*t1*t2**5-t6**3*t4*t2**6/4._ki&
+ &+t4**2*t2**8/12._ki+10._ki*t6**2*t4*t3*t2**5+12._ki*t6**2*t4**3*t5&
+ &**2*t2**3+3._ki*t6**3*t1*t5*t2**4-15._ki/2._ki*t6**3*t1*t5**2*t2**&
+ &3-5._ki/4._ki*t6**2*t2**6*t4*t5+3._ki/2._ki*t6**2*t4*t5**2*t2**5+5.&
+ &_ki/2._ki*t6**2*t4*t5**3*t2**4+10._ki*t6**3*t2**3*t3**2+3._ki/2._ki*&
+ &t6**3*t1**2*t2**3-9._ki/2._ki*t6**3*t4**3*t2**4-7._ki/3._ki*t6**2*t&
+ &4**4*t2**4-2._ki*t6**3*t4**5*t2**2+45._ki*t6**3*t3**2*t1*t4-135._k&
+ &i/2._ki*t6**3*t2**2*t3**2*t4+3._ki*t3**2*t2**2*t1*t6**2-3._ki/2._ki&
+ &*t6**2*t1**2*t5**2*t2**2-30._ki*t6**2*t1*t5**2*t3*t2**2+280._ki*t&
+ &6**3*t4**3*t3*t5*t2-195._ki*t6**3*t4**2*t3*t5*t2**2-195._ki/2._ki*&
+ &t6**2*t2*t3**2*t4**2*t5-195._ki*t6**3*t1*t3*t5*t2*t4+195._ki/2._ki&
+ &*t6**2*t3**2*t4*t5*t2**2+60._ki*t6**3*t1*t4*t5**2*t2**2
+ !
+ stemp4=-25._ki/2._ki*t6**2*t1*t4**2*t5*t2**3-20._ki*t6**3*t4**5*t5**&
+ &2-95._ki*t6**3*t3**2*t4**3+stemp5-36._ki*t6**3*t1*t4**3*t5*t2-39.&
+ &_ki*t6**3*t1*t2*t3*t4**2-15._ki*t6**2*t1*t4*t5**2*t2**3-25._ki*t6*&
+ &*2*t1*t4*t5**3*t2**2-t4*t2**9/12._ki+15._ki*t6**2*t1*t4**2*t5**2*&
+ &t2**2-24._ki*t6**2*t4*t5*t3*t2**4-15._ki/2._ki*t6**2*t4**2*t5**2*t&
+ &2**4+20._ki*t6**2*t4**3*t5**3*t2**2-10._ki*t6**2*t4**4*t5**3*t2-2&
+ &5._ki/2._ki*t6**2*t4**2*t5**3*t2**3+t6**3*t4*t5*t2**5+35._ki/6._ki*&
+ &t6**2*t1*t4**2*t2**4+t6*t4*t2**6*t1/2._ki+3._ki*t6**2*t3*t5*t2**5&
+ &+6._ki*t6**3*t1*t4*t2**4+90._ki*t6**3*t1*t4**3*t5**2-9._ki*t6**3*t&
+ &1*t2**3*t3-15._ki*t6**3*t1**2*t3*t5-3._ki*t6**3*t1**2*t2**2*t4-27&
+ &._ki/2._ki*t6**3*t1*t4**2*t2**3+135._ki*t6**2*t4**2*t5**2*t3*t2**2&
+ &+25._ki/2._ki*t6**2*t1*t4*t5*t2**4+12._ki*t6**3*t1**2*t5*t2*t4-90.&
+ &_ki*t6**2*t4**3*t5**2*t3*t2-140._ki*t6**3*t4**4*t3*t5-30._ki*t6**3&
+ &*t1**2*t5**2*t4+15._ki*t6**3*t1**2*t5**2*t2+3._ki*t6**3*t1**2*t2*&
+ &t3
+ !
+ stemp5=stemp4-5._ki*t6**3*t3*t2**4*t5-5._ki/2._ki*t6**3*t4*t5**2*t2*&
+ &*4+25._ki*t6**2*t1*t4**2*t5**3*t2-6._ki*t6**3*t1**2*t5*t2**2+25._k&
+ &i/4._ki*t6**2*t4**2*t5*t2**5-10._ki*t6**2*t4**3*t5*t2**4+5._ki*t6*&
+ &*2*t4**4*t5*t2**3+15._ki*t6**2*t4**3*t3*t2**3-45._ki/2._ki*t6**2*t&
+ &4**2*t3*t2**4+3._ki*t6**2*t1*t5**2*t2**4-5._ki/2._ki*t6**2*t1*t5*t&
+ &2**5+5._ki*t6**2*t1*t5**3*t2**3+15._ki/2._ki*t6**2*t3*t5**2*t2**4-&
+ &6._ki*t6**2*t4**4*t5**2*t2**2+39._ki/2._ki*t6**2*t2**3*t3**2*t4+28&
+ &5._ki/2._ki*t6**3*t3**2*t2*t4**2-15._ki*t6**2*t2*t3**3*t4-45._ki/2.&
+ &_ki*t6**2*t2**3*t3**2*t5-39._ki/2._ki*t6**2*t3**2*t4**2*t2**2-45._k&
+ &i/2._ki*t6**3*t1*t3**2*t2+54._ki*t6**2*t4**2*t5*t3*t2**3+60._ki*t6&
+ &**2*t1*t2*t3*t4*t5**2-36._ki*t6**2*t4**3*t5*t3*t2**2+28._ki*t6**3&
+ &*t4**4*t3*t2+50._ki*t6**3*t4**4*t5**2*t2-56._ki*t6**3*t4**3*t3*t2&
+ &**2-11._ki*t6**3*t4*t3*t2**4-45._ki*t6**3*t4**3*t5**2*t2**2+39._ki&
+ &*t6**3*t4**2*t3*t2**3-60._ki*t6**2*t4*t5**2*t3*t2**3+t4**2*t5*t2&
+ &**7/12._ki
+ !
+ stemp3=stemp5+15._ki*t6**2*t1*t2*t5*t3**2+55._ki*t6**3*t4*t3*t5*t2*&
+ &*3+15._ki/2._ki*t6**2*t2**2*t3**3+t4*t3*t2**7/6._ki+45._ki*t6**3*t1&
+ &*t3*t5*t2**2-5._ki/4._ki*t6**2*t3*t2**6+7._ki/6._ki*t6**2*t1*t2**6+&
+ &9._ki*t6**3*t1*t4**3*t2**2+8._ki*t6**3*t4**5*t5*t2+35._ki/2._ki*t6*&
+ &*3*t4**2*t5**2*t2**3+18._ki*t6**3*t4**3*t5*t2**3-20._ki*t6**3*t4*&
+ &*4*t5*t2**2-7._ki*t6**3*t4**2*t5*t2**4+195._ki*t6**3*t1*t4**2*t3*&
+ &t5+24._ki*t6**2*t1*t3*t4*t5*t2**2-t6*t4**3*t2**6/2._ki-10._ki*t6**&
+ &2*t1*t2**3*t3*t4-35._ki/6._ki*t6**2*t1*t4*t2**5-135._ki*t6**3*t1*t&
+ &4**2*t5**2*t2+39._ki*t6**3*t1*t2**2*t3*t4-t4*t2**8*t5/12._ki-9._ki&
+ &/2._ki*t6**2*t3**2*t2**4+5._ki/4._ki*t6**2*t1**2*t5*t2**3-5._ki/2._k&
+ &i*t6**2*t1**2*t2*t5**3+5._ki*t6**2*t1*t2**4*t3-35._ki/12._ki*t6**2&
+ &*t4**2*t2**6+5._ki*t6**3*t4**4*t2**3-t3*t2**8/12._ki+7._ki/4._ki*t6&
+ &**3*t4**2*t2**5+14._ki/3._ki*t6**2*t4**3*t2**5-12._ki*t6**2*t1*t2*&
+ &*3*t3*t5-7._ki/12._ki*t1**2*t2**4*t6**2-t6*t4*t2**8/4._ki
+ !
+ stemp4=1._ki/t2**10*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(t4**2*t3*t2**2-4._ki*t4**2*t2*t1*t6+9._ki*t4**2*t3*t6*t2+t&
+ &3*t4**2*t2*t5+4._ki*t4*t2**2*t1*t6+2._ki*t4*t3**2*t2-t4*t3*t2**3-&
+ &t3**2*t2**2+4._ki*t4*t2*t1*t6*t5-4._ki*t4**2*t5*t1*t6-2._ki*t4*t3*&
+ &t1*t6-6._ki*t3*t4**3*t6+t3*t2*t1*t6-t4*t3*t5*t2**2-3._ki*t4*t3*t6&
+ &*t2**2)/t2**4/t3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp9=143._ki/2._ki*t6**3*t1**3*t4**2*t3*t2**3+385._ki/12._ki*t6**3*&
+ &t1**3*t4**2*t5**2*t2**3-308._ki/3._ki*t6**3*t1**3*t4**3*t3*t2**2-&
+ &5._ki/4._ki*t6**2*t1**4*t5*t2**5-45._ki/4._ki*t6**3*t1**4*t4**2*t2*&
+ &*3+5._ki*t6**3*t1**4*t4*t2**4+75._ki/2._ki*t6**3*t1**4*t3**2*t4+75&
+ &._ki*t6**3*t1**4*t4**3*t5**2-15._ki/2._ki*t6**3*t1**4*t2**3*t3-585&
+ &._ki/4._ki*t6**2*t1**3*t3**2*t5*t2*t4**2+45._ki/2._ki*t6**2*t1**3*t&
+ &4**3*t3*t2**3+39._ki/2._ki*t6**2*t1**2*t4**2*t3**2*t2**4-20._ki*t6&
+ &**2*t1**2*t4**4*t5*t3*t2**3+15._ki/2._ki*t6**2*t1**4*t3**2*t5*t2+&
+ &45._ki/4._ki*t6**2*t1**3*t3*t5**2*t2**4+585._ki/4._ki*t6**2*t1**3*t&
+ &3**2*t5*t2**2*t4-15._ki*t6**2*t1**3*t4**4*t5**3*t2+15._ki*t6**2*t&
+ &1**3*t4*t3*t2**5-45._ki/2._ki*t6**2*t1**3*t3**3*t2*t4-5._ki/12._ki*&
+ &t6**2*t1**2*t4*t3*t2**7+154._ki/3._ki*t6**3*t1**3*t4**4*t3*t2-15.&
+ &_ki*t6**2*t1**4*t5**2*t3*t2**2+18._ki*t6**2*t1**3*t4**3*t5**2*t2*&
+ &*3-55._ki/12._ki*t6**3*t1**3*t4*t5**2*t2**4+5._ki/2._ki*t6**2*t1**2&
+ &*t2**5*t3**2*t5
+ !
+ stemp8=-135._ki/4._ki*t6**2*t1**3*t4**2*t3*t2**4-135._ki/4._ki*t6**2*&
+ &t1**3*t2**3*t3**2*t5-60._ki*t6**3*t1**2*t4**5*t3*t5*t2+75._ki/8._k&
+ &i*t6**2*t1**3*t4**2*t5*t2**5-140._ki*t6**2*t1**2*t3**2*t4**3*t5*&
+ &t2**2-15._ki*t6**2*t1**3*t4**3*t5*t2**4+15._ki/2._ki*t6**2*t1**3*t&
+ &4**4*t5*t2**3-9._ki*t6**2*t1**3*t4**4*t5**2*t2**2+195._ki/2._ki*t6&
+ &**2*t1**2*t3**2*t4**2*t5*t2**3+70._ki*t6**3*t1**2*t4**4*t3*t5*t2&
+ &**2+9._ki/2._ki*t6**2*t1**3*t3*t5*t2**5+20._ki*t6**3*t1*t4**5*t3**&
+ &2*t2**2-14._ki*t6**3*t1**2*t4**4*t3*t2**3-100._ki*t6**3*t1**2*t4*&
+ &*4*t3**2*t2-5._ki/4._ki*t6**3*t1**2*t4*t5*t2**5*t3+t6**3*t1**2*t4&
+ &*t3*t2**6/4._ki-40._ki*t6**3*t1**2*t4**3*t3*t5*t2**3-11._ki/2._ki*t&
+ &6**2*t1**2*t4*t3**2*t2**5-6._ki*t6**2*t1**4*t2**3*t3*t5-325._ki/2&
+ &._ki*t6**3*t1**4*t3*t5*t2*t4-85._ki/6._ki*t6**2*t1*t2**4*t3**3*t4*&
+ &*2-20._ki*t6**2*t1*t4**3*t3**2*t5*t2**4-5._ki*t6**2*t1**4*t2**3*t&
+ &3*t4+35._ki/12._ki*t6**2*t1*t2**5*t3**3*t4-75._ki/4._ki*t6**2*t1**3&
+ &*t4**2*t5**3*t2**3+stemp9
+ !
+ stemp9=-50._ki*t6**2*t1**2*t4**4*t3*t5**2*t2**2+14._ki*t6**2*t1**2*&
+ &t4**4*t3**2*t2**2-90._ki*t6**2*t1**3*t4*t5**2*t3*t2**3+40._ki/3._k&
+ &i*t6**2*t1*t4**5*t3**3*t2+12._ki*t6**2*t1**4*t2**2*t3*t4*t5+9._ki&
+ &/4._ki*t6**2*t1**3*t4*t5**2*t2**5+7._ki*t6**2*t1**3*t4**3*t2**5-2&
+ &7._ki/4._ki*t6**2*t1**3*t3**2*t2**4-t6*t1**3*t4**3*t2**6/2._ki+3._k&
+ &i/4._ki*t6*t1**3*t4**2*t2**7-25._ki/4._ki*t6**3*t1**4*t5**2*t2**3-&
+ &15._ki/8._ki*t6**2*t1**3*t3*t2**6+3._ki/2._ki*t6**2*t1**4*t5**2*t2*&
+ &*4+5._ki/2._ki*t6**2*t1**4*t5**3*t2**3+45._ki*t6**2*t1**2*t4**3*t3&
+ &*t5**2*t2**3-75._ki/4._ki*t6**3*t1**4*t3**2*t2-t6**3*t1**5*t2**2*&
+ &t4-10._ki*t6**3*t1**5*t5**2*t4+5._ki*t6**3*t1**5*t5**2*t2-2._ki*t6&
+ &**3*t1**5*t5*t2**2+t6**3*t1**5*t2*t3+15._ki/2._ki*t6**3*t1**4*t4*&
+ &*3*t2**2+40._ki*t6**3*t1**2*t4**5*t3**2+30._ki*t6**2*t1**4*t5**2*&
+ &t3*t2*t4-11._ki/12._ki*t6**2*t2**6*t3**3*t4**2
+ !
+ stemp7=stemp9-5._ki/24._ki*t6**2*t1*t2**6*t3**3+25._ki/6._ki*t6**2*t2&
+ &**5*t3**3*t4**3+11._ki/6._ki*t6**3*t1**3*t2**5*t3+95._ki/3._ki*t6**&
+ &2*t1**2*t3**3*t4**3*t2+7._ki*t6**2*t1*t4**4*t3**2*t2**4+45._ki/4.&
+ &_ki*t6**3*t1**2*t4**2*t5*t2**4*t3+t1**3*t4*t3*t2**7/18._ki-t1**3*&
+ &t4*t2**8*t5/9._ki+5._ki/2._ki*t6**3*t1**4*t5*t2**4-10._ki/3._ki*t6**&
+ &2*t1**2*t3**3*t2**4-5._ki/8._ki*t6**2*t1*t4*t3**2*t2**6*t5+2._ki*t&
+ &6**2*t1*t4**6*t3**2*t2**2+4._ki*t6**3*t1**5*t5*t2*t4-35._ki/2._ki*&
+ &t6**2*t1**2*t4**2*t3*t5**2*t2**4-5._ki/8._ki*t6**3*t1**4*t2**5+8.&
+ &_ki*t6**2*t1**2*t4**5*t5*t3*t2**2-11._ki/8._ki*t6**3*t1*t4**2*t3**&
+ &2*t2**5-6._ki*t6**2*t1*t4**5*t3**2*t2**3-55._ki/6._ki*t6**3*t1**3*&
+ &t3*t2**4*t5-15._ki/2._ki*t6**2*t1**2*t4**3*t3*t2**5-95._ki/2._ki*t6&
+ &**2*t1**2*t3**3*t4**2*t2**2-t6**2*t1*t4*t3**2*t2**7/8._ki-14._ki*&
+ &t6**3*t1*t4**6*t3**2*t2+18._ki*t6**2*t1**2*t4**3*t5*t3*t2**4-7._k&
+ &i*t6**2*t1**2*t4**2*t5*t3*t2**5+stemp8
+ !
+ stemp9=stemp7+4._ki*t6**3*t1*t4**7*t3**2-5._ki*t6**3*t1**5*t3*t5+7.&
+ &_ki/8._ki*t6**2*t1**3*t4*t2**7-t6*t1**3*t4*t2**8/4._ki-20._ki*t6**3&
+ &*t1**4*t4*t5*t2**3-30._ki*t6**2*t1*t4**5*t3**2*t5*t2**2-30._ki*t6&
+ &**3*t1**4*t4**3*t5*t2+605._ki/6._ki*t6**3*t1**3*t4*t3*t5*t2**3+45&
+ &._ki/8._ki*t6**2*t1*t4**2*t3**2*t2**5*t5+9._ki/8._ki*t6**2*t1*t4**2&
+ &*t3**2*t2**6+33._ki*t6**3*t1**3*t4**3*t5*t2**3-65._ki/2._ki*t6**3*&
+ &t1**4*t2*t3*t4**2+t6**3*t1*t4*t3**2*t2**6/8._ki+50._ki*t6**3*t1**&
+ &4*t4*t5**2*t2**2+25._ki/4._ki*t6**3*t1*t4**3*t3**2*t2**4+95._ki*t6&
+ &**3*t1**2*t4**3*t3**2*t2**2+10._ki*t6**2*t1*t4**6*t3**2*t5*t2+20&
+ &._ki*t6**2*t1**2*t4**5*t3*t5**2*t2-15._ki*t6**3*t1*t4**4*t3**2*t2&
+ &**3-t1**3*t4*t2**9/9._ki-10._ki*t6**2*t4**4*t3**3*t2**4+40._ki/3._k&
+ &i*t6**2*t4**5*t3**3*t2**3-28._ki/3._ki*t6**2*t4**6*t3**3*t2**2+8.&
+ &_ki/3._ki*t6**2*t4**7*t3**3*t2
+ !
+ stemp8=stemp9-35._ki/12._ki*t6**2*t1**4*t4*t2**5-35._ki/8._ki*t6**2*t&
+ &1**3*t4**2*t2**6-7._ki/2._ki*t6**2*t1**3*t4**4*t2**4-55._ki/2._ki*t&
+ &6**2*t1**2*t4*t3**2*t5*t2**4-4._ki*t6**2*t1*t3**2*t4**3*t2**5+27&
+ &5._ki/3._ki*t6**3*t1**3*t4**4*t5**2*t2-100._ki/3._ki*t6**2*t1*t4**4&
+ &*t3**3*t2**2+44._ki/3._ki*t6**3*t1**3*t4**5*t5*t2-110._ki/3._ki*t6*&
+ &*3*t1**3*t4**4*t5*t2**2-495._ki/4._ki*t6**3*t1**3*t4*t3**2*t2**2+&
+ &35._ki*t6**2*t1*t4**4*t3**2*t5*t2**3+15._ki/2._ki*t6**2*t1**4*t4**&
+ &2*t5**2*t2**2-36._ki*t6**2*t1**3*t4*t5*t3*t2**4+95._ki/3._ki*t6**2&
+ &*t1*t2**3*t3**3*t4**3+75._ki/2._ki*t6**3*t1**4*t3*t5*t2**2+25._ki/&
+ &4._ki*t6**2*t1**4*t4*t5*t2**4-165._ki/2._ki*t6**3*t1**3*t4**3*t5**&
+ &2*t2**2+35._ki/12._ki*t6**2*t1**2*t4**2*t3*t2**6+45._ki/2._ki*t6**2&
+ &*t1**2*t4*t3**3*t2**3+405._ki/2._ki*t6**2*t1**3*t4**2*t5**2*t3*t2&
+ &**2-121._ki/6._ki*t6**3*t1**3*t4*t3*t2**4-135._ki*t6**2*t1**3*t4**&
+ &3*t5**2*t3*t2-770._ki/3._ki*t6**3*t1**3*t4**4*t3*t5+25._ki/2._ki*t6&
+ &**2*t1**4*t4**2*t5**3*t2-9._ki/4._ki*t6**3*t1**2*t4**2*t3*t2**5+1&
+ &2._ki*t6**3*t1**2*t4**5*t3*t2**2
+ !
+ stemp9=stemp8+25._ki/3._ki*t6**2*t1**2*t4**4*t3*t2**4-225._ki/2._ki*t&
+ &6**3*t1**4*t4**2*t5**2*t2+65._ki/2._ki*t6**3*t1**4*t2**2*t3*t4+55&
+ &._ki/6._ki*t6**3*t1**3*t4**4*t2**3+35._ki/12._ki*t6**2*t1**4*t4**2*&
+ &t2**4+5._ki/2._ki*t6**2*t1**4*t2**4*t3+3._ki/2._ki*t6**2*t1**4*t3**&
+ &2*t2**2-5._ki/8._ki*t6**3*t1**2*t3**2*t2**5+t6**2*t1**2*t3**2*t2*&
+ &*6/2._ki+t6**2*t2**7*t3**3*t4/12._ki+t1**3*t4**2*t5*t2**7/9._ki+45&
+ &._ki/4._ki*t6**2*t1**3*t3**3*t2**2-25._ki/4._ki*t6**2*t1**4*t4**2*t&
+ &5*t2**3+7._ki/12._ki*t6**2*t1**4*t2**6+20._ki*t6**3*t1**2*t4**6*t3&
+ &*t5-45._ki/4._ki*t6**2*t1**3*t4**2*t5**2*t2**4-t1**3*t3*t2**8/36.&
+ &_ki-117._ki/4._ki*t6**2*t1**3*t3**2*t2**2*t4**2-28._ki*t6**2*t1**2*&
+ &t4**3*t3**2*t2**3+35._ki/4._ki*t6**3*t1**2*t4*t3**2*t2**4-25._ki/2&
+ &._ki*t6**2*t1**4*t4*t5**3*t2**2+45._ki*t6**3*t1**4*t4**2*t5*t2**2&
+ &-77._ki/6._ki*t6**3*t1**3*t4**2*t5*t2**4+1540._ki/3._ki*t6**3*t1**3&
+ &*t4**3*t3*t5*t2+t6**3*t1**5*t2**3/2._ki
+ !
+ stemp6=stemp9+117._ki/4._ki*t6**2*t1**3*t3**2*t2**3*t4+30._ki*t6**2*&
+ &t1**3*t4**3*t5**3*t2**2+t1**3*t4**2*t2**8/9._ki+8._ki*t6**3*t1**2&
+ &*t4**3*t3*t2**4-85._ki/2._ki*t6**3*t1**2*t4**2*t3**2*t2**3+70._ki*&
+ &t6**2*t1**2*t3**2*t4**4*t5*t2-10._ki/3._ki*t6**2*t1**2*t4**5*t3*t&
+ &2**3-715._ki/2._ki*t6**3*t1**3*t4**2*t3*t5*t2**2-15._ki/2._ki*t6**2&
+ &*t1**4*t4*t5**2*t2**3+11._ki/6._ki*t6**3*t1**3*t4*t5*t2**5+t6**2*&
+ &t1**2*t2**6*t3*t4*t5+325._ki/2._ki*t6**3*t1**4*t4**2*t3*t5+81._ki*&
+ &t6**2*t1**3*t4**2*t5*t3*t2**3-4._ki*t6**3*t1**2*t4**6*t3*t2-54._k&
+ &i*t6**2*t1**3*t4**3*t5*t3*t2**2-15._ki/8._ki*t6**2*t1**3*t2**6*t4&
+ &*t5+1045._ki/4._ki*t6**3*t1**3*t3**2*t4**2*t2-11._ki/24._ki*t6**3*t&
+ &1**3*t4*t2**6-33._ki/4._ki*t6**3*t1**3*t4**3*t2**4-11._ki/3._ki*t6*&
+ &*3*t1**3*t4**5*t2**2+55._ki/3._ki*t6**3*t1**3*t3**2*t2**3-110._ki/&
+ &3._ki*t6**3*t1**3*t4**5*t5**2-1045._ki/6._ki*t6**3*t1**3*t3**2*t4*&
+ &*3+77._ki/24._ki*t6**3*t1**3*t4**2*t2**5+5._ki/2._ki*t6**2*t1**2*t3&
+ &*t5**2*t2**5*t4+15._ki/4._ki*t6**2*t1**3*t4*t5**3*t2**4
+ !
+ stemp7=1._ki/t1**3/t2**10
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp2=(-12._ki*t6**2*t2**4*t4**2+12._ki*t6**2*t2**3*t4**3+t6*t2**6&
+ &*t4+3._ki*t6**2*t2**5*t4-120._ki*t6**3*t3*t4**3+6._ki*t6**3*t3*t2*&
+ &*3+2._ki*t6*t2**5*t3+2._ki*t3*t5*t2**5-18._ki*t6**2*t1*t2**3*t4+2.&
+ &_ki*t6*t2**5*t4*t5-4._ki*t6*t2**4*t4**2*t5-6._ki*t3*t4*t6*t2**4+14&
+ &4._ki*t6**3*t1*t5*t4**2+18._ki*t1*t6**3*t2**2*t5+6._ki*t6**3*t2**3&
+ &*t5*t4-36._ki*t6**3*t2**2*t5*t4**2+72._ki*t6**3*t4**3*t5*t2-36._ki&
+ &*t6**3*t3*t2*t1+90._ki*t6**3*t4*t1*t3-54._ki*t6**3*t3*t2**2*t4+2.&
+ &_ki*t6*t1*t2**4*t5+144._ki*t6**3*t3*t2*t4**2-108._ki*t1*t6**3*t4*t&
+ &5*t2+t3*t2**6+t2**6*t4*t5-2._ki*t6*t2**5*t4**2+t4*t5**2*t2**5+6.&
+ &_ki*t6**2*t1*t2**4-18._ki*t6**3*t1**2*t5+t6*t1*t2**5-48._ki*t6**3*&
+ &t4**4*t5)/t2**8*z_log(t1*t6/t2**2,1._ki)/12._ki
+ !
+ stemp4=(-t3**2*t4*t5**2*t2**2-2._ki*t6*t3**3*t2**2-2._ki*t2**2*t5*t&
+ &3**3-t3**2*t2**3*t4*t5-2._ki*t1**2*t6**2*t3*t2+3._ki*t1*t6*t3**2*&
+ &t2**2-6._ki*t1*t6**2*t3**2*t4+6._ki*t2*t6*t3**3*t4+2._ki*t2*t1*t6*&
+ &*2*t3**2-4._ki*t5*t1**2*t6**2*t3-6._ki*t4*t5**2*t6**2*t1**2+12._ki&
+ &*t2*t4**2*t3**2*t6**2-3._ki*t2**2*t4*t3**2*t6**2-t2**3*t4*t6*t3*&
+ &*2+2._ki*t2**2*t4**2*t6*t3**2+4._ki*t4*t3*t5*t2**2*t1*t6-6._ki*t4*&
+ &t5*t2*t6**2*t1**2+6._ki*t2*t5*t1*t6*t3**2+8._ki*t3*t4*t5*t2*t6**2&
+ &*t1-12._ki*t4**3*t3**2*t6**2-16._ki*t3*t4**2*t5*t6**2*t1+4._ki*t3*&
+ &*2*t4**2*t5*t2*t6+4._ki*t3*t4*t5**2*t2*t1*t6+4._ki*t2**2*t4*t1*t6&
+ &**2*t3-8._ki*t2*t4**2*t1*t6**2*t3-2._ki*t4*t5*t3**2*t6*t2**2-t2**&
+ &3*t3**3)/t3**2/t2**5*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp7=3._ki/2._ki*t6**2*t1*t3*t2**3*t4**3-3._ki/2._ki*t6**2*t1*t3*t2&
+ &**4*t4**2-3._ki/4._ki*t6**2*t1**2*t3*t2**3*t4+t1*t3**2*t2**6/9._ki&
+ &+2._ki*t6**3*t3**2*t4**5+7._ki/36._ki*t6*t1*t2**6*t4*t3+7._ki/36._ki&
+ &*t1*t2**6*t3*t4*t5+7._ki/36._ki*t1*t2**5*t3*t4*t5**2-2._ki/3._ki*t6&
+ &*t1*t4*t3**2*t2**4-7._ki/18._ki*t6*t1*t2**5*t4**2*t3-15._ki/2._ki*t&
+ &6**3*t1**2*t3*t4*t5*t2+11._ki/12._ki*t6**3*t1*t3*t2**3*t5*t4-22._k&
+ &i/3._ki*t6**3*t1*t3*t4**4*t5-33._ki/4._ki*t6**3*t1*t2**2*t4*t3**2-&
+ &t6*t1**2*t2**5*t4*t5/6._ki-t6*t1**2*t2**4*t4*t5**2/6._ki-t6*t1**2&
+ &*t2**4*t5*t3/9._ki-7._ki/9._ki*t6*t1*t2**4*t3*t4**2*t5+7._ki/18._ki*&
+ &t6*t1*t2**5*t3*t4*t5
+ !
+ stemp6=stemp7+t6**2*t1**2*t3*t2**4/4._ki-t6**3*t3**2*t2**3*t4**2-4&
+ &._ki*t6**3*t3**2*t4**4*t2+2._ki/9._ki*t1*t2**5*t3**2*t5+2._ki/9._ki*&
+ &t6*t1*t2**5*t3**2-t6*t1**2*t2**5*t3/18._ki-t6**3*t3*t5*t1**3/2._k&
+ &i+25._ki/4._ki*t6**3*t1**2*t4*t3**2-5._ki/2._ki*t6**3*t1**2*t2*t3**&
+ &2-55._ki/3._ki*t6**3*t1*t4**3*t3**2+t6**3*t4*t3**2*t2**4/8._ki+11.&
+ &_ki/12._ki*t6**3*t1*t3**2*t2**3+3._ki*t6**3*t3**2*t2**2*t4**3+10._k&
+ &i*t6**3*t1**2*t3*t5*t4**2+5._ki/4._ki*t6**3*t1**2*t3*t2**2*t5+11.&
+ &_ki*t6**3*t1*t3*t4**3*t5*t2+22._ki*t6**3*t1*t2*t4**2*t3**2-11._ki/&
+ &2._ki*t6**3*t1*t3*t2**2*t5*t4**2+3._ki/8._ki*t6**2*t1*t3*t2**5*t4
+ !
+ stemp7=1._ki/t1/t2**8/t3
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ stemp5=195._ki/2._ki*t6**2*t2*t3**2*t4**2*t5-135._ki*t6**2*t3**2*t4*&
+ &t5*t2**2+39._ki/2._ki*t6**3*t1*t4**2*t2**3-27._ki/2._ki*t6**3*t1*t4&
+ &*t2**4-45._ki/2._ki*t6**2*t4*t3*t2**5-18._ki*t6**2*t4**3*t5**2*t2*&
+ &*3-12._ki*t6**3*t1*t5*t2**4+30._ki*t6**3*t1*t5**2*t2**3-15._ki*t6*&
+ &*2*t4*t5**3*t2**4-9._ki*t6**2*t1*t5**2*t2**4+15._ki/2._ki*t6**2*t1&
+ &*t5*t2**5-15._ki*t6**2*t1*t5**3*t2**3-30._ki*t6**2*t3*t5**2*t2**4&
+ &+6._ki*t6**2*t4**4*t5**2*t2**2+90._ki*t6**2*t4**3*t5**2*t3*t2-195&
+ &._ki*t6**2*t4**2*t5**2*t3*t2**2-160._ki*t6**3*t4*t3*t5*t2**3-t2**&
+ &9*t5/12._ki+t4*t2**9/6._ki-90._ki*t6**3*t1*t3*t5*t2**2-195._ki*t6**&
+ &3*t1*t4**2*t3*t5+7._ki/12._ki*t6**2*t2**8-5._ki/4._ki*t6**2*t5*t2**&
+ &7+95._ki*t6**3*t3**2*t4**3-t4**2*t5*t2**7/12._ki+t4*t2**8*t5/6._ki&
+ &-10._ki*t6**2*t2**2*t3**3+3._ki/2._ki*t6**2*t5**2*t2**6-45._ki*t6**&
+ &3*t3**2*t1*t4-375._ki/2._ki*t6**3*t3**2*t2*t4**2+120._ki*t6**3*t2*&
+ &*2*t3**2*t4+3._ki/2._ki*t6**2*t1**2*t5**2*t2**2+30._ki*t6**3*t1*t3&
+ &**2*t2-3._ki*t3**2*t2**2*t1*t6**2
+ !
+ stemp4=-12._ki*t6**2*t3*t5*t2**5-25._ki/4._ki*t6**3*t4**2*t2**5-25._k&
+ &i*t6**3*t2**3*t3**2+7._ki/3._ki*t6**2*t4**4*t2**4+195._ki*t6**3*t1&
+ &*t4**2*t5**2*t2-7._ki*t6**3*t4**4*t2**3+54._ki*t6**2*t4*t5*t3*t2*&
+ &*4-9._ki/4._ki*t6**3*t1**2*t2**3-5._ki*t6**3*t2**5*t3+2._ki*t6**3*t&
+ &4**5*t2**2+19._ki/2._ki*t6**3*t4**3*t2**4+t6*t4*t2**8+20._ki*t6**3&
+ &*t4**5*t5**2+39._ki/2._ki*t6**2*t4**2*t5**2*t2**4-30._ki*t6**2*t4*&
+ &*3*t5**3*t2**2+10._ki*t6**2*t4**4*t5**3*t2+65._ki/2._ki*t6**2*t4**&
+ &2*t5**3*t2**3-8._ki*t6**3*t4*t5*t2**5-35._ki/6._ki*t6**2*t1*t4**2*&
+ &t2**4+9._ki*t6**2*t3**2*t2**4-15._ki*t6**2*t1*t4**2*t5**2*t2**2+2&
+ &5._ki*t6**3*t4**2*t5*t2**4+140._ki*t6**3*t4**4*t3*t5+32._ki*t6**3*&
+ &t4*t3*t2**4+95._ki*t6**3*t4**3*t5**2*t2**2+76._ki*t6**3*t4**3*t3*&
+ &t2**2-90._ki*t6**3*t1*t4**3*t5**2+18._ki*t6**3*t1*t2**3*t3-7._ki*t&
+ &6**2*t4**3*t2**5+7._ki/12._ki*t1**2*t2**4*t6**2-54._ki*t6**3*t1*t2&
+ &**2*t3*t4+stemp5+t3*t2**8/6._ki+91._ki/12._ki*t6**2*t4**2*t2**6-20&
+ &._ki*t6**2*t1*t4*t5*t2**4-5._ki/4._ki*t6*t4**2*t2**7
+ !
+ stemp5=54._ki*t6**3*t1*t4*t5*t2**3+t6*t1*t2**7/2._ki-78._ki*t6**3*t1&
+ &*t4**2*t5*t2**2-65._ki/4._ki*t6**2*t4**2*t5*t2**5-5._ki*t6**2*t4**&
+ &4*t5*t2**3-15._ki*t6**2*t4**3*t3*t2**3+30._ki*t6**3*t1**2*t5**2*t&
+ &4-45._ki/2._ki*t6**3*t1**2*t5**2*t2-3._ki*t6**3*t1**2*t2*t3+25._ki*&
+ &t6**3*t3*t2**4*t5+15._ki*t6**2*t4**3*t5*t2**4-7._ki/2._ki*t6**2*t4&
+ &*t2**7-7._ki/2._ki*t6**2*t1*t2**6+t6*t4**3*t2**6/2._ki+5._ki*t6**2*&
+ &t3*t2**6+3._ki*t6**3*t1*t2**5-t6**3*t2**7/4._ki-5._ki/2._ki*t6**3*t&
+ &5**2*t2**5+40._ki*t6**2*t1*t4*t5**3*t2**2+t6**3*t5*t2**6+2._ki*t6&
+ &**3*t4*t2**6+5._ki/2._ki*t6**2*t5**3*t2**5-5._ki/4._ki*t6**2*t1**2*&
+ &t5*t2**3+24._ki*t6**2*t1*t4*t5**2*t2**3-t4*t3*t2**7/6._ki+375._ki*&
+ &t6**3*t4**2*t3*t5*t2**2+15._ki*t6**3*t1**2*t3*t5-28._ki*t6**3*t4*&
+ &*4*t3*t2-75._ki*t6**3*t4**2*t3*t2**3-70._ki*t6**3*t4**4*t5**2*t2+&
+ &15._ki/2._ki*t6**2*t2**6*t4*t5-9._ki*t6**2*t4*t5**2*t2**5+3._ki*t6*&
+ &*3*t1**2*t2**2*t4-60._ki*t6**2*t1*t2*t3*t4*t5**2-380._ki*t6**3*t4&
+ &**3*t3*t5*t2
+ !
+ stemp3=stemp5-t6*t2**9/4._ki+stemp4+5._ki/2._ki*t6**2*t1**2*t2*t5**3&
+ &-15._ki/2._ki*t6**2*t1*t2**4*t3-27._ki*t6**2*t2**3*t3**2*t4+15._ki*&
+ &t6**2*t2*t3**3*t4+45._ki*t6**2*t2**3*t3**2*t5+39._ki/2._ki*t6**2*t&
+ &3**2*t4**2*t2**2-15._ki*t6**2*t1*t2*t5*t3**2-25._ki*t6**2*t1*t4**&
+ &2*t5**3*t2-78._ki*t6**2*t4**2*t5*t3*t2**3+270._ki*t6**3*t1*t3*t5*&
+ &t2*t4-135._ki*t6**3*t1*t4*t5**2*t2**2+36._ki*t6**2*t4**3*t5*t3*t2&
+ &**2+135._ki*t6**2*t4*t5**2*t3*t2**3-12._ki*t6**3*t1**2*t5*t2*t4+3&
+ &6._ki*t6**3*t1*t4**3*t5*t2+39._ki*t6**3*t1*t2*t3*t4**2-24._ki*t6**&
+ &2*t1*t3*t4*t5*t2**2+25._ki/2._ki*t6**2*t1*t4**2*t5*t2**3+10._ki*t6&
+ &**2*t1*t2**3*t3*t4+45._ki*t6**2*t1*t5**2*t3*t2**2-t4**2*t2**8/12&
+ &._ki+28._ki/3._ki*t6**2*t1*t4*t2**5-t6*t4*t2**6*t1/2._ki+18._ki*t6**&
+ &2*t1*t2**3*t3*t5-t2**10/12._ki+20._ki*t6**3*t4*t5**2*t2**4+65._ki/&
+ &2._ki*t6**2*t4**2*t3*t2**4-9._ki*t6**3*t1*t4**3*t2**2-8._ki*t6**3*&
+ &t4**5*t5*t2-125._ki/2._ki*t6**3*t4**2*t5**2*t2**3-38._ki*t6**3*t4*&
+ &*3*t5*t2**3+28._ki*t6**3*t4**4*t5*t2**2+9._ki*t6**3*t1**2*t5*t2**&
+ &2
+ !
+ stemp4=1._ki/t2**10*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(-t3*t2**3+4._ki*t2**2*t1*t6+t2**2*t3*t4-3._ki*t3*t6*t2**2-&
+ &t3*t5*t2**2+9._ki*t6*t4*t2*t3+2._ki*t3**2*t2+4._ki*t5*t2*t1*t6+t3*&
+ &t5*t2*t4-4._ki*t4*t2*t1*t6-6._ki*t4**2*t3*t6-4._ki*t4*t1*t6*t5-2._k&
+ &i*t3*t1*t6)*(-t4+t2)/t2**4/t3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)&
+ &/12._ki
+ !
+ stemp9=-5._ki/4._ki*t6**3*t1**2*t2**6*t3*t5-41._ki/8._ki*t6**2*t1*t4*&
+ &*2*t3**2*t2**6+30._ki*t6**3*t1**4*t4**3*t5*t2+65._ki/2._ki*t6**3*t&
+ &1**4*t2*t3*t4**2-81._ki/2._ki*t6**2*t1**3*t3**2*t2**3*t4-t6**2*t1&
+ &*t2**8*t3**2/8._ki-55._ki/6._ki*t6**3*t1**3*t2**5*t3+11._ki/3._ki*t6&
+ &**3*t1**3*t4*t2**6+t6**3*t1**2*t2**7*t3/4._ki+9._ki/4._ki*t6**2*t1&
+ &**3*t5**2*t2**6-55._ki/12._ki*t6**3*t1**3*t5**2*t2**5+11._ki/6._ki*&
+ &t6**3*t1**3*t5*t2**6-45._ki*t6**2*t1**3*t4**3*t5**3*t2**2+16._ki*&
+ &t6**2*t1**2*t4*t3**2*t2**5-40._ki*t6**2*t1**2*t4*t3**3*t2**3-7._k&
+ &i/4._ki*t6**2*t1**4*t2**6+15._ki*t6**2*t1**3*t4**4*t5**3*t2-165._k&
+ &i*t6**3*t1**2*t4**3*t3**2*t2**2+55._ki*t6**2*t1*t4**3*t3**2*t5*t&
+ &2**4-45._ki*t6**2*t1**3*t3*t5**2*t2**4-45._ki/2._ki*t6**2*t1**3*t4&
+ &*t5**3*t2**4+195._ki/4._ki*t6**2*t1**3*t4**2*t5**3*t2**3+405._ki/2&
+ &._ki*t6**2*t1**3*t4*t5**2*t3*t2**3+45._ki/2._ki*t6**2*t1**3*t4**3*&
+ &t5*t2**4+54._ki*t6**2*t1**3*t4**3*t5*t3*t2**2-15._ki/2._ki*t6**2*t&
+ &1**3*t4**4*t5*t2**3+91._ki/8._ki*t6**2*t1**3*t4**2*t2**6
+ !
+ stemp8=7._ki/2._ki*t6**2*t1**3*t4**4*t2**4-21._ki/2._ki*t6**2*t1**3*t&
+ &4**3*t2**5+27._ki/2._ki*t6**2*t1**3*t3**2*t2**4+t6*t1**3*t4**3*t2&
+ &**6/2._ki-5._ki/4._ki*t6*t1**3*t4**2*t2**7+9._ki*t6**2*t1**4*t2**3*&
+ &t3*t5-18._ki*t6**2*t1**3*t3*t5*t2**5-125._ki/12._ki*t6**2*t1*t2**5&
+ &*t3**3*t4+117._ki/4._ki*t6**2*t1**3*t3**2*t2**2*t4**2-40._ki/3._ki*&
+ &t6**2*t1*t4**5*t3**3*t2-13._ki*t6**2*t1*t4**4*t3**2*t2**4+117._ki&
+ &/4._ki*t6**2*t1**3*t4**2*t5**2*t2**4-205._ki/8._ki*t6**2*t1*t4**2*&
+ &t3**2*t2**5*t5+80._ki*t6**2*t1**2*t4*t3**2*t5*t2**4-95._ki/3._ki*t&
+ &6**2*t1**2*t3**3*t4**3*t2+275._ki/6._ki*t6**3*t1**3*t4**2*t5*t2**&
+ &4+110._ki/3._ki*t6**3*t1**3*t4*t5**2*t2**4+125._ki/2._ki*t6**2*t1**&
+ &2*t3**3*t4**2*t2**2-1375._ki/4._ki*t6**3*t1**3*t3**2*t4**2*t2+41.&
+ &_ki/4._ki*t6**3*t1**2*t4**2*t3*t2**5+5._ki*t6**2*t1**4*t2**3*t3*t4&
+ &+45._ki/4._ki*t6**2*t1**3*t2**6*t4*t5-125._ki/4._ki*t6**3*t1**2*t4*&
+ &t3**2*t2**4-125._ki/12._ki*t6**2*t1**2*t4**2*t3*t2**6-35._ki/3._ki*&
+ &t6**2*t1**2*t4**4*t3*t2**4-t1**3*t4*t3*t2**7/18._ki-117._ki*t6**2&
+ &*t1**3*t4**2*t5*t3*t2**3+5._ki/2._ki*t6**3*t1**4*t2**5+stemp9
+ !
+ stemp9=-t1**3*t2**9*t5/9._ki-t1**3*t4**2*t2**8/9._ki+325._ki/2._ki*t6&
+ &**3*t1**4*t4**2*t5**2*t2-75._ki*t6**3*t1**4*t3*t5*t2**2+t1**3*t3&
+ &*t2**8/18._ki-8._ki*t6**2*t1**2*t2**6*t3*t4*t5+38._ki*t6**2*t1**2*&
+ &t4**3*t3**2*t2**3+40._ki*t6**2*t1*t4**5*t3**2*t5*t2**2-45._ki*t6*&
+ &*3*t1**4*t2**2*t3*t4-22._ki*t6**3*t1**2*t4**3*t3*t2**4-16._ki*t6*&
+ &*3*t1**2*t4**5*t3*t2**2+95._ki/6._ki*t6**2*t1**2*t4**3*t3*t2**5+2&
+ &5._ki*t6**2*t1**2*t4**2*t5*t3*t2**5+2._ki/9._ki*t1**3*t4*t2**9-2._k&
+ &i*t6**2*t1*t4**6*t3**2*t2**2+8._ki*t6**2*t1*t4**5*t3**2*t2**3-20&
+ &._ki*t6**2*t1**2*t3*t5**2*t2**5*t4+25._ki/2._ki*t6**3*t1**2*t4*t5*&
+ &t2**5*t3-205._ki/4._ki*t6**3*t1**2*t4**2*t5*t2**4*t3-27._ki/2._ki*t&
+ &6**2*t1**3*t4*t5**2*t2**5-12._ki*t6**2*t1**4*t2**2*t3*t4*t5-30._k&
+ &i*t6**2*t1**4*t5**2*t3*t2*t4-1375._ki/12._ki*t6**3*t1**3*t4**2*t5&
+ &**2*t2**3-38._ki*t6**2*t1**2*t4**3*t5*t3*t2**4-20._ki*t6**2*t1**2&
+ &*t4**5*t3*t5**2*t2+t6**2*t2**8*t3**3/12._ki-65._ki*t6**3*t1**4*t4&
+ &**2*t5*t2**2+stemp8
+ !
+ stemp7=205._ki/2._ki*t6**3*t1**2*t4**2*t3**2*t2**3-20._ki*t6**3*t1**&
+ &2*t4**6*t3*t5-10._ki*t6**2*t1*t4**6*t3**2*t5*t2-15._ki/2._ki*t6**2&
+ &*t1**4*t5**3*t2**3+15._ki/4._ki*t6**2*t1**4*t5*t2**5-21._ki/4._ki*t&
+ &6**2*t1**3*t4*t2**7+t6*t1**3*t4*t2**8+61._ki/12._ki*t6**2*t2**6*t&
+ &3**3*t4**2+5._ki/4._ki*t6**2*t1*t2**6*t3**3-85._ki/6._ki*t6**2*t2**&
+ &5*t3**3*t4**3+15._ki/4._ki*t6**2*t1**3*t5**3*t2**5-15._ki/8._ki*t6*&
+ &*2*t1**3*t5*t2**7-325._ki/2._ki*t6**3*t1**4*t4**2*t3*t5+7._ki/8._ki&
+ &*t6**2*t1**3*t2**8+11._ki*t6**2*t1*t3**2*t4**3*t2**5-275._ki/2._ki&
+ &*t6**3*t1**3*t4**2*t3*t2**3-5._ki/2._ki*t6**3*t1**2*t4*t3*t2**6+1&
+ &30._ki/3._ki*t6**2*t1*t4**4*t3**3*t2**2-44._ki/3._ki*t6**3*t1**3*t4&
+ &*t5*t2**5-3._ki/2._ki*t6**3*t1*t4*t3**2*t2**6+stemp9-3._ki/4._ki*t6&
+ &**3*t1**5*t2**3+4._ki*t6**3*t1**2*t4**6*t3*t2-t6**2*t2**7*t3**3*&
+ &t4-10._ki*t6**3*t1**4*t5*t2**4+25._ki/3._ki*t6**2*t1**2*t3**3*t2**&
+ &4-t1**3*t4**2*t5*t2**7/9._ki+225._ki*t6**3*t1**4*t3*t5*t2*t4-65._k&
+ &i*t6**2*t1*t4**4*t3**2*t5*t2**3
+ !
+ stemp9=stemp7-585._ki/2._ki*t6**2*t1**3*t4**2*t5**2*t3*t2**2-55._ki*&
+ &t6**2*t1*t2**3*t3**3*t4**3-11._ki/24._ki*t6**3*t1**3*t2**7-85._ki/&
+ &4._ki*t6**3*t1*t4**3*t3**2*t2**4+12._ki*t6**2*t1**4*t4*t5**2*t2**&
+ &3-15._ki/2._ki*t6**2*t1**4*t3**2*t5*t2+45._ki/2._ki*t6**2*t1**4*t5*&
+ &*2*t3*t2**2+81._ki*t6**2*t1**3*t4*t5*t3*t2**4-44._ki/3._ki*t6**3*t&
+ &1**3*t4**5*t5*t2-t6*t1**3*t2**9/4._ki+11._ki/3._ki*t6**3*t1**3*t4*&
+ &*5*t2**2+209._ki/12._ki*t6**3*t1**3*t4**3*t2**4-275._ki/6._ki*t6**3&
+ &*t1**3*t3**2*t2**3+110._ki/3._ki*t6**3*t1**3*t4**5*t5**2+1045._ki/&
+ &6._ki*t6**3*t1**3*t3**2*t4**3-275._ki/24._ki*t6**3*t1**3*t4**2*t2*&
+ &*5-77._ki/6._ki*t6**3*t1**3*t4**4*t2**3-75._ki/2._ki*t6**2*t1**2*t4&
+ &**2*t3**2*t2**4-385._ki/3._ki*t6**3*t1**3*t4**4*t5**2*t2+1045._ki/&
+ &6._ki*t6**3*t1**3*t4**3*t5**2*t2**2+t6**3*t1*t3**2*t2**7/8._ki+t6&
+ &**2*t1**2*t5*t2**7*t3+28._ki*t6**2*t1**2*t4**4*t5*t3*t2**3+26._ki&
+ &*t6**3*t1**2*t4**4*t3*t2**3+205._ki/6._ki*t6**2*t1*t2**4*t3**3*t4&
+ &**2+190._ki*t6**2*t1**2*t3**2*t4**3*t5*t2**2
+ !
+ stemp8=stemp9+5._ki/2._ki*t6**2*t1**2*t3*t5**2*t2**6-t1**3*t2**10/9&
+ &._ki+5._ki/4._ki*t6**2*t1*t4*t3**2*t2**7-15._ki*t6**2*t1**3*t3**3*t&
+ &2**2-35._ki/12._ki*t6**2*t1**4*t4**2*t2**4-15._ki/4._ki*t6**2*t1**4&
+ &*t2**4*t3-3._ki/2._ki*t6**2*t1**4*t3**2*t2**2+15._ki/4._ki*t6**3*t1&
+ &**2*t3**2*t2**5-5._ki/2._ki*t6**2*t1**2*t3**2*t2**6-405._ki/2._ki*t&
+ &6**2*t1**3*t3**2*t5*t2**2*t4+135._ki*t6**2*t1**3*t4**3*t5**2*t3*&
+ &t2+585._ki/4._ki*t6**2*t1**3*t3**2*t5*t2*t4**2-34._ki*t6**3*t1*t4*&
+ &*5*t3**2*t2**2+25._ki/4._ki*t6**2*t1*t4*t3**2*t2**6*t5-40._ki*t6**&
+ &3*t1**2*t4**5*t3**2-4._ki*t6**3*t1*t4**7*t3**2+5._ki*t6**3*t1**5*&
+ &t3*t5+t6**3*t1**5*t2**2*t4+10._ki*t6**3*t1**5*t5**2*t4-15._ki/2._k&
+ &i*t6**3*t1**5*t5**2*t2+3._ki*t6**3*t1**5*t5*t2**2-t6**3*t1**5*t2&
+ &*t3-45._ki/2._ki*t6**2*t1**3*t4**3*t3*t2**3+61._ki/8._ki*t6**3*t1*t&
+ &4**2*t3**2*t2**5+1375._ki/2._ki*t6**3*t1**3*t4**2*t3*t5*t2**2+80.&
+ &_ki*t6**3*t1**2*t4**5*t3*t5*t2-4._ki*t6**3*t1**5*t5*t2*t4+18._ki*t&
+ &6**3*t1*t4**6*t3**2*t2
+ !
+ stemp9=stemp8-135._ki/4._ki*t6**2*t1**3*t4*t3*t2**5+275._ki/6._ki*t6*&
+ &*3*t1**3*t3*t2**4*t5+35._ki*t6**3*t1*t4**4*t3**2*t2**3+10._ki/3._k&
+ &i*t6**2*t1**2*t4*t3*t2**7-14._ki*t6**2*t1**2*t4**4*t3**2*t2**2-5&
+ &._ki/8._ki*t6**2*t1*t2**7*t3**2*t5-130._ki*t6**3*t1**2*t4**4*t3*t5&
+ &*t2**2-225._ki/2._ki*t6**3*t1**4*t4*t5**2*t2**2+154._ki/3._ki*t6**3&
+ &*t1**3*t4**4*t5*t2**2-209._ki/3._ki*t6**3*t1**3*t4**3*t5*t2**3-70&
+ &._ki*t6**2*t1**2*t3**2*t4**4*t5*t2-15._ki/2._ki*t6**2*t1**4*t4**2*&
+ &t5**2*t2**2+25._ki*t6**3*t1**4*t5**2*t2**3-5._ki/12._ki*t6**2*t1**&
+ &2*t3*t2**8+15._ki/2._ki*t6**2*t1**3*t3*t2**6-9._ki/2._ki*t6**2*t1**&
+ &4*t5**2*t2**4-25._ki/2._ki*t6**2*t1**2*t2**5*t3**2*t5+418._ki/3._ki&
+ &*t6**3*t1**3*t4**3*t3*t2**2+110._ki*t6**3*t1**2*t4**3*t3*t5*t2**&
+ &3-375._ki/2._ki*t6**2*t1**2*t3**2*t4**2*t5*t2**3+45._ki/2._ki*t6**2&
+ &*t1**3*t3**3*t2*t4+770._ki/3._ki*t6**3*t1**3*t4**4*t3*t5-10._ki*t6&
+ &**2*t1**4*t4*t5*t2**4-25._ki/2._ki*t6**2*t1**4*t4**2*t5**3*t2+10.&
+ &_ki/3._ki*t6**2*t1**2*t4**5*t3*t2**3+220._ki*t6**3*t1**3*t4*t3**2*&
+ &t2**2-154._ki/3._ki*t6**3*t1**3*t4**4*t3*t2
+ !
+ stemp6=stemp9+130._ki*t6**3*t1**2*t4**4*t3**2*t2+70._ki*t6**2*t1**2&
+ &*t4**4*t3*t5**2*t2**2-15._ki/2._ki*t6**3*t1**4*t4**3*t2**2+65._ki/&
+ &4._ki*t6**3*t1**4*t4**2*t2**3-45._ki/4._ki*t6**3*t1**4*t4*t2**4-75&
+ &._ki/2._ki*t6**3*t1**4*t3**2*t4-75._ki*t6**3*t1**4*t4**3*t5**2+15.&
+ &_ki*t6**3*t1**4*t2**3*t3+25._ki*t6**3*t1**4*t3**2*t2+176._ki/3._ki*&
+ &t6**3*t1**3*t4*t3*t2**4-27._ki*t6**2*t1**3*t4**3*t5**2*t2**3+25.&
+ &_ki/4._ki*t6**2*t1**4*t4**2*t5*t2**3+135._ki/2._ki*t6**2*t1**3*t2**&
+ &3*t3**2*t5+195._ki/4._ki*t6**2*t1**3*t4**2*t3*t2**4-195._ki/8._ki*t&
+ &6**2*t1**3*t4**2*t5*t2**5+2._ki/9._ki*t1**3*t4*t2**8*t5+70._ki/3._k&
+ &i*t6**2*t4**4*t3**3*t2**4-68._ki/3._ki*t6**2*t4**5*t3**3*t2**3+12&
+ &._ki*t6**2*t4**6*t3**3*t2**2-8._ki/3._ki*t6**2*t4**7*t3**3*t2+14._k&
+ &i/3._ki*t6**2*t1**4*t4*t2**5-880._ki/3._ki*t6**3*t1**3*t4*t3*t5*t2&
+ &**3-95._ki*t6**2*t1**2*t4**3*t3*t5**2*t2**3-2090._ki/3._ki*t6**3*t&
+ &1**3*t4**3*t3*t5*t2+9._ki*t6**2*t1**3*t4**4*t5**2*t2**2+20._ki*t6&
+ &**2*t1**4*t4*t5**3*t2**2-8._ki*t6**2*t1**2*t4**5*t5*t3*t2**2+45.&
+ &_ki*t6**3*t1**4*t4*t5*t2**3+125._ki/2._ki*t6**2*t1**2*t4**2*t3*t5*&
+ &*2*t2**4
+ !
+ stemp7=1._ki/t1**3/t2**10
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp2=(-6._ki*t6*t2**5*t4*t5+4._ki*t6*t2**4*t4**2*t5+6._ki*t3*t4*t6&
+ &*t2**4+18._ki*t6**2*t1*t2**3*t4-144._ki*t6**3*t1*t5*t4**2-t3*t2**&
+ &6+t5**2*t2**6+3._ki*t6**2*t2**6+t6*t2**7+t5*t2**7-t2**6*t4*t5-t4&
+ &*t5**2*t2**5-12._ki*t6**2*t1*t2**4+18._ki*t6**3*t1**2*t5+6._ki*t6*&
+ &*3*t5*t2**4+2._ki*t6*t2**6*t5-t6*t1*t2**5+48._ki*t6**3*t4**4*t5+2&
+ &4._ki*t6**2*t2**4*t4**2-12._ki*t6**2*t2**3*t4**3-3._ki*t6*t2**6*t4&
+ &+2._ki*t6*t2**5*t4**2-15._ki*t6**2*t2**5*t4+120._ki*t6**3*t3*t4**3&
+ &-90._ki*t6**3*t4*t1*t3-216._ki*t6**3*t3*t2*t4**2+126._ki*t6**3*t3*&
+ &t2**2*t4-2._ki*t6*t1*t2**4*t5-54._ki*t1*t6**3*t2**2*t5-42._ki*t6**&
+ &3*t2**3*t5*t4+108._ki*t6**3*t2**2*t5*t4**2-120._ki*t6**3*t4**3*t5&
+ &*t2+54._ki*t6**3*t3*t2*t1-24._ki*t6**3*t3*t2**3-4._ki*t6*t2**5*t3-&
+ &2._ki*t3*t5*t2**5+180._ki*t1*t6**3*t4*t5*t2)/t2**8*z_log(t1*t6/t2&
+ &**2,1._ki)/12._ki
+ !
+ stemp6=t4*t5*t2*t6**2*t1**2/2._ki+t3**2*t4*t5**2*t2**2/12._ki+t3*t2&
+ &**2*t5**2*t1*t6/3._ki+t3*t5*t2**3*t1*t6/3._ki+t6*t3**3*t2**2/3._ki&
+ &+2._ki/3._ki*t3*t2**2*t6**2*t5*t1+t2**3*t3**3/12._ki-t3**2*t2**3*t&
+ &6**2/4._ki-t2**2*t4*t1*t6**2*t3+2._ki/3._ki*t2*t4**2*t1*t6**2*t3+t&
+ &4*t5*t3**2*t6*t2**2/2._ki+t3**2*t2**3*t4*t5/12._ki+t3*t2**3*t6**2&
+ &*t1/3._ki-t2*t5**2*t1**2*t6**2/2._ki-t2**2*t1**2*t6**2*t5/2._ki-t3&
+ &**2*t5**2*t2**3/12._ki-t3**2*t2**4*t6/12._ki+t4**3*t3**2*t6**2+t2&
+ &**2*t5*t3**3/6._ki
+ !
+ stemp5=stemp6-t3**2*t2**4*t5/12._ki+t1**2*t6**2*t3*t2/6._ki-t1*t6*t&
+ &3**2*t2**2/4._ki-t5*t3**2*t6*t2**3/6._ki+t1*t6**2*t3**2*t4/2._ki-t&
+ &2*t6*t3**3*t4/2._ki-t2*t1*t6**2*t3**2/3._ki+t5*t1**2*t6**2*t3/3._k&
+ &i+t4*t5**2*t6**2*t1**2/2._ki-2._ki*t2*t4**2*t3**2*t6**2+5._ki/4._ki&
+ &*t2**2*t4*t3**2*t6**2+t2**3*t4*t6*t3**2/4._ki-t2**2*t4**2*t6*t3*&
+ &*2/6._ki-t4*t3*t5*t2**2*t1*t6/3._ki-t2*t5*t1*t6*t3**2/2._ki-2._ki*t&
+ &3*t4*t5*t2*t6**2*t1+4._ki/3._ki*t3*t4**2*t5*t6**2*t1-t3**2*t4**2*&
+ &t5*t2*t6/3._ki-t3*t4*t5**2*t2*t1*t6/3._ki
+ !
+ stemp6=1._ki/t3**2/t2**5*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)
+ !
+ stemp4=stemp5*stemp6
+ !
+ stemp7=7._ki/36._ki*t6*t1*t3*t2**7-25._ki/4._ki*t6**3*t1**2*t4*t3**2+&
+ &15._ki/4._ki*t6**3*t1**2*t2*t3**2+55._ki/3._ki*t6**3*t1*t4**3*t3**2&
+ &-9._ki/8._ki*t6**3*t4*t3**2*t2**4-11._ki/3._ki*t6**3*t1*t3**2*t2**3&
+ &-7._ki*t6**3*t3**2*t2**2*t4**3-t6**2*t1**2*t3*t2**4/2._ki+4._ki*t6&
+ &**3*t3**2*t2**3*t4**2+6._ki*t6**3*t3**2*t4**4*t2+t6**3*t3*t5*t1*&
+ &*3/2._ki-4._ki/9._ki*t6*t1*t2**5*t3**2+t6*t1**2*t2**5*t3/18._ki+3._k&
+ &i/8._ki*t6**2*t2**6*t1*t3-t6*t1**2*t5*t2**6/6._ki-2._ki/9._ki*t1*t2&
+ &**5*t3**2*t5+7._ki/36._ki*t1*t2**6*t3*t5**2+7._ki/36._ki*t1*t3*t2**&
+ &7*t5-t6*t1**2*t2**5*t5**2/6._ki+22._ki/3._ki*t6**3*t1*t3*t4**4*t5+&
+ &77._ki/4._ki*t6**3*t1*t2**2*t4*t3**2-10._ki*t6**3*t1**2*t3*t5*t4**&
+ &2-15._ki/4._ki*t6**3*t1**2*t3*t2**2*t5
+ !
+ stemp6=-55._ki/3._ki*t6**3*t1*t3*t4**3*t5*t2+stemp7+t6*t1**2*t2**4*&
+ &t4*t5**2/6._ki+t6*t1**2*t2**4*t5*t3/9._ki+11._ki/12._ki*t6**3*t1*t3&
+ &*t5*t2**4-7._ki/12._ki*t6*t1*t2**6*t4*t3+2._ki/3._ki*t6*t1*t4*t3**2&
+ &*t2**4+7._ki/18._ki*t6*t1*t2**5*t4**2*t3+t6**3*t3**2*t2**5/8._ki-2&
+ &._ki*t6**3*t3**2*t4**5-t1*t3**2*t2**6/9._ki-33._ki*t6**3*t1*t2*t4*&
+ &*2*t3**2+33._ki/2._ki*t6**3*t1*t3*t2**2*t5*t4**2+7._ki/18._ki*t6*t1&
+ &*t2**6*t3*t5-7._ki/6._ki*t6*t1*t2**5*t3*t4*t5+7._ki/9._ki*t6*t1*t2*&
+ &*4*t3*t4**2*t5+3._ki*t6**2*t1*t3*t2**4*t4**2+3._ki/4._ki*t6**2*t1*&
+ &*2*t3*t2**3*t4-15._ki/8._ki*t6**2*t1*t3*t2**5*t4+t6*t1**2*t2**5*t&
+ &4*t5/6._ki-7._ki/36._ki*t1*t2**6*t3*t4*t5-7._ki/36._ki*t1*t2**5*t3*t&
+ &4*t5**2-3._ki/2._ki*t6**2*t1*t3*t2**3*t4**3+25._ki/2._ki*t6**3*t1**&
+ &2*t3*t4*t5*t2-77._ki/12._ki*t6**3*t1*t3*t2**3*t5*t4
+ !
+ stemp7=1._ki/t1/t2**8/t3
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ stemp2=-(-18._ki*t6**3*t1*t2+36._ki*t6**3*t1*t4-24._ki*t6**3*t4**3+3&
+ &._ki*t6**3*t2**3-18._ki*t6**3*t2**2*t4+36._ki*t6**3*t4**2*t2-2._ki*&
+ &t6**2*t1*t2**2-6._ki*t6**2*t1*t5*t2+t6**2*t2**4+3._ki*t6**2*t5*t2&
+ &**3-6._ki*t6**2*t2**2*t3-4._ki*t6**2*t2**3*t4+12._ki*t6**2*t5*t2*t&
+ &4**2+4._ki*t6**2*t2**2*t4**2-12._ki*t6**2*t5*t2**2*t4+12._ki*t6**2&
+ &*t2*t3*t4-6._ki*t6*t4*t5**2*t2**2+3._ki*t6*t2**3*t5**2+2._ki*t6*t2&
+ &**4*t5-4._ki*t6*t2**3*t4*t5-2._ki*t6*t3*t2**3-6._ki*t6*t2**2*t3*t5&
+ &+3._ki*t5**3*t2**3+3._ki*t5**2*t2**4)/t2**6*z_log(t1*t6/t2**2,1._k&
+ &i)/12._ki
+ !
+ stemp6=-2._ki/3._ki*t3**2*t2**3*t6**2*t5*t1-t3**2*t5**2*t2**3*t1*t6&
+ &+3._ki/2._ki*t3*t5**2*t2**2*t1**2*t6**2-2._ki*t6**3*t1**2*t3*t4*t5&
+ &*t2+3._ki/2._ki*t2*t3*t1**2*t6**3*t5**2+3._ki/2._ki*t6**2*t5*t2*t1*&
+ &t3**3-t3**3*t2**3*t6*t4*t5/3._ki-t2**2*t3**2*t1*t6**2*t5**2-4._ki&
+ &*t3**2*t1*t6**3*t5*t4**2-t2**2*t3**3*t6*t4*t5**2/2._ki+t2*t3**3*&
+ &t6**2*t5*t4**2-t2**2*t3**3*t6**2*t5*t4-t2**2*t3**2*t1*t6**3*t5-&
+ &3._ki*t3*t1**2*t6**3*t4*t5**2+3._ki/2._ki*t2*t3*t1**2*t6**2*t5**3-&
+ &t2**2*t3**2*t1*t6*t5**3-2._ki*t3**3*t6**3*t4**3-t1**3*t6**3*t5**&
+ &3+t2**3*t3**3*t6**3/4._ki-t3**4*t2**2*t6**2/2._ki-t6*t2**3*t3**4/&
+ &6._ki+t3**3*t2**4*t6**2/12._ki+t2**3*t3**3*t5**3/4._ki
+ !
+ stemp5=stemp6+t3**3*t5**2*t2**4/4._ki+4._ki/3._ki*t3**2*t2**2*t6**2*&
+ &t4*t5*t1-t6**3*t1*t3**2*t2**3/3._ki-t6**3*t1**2*t2*t3**2/3._ki-3.&
+ &_ki/2._ki*t2**2*t3**3*t6**3*t4+3._ki*t2*t3**3*t6**3*t4**2-t6*t5*t2&
+ &**2*t3**4/2._ki+t3**3*t2**2*t6**2*t4**2/3._ki+t3**3*t2**4*t6*t5/6&
+ &._ki-t3**3*t2**3*t6**2*t4/3._ki-t5**2*t2*t1**3*t6**3+t6**2*t2**2*&
+ &t1*t3**3/2._ki+t3**4*t2*t6**2*t4+t3**3*t2*t6**3*t1/2._ki+t2**3*t3&
+ &**3*t6**2*t5/4._ki+t2**3*t3**3*t6*t5**2/4._ki-t6**3*t5*t1**2*t3**&
+ &2-t3**3*t6**3*t1*t4+4._ki*t2*t3**2*t1*t6**3*t5*t4+2._ki*t2*t3**2*&
+ &t1*t6**2*t4*t5**2+4._ki/3._ki*t6**3*t1*t2**2*t4*t3**2+t6**3*t1**2&
+ &*t3*t2**2*t5-4._ki/3._ki*t6**3*t1*t2*t4**2*t3**2
+ !
+ stemp6=1._ki/t2**6/t3**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)
+ !
+ stemp4=stemp5*stemp6
+ !
+ stemp5=-(66._ki*t3**2*t2**3*t5**3+48._ki*t6**2*t1*t3*t4*t5*t2**2+72&
+ &._ki*t6**2*t1*t2*t3*t4*t5**2-28._ki*t3**3*t2**3*t6+33._ki*t6**3*t2&
+ &**3*t3**2+66._ki*t3**2*t2**4*t5**2-264._ki*t6**3*t3**2*t4**3-66._k&
+ &i*t6**2*t2**2*t3**3+17._ki*t6**2*t3**2*t2**4-120._ki*t6*t3**2*t2*&
+ &*2*t4*t5**2-68._ki*t6**2*t2**3*t3**2*t4+24._ki*t6**2*t1**2*t2*t5*&
+ &*3+180._ki*t6**3*t3**2*t1*t4-90._ki*t6**3*t1*t3**2*t2+68._ki*t6**2&
+ &*t3**2*t4**2*t2**2+51._ki*t6**2*t2**3*t3**2*t5+132._ki*t6**2*t2*t&
+ &3**3*t4+24._ki*t6**2*t1**2*t5**2*t2**2-198._ki*t6**3*t2**2*t3**2*&
+ &t4+396._ki*t6**3*t3**2*t2*t4**2+40._ki*t6*t2**4*t3**2*t5+60._ki*t6&
+ &*t3**2*t2**3*t5**2-84._ki*t6*t3**3*t2**2*t5+2._ki*t3**2*t2**2*t1*&
+ &t6**2-24._ki*t6**2*t1*t2**3*t3*t5+6._ki*t6**2*t1*t2*t5*t3**2-36._k&
+ &i*t6**2*t1*t5**2*t3*t2**2+204._ki*t6**2*t2*t3**2*t4**2*t5-204._ki&
+ &*t6**2*t3**2*t4*t5*t2**2-48._ki*t6*t1*t3*t2**3*t5**2-48._ki*t6*t1&
+ &*t3*t2**2*t5**3-80._ki*t6*t3**2*t2**3*t4*t5)/t3**2/t2**6/72._ki
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3_glob)
+ !
+ case(2)
+ !
+ select case(par4_glob)
+ !
+ case(2)
+ !
+ stemp6=30._ki*t3*t5**2*t2**2*t1**2*t6**2-60._ki*t3**2*t5**2*t2**3*t&
+ &1*t6+60._ki*t3**2*t2**3*t6**2*t5*t1+480._ki*t6**2*t4**4*t3*t5**2*&
+ &t2**2-80._ki*t6**2*t4**4*t5*t2**3*t3+90._ki*t6**2*t4**2*t3*t5**2*&
+ &t2**4+9._ki*t6**2*t1*t3*t2**4*t4**2-75._ki*t6*t1*t4*t5**4*t2**2*t&
+ &3-3._ki*t6**2*t1*t3*t2**5*t4-30._ki*t6**2*t1*t4*t5*t2**4*t3-540._k&
+ &i*t6**2*t1*t4**2*t3*t5**2*t2**2-720._ki*t6**2*t1*t4**2*t5**3*t2*&
+ &t3+240._ki*t6**2*t1*t4*t5**3*t3*t2**2+180._ki*t6**2*t4*t3**2*t5**&
+ &2*t2**3-120._ki*t6*t1*t4*t5**3*t3*t2**3-120._ki*t6*t4**2*t3*t5**3&
+ &*t2**4-75._ki*t6*t4**2*t5**4*t3*t2**3-36._ki*t6*t4*t5*t2**5*t3**2&
+ &+108._ki*t6*t4**2*t3**2*t5*t2**4-36._ki*t6*t4**2*t5**2*t2**5*t3+9&
+ &._ki*t6**3*t1*t4**2*t5*t2**4-45._ki*t6**3*t4**2*t3*t5**2*t2**3
+ !
+ stemp5=stemp6-20._ki*t3**4*t2**2*t6**2-5._ki*t2**3*t3**3*t6**3-5._ki&
+ &*t1**3*t6**3*t5**3-4._ki*t3**3*t6*t2**5+40._ki*t6**3*t4**6*t5**3-&
+ &t6**2*t4**4*t2**6-50._ki*t2**2*t3**2*t1*t6*t5**3+40._ki*t2*t3*t1*&
+ &*2*t6**2*t5**3+225._ki*t3*t1**2*t6**3*t4*t5**2-45._ki*t2**2*t3**2&
+ &*t1*t6**3*t5+450._ki*t2*t3**2*t1*t6**3*t5*t4-600._ki*t2*t3**2*t1*&
+ &t6**2*t4*t5**2+640._ki*t6**2*t4**4*t3*t5**3*t2-15._ki*t6**2*t4**2&
+ &*t5*t2**5*t3+70._ki*t6**2*t4**3*t5*t2**4*t3-36._ki*t6*t1*t4*t3*t2&
+ &**4*t5**2-150._ki*t6*t4*t5**3*t3**2*t2**3-300._ki*t3**2*t2**2*t6*&
+ &*2*t4*t5*t1+200._ki*t3**3*t2**3*t6*t4*t5-15._ki*t3*t2**2*t6**3*t4&
+ &*t1**2+25._ki*t3**2*t2**3*t1*t6**2*t4-5._ki*t3*t2**3*t1**2*t6**2*&
+ &t5+6._ki*t6*t1*t2**5*t3*t4*t5
+ !
+ stemp6=-3._ki*t6*t1*t2**6*t4*t3-80._ki*t6**2*t5*t2*t1*t3**3-1125._ki&
+ &*t6**3*t4**3*t3**2*t5*t2+405._ki*t6**3*t4**2*t3**2*t5*t2**2-400.&
+ &_ki*t2**2*t3**3*t6**2*t5*t4+60._ki*t6**2*t1*t4**2*t5**4*t2**2+7._k&
+ &i*t6**2*t1*t4**3*t5*t2**4-140._ki*t6**2*t1*t4**3*t5**4*t2-3._ki*t&
+ &6**2*t1*t4**2*t5*t2**5-15._ki*t6**2*t1*t4**2*t5**2*t2**4+60._ki*t&
+ &6**2*t1*t4**2*t5**3*t2**3-140._ki*t6**2*t1*t4**3*t5**3*t2**2-3._k&
+ &i/2._ki*t6**2*t1**2*t4*t5*t2**4-t4**3*t2**9/4._ki+stemp5+30._ki*t6&
+ &**2*t1**2*t4*t5**4*t2-15._ki/2._ki*t6**2*t1**2*t4*t5**2*t2**3+30.&
+ &_ki*t6**2*t1**2*t4*t5**3*t2**2+35._ki*t6**2*t1*t4**3*t5**2*t2**3-&
+ &12._ki*t3**2*t2**4*t1*t6*t5-45._ki*t2*t3*t1**2*t6**3*t5**2+120._ki&
+ &*t2**2*t3**2*t1*t6**2*t5**2-855._ki*t3**2*t1*t6**3*t5*t4**2
+ !
+ stemp4=stemp6-14._ki*t6*t4**3*t5*t3*t2**5+6._ki*t6*t4**2*t5*t3*t2**&
+ &6-180._ki*t6*t4*t3**2*t5**2*t2**4+450._ki*t6*t4**2*t5**3*t3**2*t2&
+ &**2-12._ki*t6*t1*t4**2*t5**3*t2**4+t6**2*t4**3*t2**7/4._ki+315._ki&
+ &*t3**3*t6**3*t4**3+t6**2*t4**5*t2**5+10._ki*t6*t2**3*t3**4+90._ki&
+ &*t6**2*t1*t4**2*t5*t2**3*t3+180._ki*t6**2*t1*t4*t3*t5**2*t2**3+1&
+ &500._ki*t6**2*t4**3*t3**2*t5**2*t2+90._ki*t6**2*t4*t3**2*t5*t2**4&
+ &-540._ki*t6**2*t4**2*t3**2*t5*t2**3-560._ki*t6**2*t4**3*t3*t5**3*&
+ &t2**2+10._ki*t3**3*t2**4*t6**2-1080._ki*t6**2*t4**2*t3**2*t5**2*t&
+ &2**2+750._ki*t6**2*t4**3*t3**2*t5*t2**2+760._ki*t2*t3**3*t6**2*t5&
+ &*t4**2+250._ki*t2**2*t3**3*t6*t4*t5**2+9._ki*t6**3*t1**2*t4*t5*t2&
+ &**3-27._ki*t6**3*t1**2*t4**2*t5*t2**2-45._ki*t6**3*t1**2*t4*t5**3&
+ &*t2+75._ki*t6**3*t1*t2**2*t3*t4**3
+ !
+ stemp6=stemp4-45._ki*t6**3*t3**2*t2**3*t4*t5-135._ki*t6**3*t1*t4*t3&
+ &*t5**2*t2**2+810._ki*t6**3*t1*t4**2*t3*t5**2*t2+315._ki*t6**3*t4*&
+ &*3*t3*t5**2*t2**2-720._ki*t6**3*t4**4*t3*t5**2*t2+t6*t1*t2**5*t3&
+ &**2-100._ki*t3**3*t2**3*t6**2*t4-40._ki*t3**3*t2**4*t6*t5+190._ki*&
+ &t3**3*t2**2*t6**2*t4**2+3._ki*t3*t2**3*t6**3*t1**2-5._ki*t3**2*t2&
+ &**4*t1*t6**2+20._ki*t3**3*t2**4*t6*t4+25._ki*t6*t5*t2**2*t3**4-28&
+ &5._ki*t2*t3**3*t6**3*t4**2+75._ki*t2**2*t3**3*t6**3*t4-105._ki*t3*&
+ &*3*t6**3*t1*t4+84._ki*t6*t4**3*t5**2*t2**4*t3+540._ki*t6*t4**2*t3&
+ &**2*t5**2*t2**3+175._ki*t6*t4**3*t3*t5**4*t2**2+280._ki*t6*t4**3*&
+ &t3*t5**3*t2**3+48._ki*t6**3*t1*t4**4*t5*t2**2-1125._ki*t6**3*t1*t&
+ &4**3*t3*t5**2
+ !
+ stemp5=stemp6+9._ki*t6**3*t1*t2**4*t3*t4-45._ki*t6**3*t1*t4**2*t5**&
+ &3*t2**2-54._ki*t6**3*t1*t2**3*t3*t4**2+210._ki*t6**3*t1*t4**3*t5*&
+ &*3*t2-42._ki*t6**3*t1*t4**3*t5*t2**3-3._ki*t6*t1*t4**2*t2**6*t5+3&
+ &._ki*t6*t1*t4**2*t5**2*t2**5-15._ki*t6*t1*t4**2*t5**5*t2**2-30._ki&
+ &*t6*t1*t4**2*t5**4*t2**3+2._ki*t6**2*t4**4*t5*t2**5-2._ki*t6**2*t&
+ &4**5*t5*t2**4-10._ki*t6**2*t4**5*t5**2*t2**3+10._ki*t6**2*t4**4*t&
+ &5**2*t2**4-5._ki/2._ki*t6**2*t4**3*t5**2*t2**5-36._ki*t6**3*t4**5*&
+ &t3*t2**2-10._ki*t6*t4**3*t5**4*t2**4+20._ki*t6*t4**4*t5**4*t2**3-&
+ &t6*t4**3*t5*t2**7+2._ki*t6*t4**4*t5*t2**6-5._ki*t6*t4**3*t5**5*t2&
+ &**3+10._ki*t6*t4**4*t5**5*t2**2+8._ki*t6*t4**4*t5**3*t2**4-3._ki*t&
+ &6*t4**2*t3*t2**7
+ !
+ stemp6=stemp5-4._ki*t6*t4**3*t5**3*t2**5+7._ki*t6*t4**3*t3*t2**6+3.&
+ &_ki*t6*t4*t3**2*t2**6-9._ki*t6*t4**2*t3**2*t2**5+t6*t4**3*t5**2*t&
+ &2**6-2._ki*t6*t4**4*t5**2*t2**5+120._ki*t6**2*t4**2*t5**3*t3*t2**&
+ &3-420._ki*t6**2*t4**3*t3*t5**2*t2**3+t2**2*t1**3*t6**3*t5+45._ki*&
+ &t6**3*t5*t1**2*t3**2-50._ki*t2**3*t3**3*t6*t5**2+40._ki*t2**3*t3*&
+ &*3*t6**2*t5-t6**2*t1**2*t3*t2**4/2._ki+30._ki*t3**3*t2*t6**3*t1+7&
+ &0._ki*t3**4*t2*t6**2*t4-20._ki*t6**2*t2**2*t1*t3**3+990._ki*t6**3*&
+ &t4**4*t3**2*t5+t6**3*t4**3*t5*t2**5-8._ki*t6**3*t4**6*t5*t2**2-5&
+ &._ki*t6**3*t4**3*t5**3*t2**3+3._ki*t6**3*t4**2*t3*t2**5-60._ki*t6*&
+ &*3*t4**5*t5**3*t2
+ !
+ stemp3=stemp6+30._ki*t6**3*t4**4*t5**3*t2**2-6._ki*t6**3*t4**4*t5*t&
+ &2**4+48._ki*t6**3*t4**4*t3*t2**3-21._ki*t6**3*t4**3*t3*t2**4+540.&
+ &_ki*t6**3*t4**5*t3*t5**2+12._ki*t6**3*t4**5*t5*t2**3+135._ki*t6**3&
+ &*t1**2*t4**2*t5**3-240._ki*t6**3*t1*t4**4*t5**3+3._ki/4._ki*t6**2*&
+ &t1**2*t4*t2**5+3._ki/2._ki*t6**2*t1*t4**2*t2**6-7._ki/2._ki*t6**2*t&
+ &1*t4**3*t2**5-15._ki/2._ki*t6**2*t4*t3**2*t2**5+45._ki*t6**2*t4**2&
+ &*t3**2*t2**4-3._ki/2._ki*t6**2*t4**2*t3*t2**6+7._ki*t6**2*t4**3*t3&
+ &*t2**5+10._ki*t6**2*t4**3*t5**4*t2**3-40._ki*t6**2*t4**4*t5**4*t2&
+ &**2+40._ki*t6**2*t4**5*t5**4*t2-125._ki/2._ki*t6**2*t4**3*t3**2*t2&
+ &**3-8._ki*t6**2*t4**4*t3*t2**4+10._ki*t6**2*t4**3*t5**3*t2**4-40.&
+ &_ki*t6**2*t4**4*t5**3*t2**3+40._ki*t6**2*t4**5*t5**3*t2**2-t6**2*&
+ &t4**3*t5*t2**6/2._ki
+ !
+ stemp4=1._ki/t2**12*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=t4**3/t2**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/4._ki
+ !
+ stemp10=20._ki*t6*t1**3*t4**4*t3**2*t5*t2**5+80._ki*t6*t1**3*t4**6*&
+ &t3**2*t5*t2**3-420._ki*t6*t1**4*t4**3*t3**2*t5**2*t2**3-600._ki*t&
+ &6*t1**5*t3**3*t5*t2**2*t4+105._ki*t6*t1**5*t4**3*t5*t2**4*t3+180&
+ &._ki*t6*t1**5*t4**2*t5**3*t3*t2**3+960._ki*t6*t1**5*t4**4*t3*t5**&
+ &3*t2-300._ki*t6*t1**6*t4*t3**2*t5**2*t2+135._ki*t6*t1**5*t4*t3**2&
+ &*t5*t2**4+270._ki*t6*t1**5*t4*t3**2*t5**2*t2**3-810._ki*t6*t1**5*&
+ &t4**2*t3**2*t5*t2**3+32._ki*t2**3*t3**5*t4**8-96._ki*t1**4*t4**4*&
+ &t5*t2**4*t3**2+80._ki/3._ki*t1**2*t4**4*t3**3*t5*t2**6+175._ki/3._k&
+ &i*t1**2*t4**3*t3**4*t5*t2**5+400._ki/3._ki*t1**2*t4**6*t3**3*t5**&
+ &2*t2**3+450._ki*t1**4*t4**2*t3**3*t2**3*t5**2-100._ki*t1**2*t4**5&
+ &*t3**3*t5**2*t2**4+100._ki/3._ki*t1**2*t4**4*t3**3*t5**2*t2**5+16&
+ &0._ki/3._ki*t6*t1**2*t2**4*t4**4*t3**4+84._ki*t1**4*t4**3*t5*t2**5&
+ &*t3**2+320._ki*t1**3*t4**4*t3**3*t2**4*t5-240._ki*t1**3*t4**5*t3*&
+ &*3*t2**3*t5+10._ki*t1**3*t4**3*t3**2*t5**2*t2**6-60._ki*t1**3*t4*&
+ &*4*t3**2*t5**2*t2**5-32._ki/3._ki*t6*t1**2*t4**8*t3**3*t2**2
+ !
+ stemp9=40._ki/3._ki*t6*t1**2*t4**5*t3**3*t2**5-176._ki/3._ki*t6*t1**2&
+ &*t4**7*t3**4*t2-1620._ki*t6*t1**5*t4**2*t3**2*t5**2*t2**2+8._ki/3&
+ &._ki*t1**2*t4**4*t3**3*t2**7+135._ki/2._ki*t6*t1**5*t4**2*t3**2*t2&
+ &**4-15._ki/4._ki*t6*t1**5*t4**3*t5**2*t2**5-150._ki*t6*t1**6*t4*t5&
+ &*t3**2*t2**2+40._ki/3._ki*t6*t1**4*t4**3*t5**3*t3*t2**4-80._ki*t6*&
+ &t1**4*t4**4*t5**3*t3*t2**3+60._ki*t6*t1**4*t4**2*t3**2*t5**2*t2*&
+ &*4+40._ki/3._ki*t6*t1**4*t4**6*t3*t2**3*t5+160._ki*t6*t1**4*t4**5*&
+ &t5**3*t3*t2**2-720._ki*t6*t1**4*t4**5*t3**2*t5**2*t2-200._ki/3._ki&
+ &*t1**2*t4**7*t3**3*t5**2*t2**2-80._ki*t1**2*t4**5*t3**3*t5*t2**5&
+ &+2250._ki*t6*t1**5*t4**3*t3**2*t5**2*t2-630._ki*t6*t1**5*t4**3*t3&
+ &*t5**2*t2**3+720._ki*t6*t1**5*t4**4*t3*t5**2*t2**2+15._ki*t6*t1**&
+ &5*t4**3*t5**3*t2**4+t6*t1**2*t4**3*t3**3*t2**7/3._ki-10._ki/3._ki*&
+ &t6*t1**2*t4**4*t3**3*t2**6+80._ki/3._ki*t6*t1**2*t4**7*t3**3*t2**&
+ &3+400._ki/3._ki*t6*t1**2*t4**6*t3**4*t2**2+32._ki*t6*t1*t2**2*t3**&
+ &4*t4**8+4._ki/3._ki*t6*t1**2*t4**3*t5*t2**6*t3**3-40._ki*t6*t1**4*&
+ &t4**4*t3**2*t2**4-90._ki*t6*t1**4*t2**4*t3**3*t4**2+stemp10
+ !
+ stemp10=stemp9-50._ki*t6*t1**4*t3**4*t2**3*t4+120._ki*t6*t1**6*t4*t&
+ &5**3*t3*t2**2+90._ki*t6*t1**6*t4*t3*t5**2*t2**3+5._ki/4._ki*t1*t4*&
+ &*3*t5*t2**7*t3**4-25._ki/2._ki*t1*t4**4*t5*t2**6*t3**4+40._ki*t1*t&
+ &4**7*t3**4*t2**4-44._ki/3._ki*t6**2*t1**5*t4**6*t5*t2**2-11._ki*t6&
+ &**2*t1**5*t4**4*t5*t2**4-110._ki*t6**2*t1**5*t4**5*t5**3*t2+75._k&
+ &i*t6**2*t1**7*t4*t3*t5**2-15._ki*t6**2*t1**7*t3*t5**2*t2+400._ki*&
+ &t1**3*t4**4*t3**3*t5**2*t2**3+25._ki/3._ki*t1**3*t4**3*t3**2*t5**&
+ &3*t2**5-475._ki/2._ki*t1**4*t4**2*t3**4*t5*t2**2-90._ki*t1**4*t4**&
+ &2*t3**2*t5**2*t2**5-20._ki*t1**4*t4**3*t5**3*t3*t2**5+80._ki*t1**&
+ &4*t4**4*t5**3*t3*t2**4+22._ki*t6**2*t1**5*t4**5*t5*t2**3-66._ki*t&
+ &6**2*t1**5*t4**5*t3*t2**2-300._ki*t6**2*t1**4*t4**6*t3**2*t5+t6*&
+ &*2*t1**4*t4**3*t3*t2**6/4._ki-375._ki/2._ki*t6**2*t1**4*t4**3*t3**&
+ &3*t2**2+320._ki/3._ki*t6*t1**2*t4**7*t3**3*t5*t2**2-140._ki*t1**3*&
+ &t4**3*t3**3*t2**5*t5+20._ki*t1**3*t4**2*t3**3*t2**6*t5+120._ki*t1&
+ &**3*t4**5*t3**2*t5**2*t2**4
+ !
+ stemp8=2._ki*t1**3*t3**2*t4**3*t5*t2**7-16._ki*t1**3*t3**2*t4**6*t5&
+ &*t2**4-80._ki*t1**3*t4**6*t3**2*t5**2*t2**3+160._ki/3._ki*t6*t1**2&
+ &*t4**5*t3**3*t5*t2**4-225._ki/2._ki*t1**3*t4**2*t3**4*t2**4*t5-16&
+ &5._ki/2._ki*t6**2*t1**5*t4**2*t3*t5**2*t2**3+3._ki*t6**2*t1**7*t4*&
+ &t5*t2**3-15._ki*t6**2*t1**7*t4*t5**3*t2+675._ki*t6**2*t1**6*t4**2&
+ &*t3*t5**2*t2+55._ki*t6**2*t1**5*t4**4*t5**3*t2**2+990._ki*t6**2*t&
+ &1**5*t4**5*t3*t5**2-40._ki*t2**4*t3**5*t4**7+5._ki/6._ki*t1**3*t3*&
+ &*5*t2**5+2._ki*t4**4*t3**5*t2**7-5._ki*t1**4*t3**4*t2**5+80._ki/3.&
+ &_ki*t2**5*t3**5*t4**6-t4**3*t3**5*t2**8/6._ki-10._ki*t4**5*t3**5*t&
+ &2**6-4._ki*t1**5*t3**3*t2**5+350._ki*t1**4*t4**3*t3**2*t5**3*t2**&
+ &3-80._ki*t1**4*t4**5*t5**3*t3*t2**3-50._ki*t1**4*t4**5*t5**4*t3*t&
+ &2**2-25._ki/2._ki*t1**4*t4**3*t5**4*t3*t2**4-880._ki*t6*t1**4*t4**&
+ &4*t3**3*t5*t2+420._ki*t1**4*t4**3*t3**2*t5**2*t2**4+24._ki*t1**4*&
+ &t4**4*t3*t2**5*t5**2-270._ki*t6*t1**6*t4**2*t3*t5**2*t2**2-15._ki&
+ &*t6*t1**6*t4*t5*t2**4*t3+stemp10
+ !
+ stemp10=stemp8-1425._ki/2._ki*t6**2*t1**6*t4**2*t3**2*t5-45._ki*t6**&
+ &2*t1**6*t2**3*t3*t4**2+70._ki/3._ki*t6*t1**3*t4**3*t3**3*t2**5+t6&
+ &*t1**4*t4**4*t3*t2**6-210._ki*t6*t1**4*t4**3*t3**4*t2-20._ki/3._ki&
+ &*t6*t1**3*t4**6*t3**2*t2**4-1045._ki/2._ki*t6**2*t1**5*t3**3*t4**&
+ &2*t2-5._ki/2._ki*t6*t1**3*t4**2*t3**3*t2**6+30._ki*t6*t1**3*t4**2*&
+ &t3**4*t2**4+5._ki*t6*t1**3*t4**5*t3**2*t2**5-5._ki/3._ki*t6*t1**3*&
+ &t4**4*t3**2*t2**6+5._ki/24._ki*t6*t1**3*t4**3*t3**2*t2**7+21._ki/2&
+ &._ki*t6*t1**5*t4**3*t3*t2**5+15._ki*t6*t1**5*t4**3*t5**4*t2**3+60&
+ &._ki*t6*t1**5*t4**5*t5**4*t2+5._ki*t1**4*t3**5*t2**3+10._ki*t1**5*&
+ &t2**3*t3**4-5._ki*t1*t4**4*t3**4*t2**7+20._ki*t1*t4**5*t3**4*t2**&
+ &6+t1*t4**3*t3**4*t2**8/2._ki+100._ki*t1*t2**3*t3**5*t4**6+2._ki*t1&
+ &**4*t4**4*t3*t2**7-t1**4*t4**3*t3*t2**8/2._ki-35._ki/2._ki*t1**4*t&
+ &3**5*t2**2*t4-2._ki*t1**4*t4**5*t3*t2**6-7._ki*t1**4*t4**3*t3**2*&
+ &t2**6
+ !
+ stemp9=t1**3*t4**4*t3**2*t2**7+5._ki*t1**3*t4*t3**4*t2**6-25._ki/2.&
+ &_ki*t1**3*t3**5*t2**4*t4-40._ki*t1*t4**6*t3**4*t2**5-44._ki*t1*t2*&
+ &*2*t3**5*t4**7+3._ki/4._ki*t1*t2**7*t3**5*t4**2-16._ki*t1*t4**8*t3&
+ &**4*t2**3+7._ki*t1**5*t4**3*t3*t2**6+20._ki*t1**5*t3**3*t2**4*t4-&
+ &4._ki*t1**5*t4**3*t5**3*t2**5+50._ki*t1**4*t4*t3**4*t2**4-25._ki/2&
+ &._ki*t1**4*t3**4*t5*t2**4-9._ki*t1**5*t4**2*t3**2*t2**5+36._ki*t1*&
+ &*4*t4**2*t3**3*t2**5-50._ki*t1**4*t3**3*t4**3*t2**4-2._ki*t1**5*t&
+ &4**4*t5**2*t2**5+95._ki/2._ki*t1**3*t3**5*t2**3*t4**2+125._ki*t1**&
+ &3*t4**3*t3**4*t2**4+4._ki/3._ki*t1**3*t4**6*t3**2*t2**5-110._ki*t1&
+ &**3*t4**4*t3**4*t2**3+2._ki*t1**3*t4**2*t3**3*t2**7-105._ki/2._ki*&
+ &t1**3*t3**5*t2**2*t4**3-t1**3*t4**3*t3**2*t2**8/6._ki-2._ki*t1**3&
+ &*t4**5*t3**2*t2**6-45._ki*t1**3*t4**2*t3**4*t2**5-14._ki*t1**3*t4&
+ &**3*t3**3*t2**6+32._ki*t1**3*t4**4*t3**3*t2**5+stemp10
+ !
+ stemp10=stemp9-24._ki*t1**3*t4**5*t3**3*t2**4+3._ki/4._ki*t6*t1**6*t&
+ &4**2*t2**6+10._ki/3._ki*t6*t1**4*t3**4*t2**4-5._ki/2._ki*t6*t1**6*t&
+ &3**2*t2**4+t6**2*t1**7*t3*t2**3+45._ki*t6**2*t1**7*t4**2*t5**3-1&
+ &75._ki/2._ki*t6**2*t1**6*t3**3*t4+1155._ki/2._ki*t6**2*t1**5*t4**3*&
+ &t3**3+25._ki*t6**2*t1**6*t3**3*t2+15._ki*t6*t1**5*t4**4*t5**2*t2*&
+ &*4-15._ki*t6*t1**5*t4**5*t5**2*t2**3-120._ki*t6*t1**5*t4**4*t5*t2&
+ &**3*t3+135._ki*t6*t1**5*t4**2*t3*t5**2*t2**4+1125._ki*t6*t1**5*t4&
+ &**3*t3**2*t5*t2**2-165._ki/2._ki*t6**2*t1**5*t3**2*t2**3*t4*t5-77&
+ &._ki/2._ki*t6**2*t1**5*t4**3*t3*t2**4+1815._ki*t6**2*t1**5*t4**4*t&
+ &3**2*t5+11._ki/2._ki*t6**2*t1**5*t4**2*t3*t2**5+25._ki*t1**3*t4**2&
+ &*t3**3*t5**2*t2**5-500._ki*t1**4*t4**3*t3**3*t5*t2**3+625._ki/2._k&
+ &i*t1**3*t4**3*t3**4*t2**3*t5-625._ki*t1**4*t4**3*t3**3*t5**2*t2*&
+ &*2+50._ki*t1**4*t4**4*t5**4*t3*t2**3-400._ki*t1**4*t4**4*t3**2*t5&
+ &**3*t2**2-18._ki*t1**4*t4**2*t5*t2**6*t3**2-480._ki*t1**4*t4**4*t&
+ &3**2*t5**2*t2**3
+ !
+ stemp7=-500._ki/3._ki*t1**2*t4**6*t3**4*t5*t2**2-160._ki/3._ki*t1**2*&
+ &t4**7*t3**3*t5*t2**3+8._ki*t1**4*t4**4*t3**2*t2**5-40._ki*t1*t4**&
+ &8*t3**4*t5*t2**2+100._ki*t1*t4**7*t3**4*t5*t2**3+275._ki/2._ki*t6*&
+ &*2*t1**5*t3**3*t2**2*t4+88._ki*t6**2*t1**5*t4**4*t3*t2**3+11._ki/&
+ &6._ki*t6**2*t1**5*t4**3*t5*t2**5-55._ki/6._ki*t6**2*t1**5*t4**3*t5&
+ &**3*t2**3-320._ki/3._ki*t6*t1**4*t4**6*t5**3*t3*t2-6._ki*t1**4*t4*&
+ &*3*t3*t2**6*t5**2-24._ki*t1**4*t4**5*t3*t2**4*t5**2-60._ki*t1**4*&
+ &t4*t3**3*t5*t2**5-120._ki*t6*t1**2*t4**5*t3**4*t2**3+t6*t1**2*t4&
+ &**2*t3**4*t2**6+375._ki*t6**2*t1**6*t3**2*t5*t2*t4-45._ki/4._ki*t6&
+ &**2*t1**4*t4**2*t3**2*t5*t2**4+60._ki*t6*t1**5*t4**5*t5**3*t2**2&
+ &-60._ki*t6*t1**5*t4**4*t5**3*t2**3-3._ki*t6*t1**5*t4**5*t5*t2**4-&
+ &12._ki*t6*t1**5*t4**4*t3*t2**4-9._ki/4._ki*t6*t1**5*t4**2*t3*t2**6&
+ &+60._ki*t6*t1**5*t3**3*t5*t2**3-375._ki/4._ki*t6*t1**5*t4**3*t3**2&
+ &*t2**3-40._ki*t6*t1**3*t4**7*t3**2*t5*t2**2-45._ki/2._ki*t6*t1**5*&
+ &t4**2*t5*t2**5*t3-840._ki*t6*t1**5*t4**3*t3*t5**3*t2**2+3._ki*t6*&
+ &t1**5*t4**4*t5*t2**5+stemp10
+ !
+ stemp10=stemp7-3._ki/4._ki*t6*t1**5*t4**3*t5*t2**6-128._ki/3._ki*t6*t&
+ &1**2*t4**8*t3**3*t5*t2-40._ki/3._ki*t6*t1**2*t4**4*t5*t2**5*t3**3&
+ &+2._ki*t6*t1*t4**4*t3**4*t2**6+80._ki/3._ki*t6*t1*t2**4*t3**4*t4**&
+ &6+1155._ki/2._ki*t6**2*t1**5*t4**3*t3*t5**2*t2**2-1320._ki*t6**2*t&
+ &1**5*t4**4*t3*t5**2*t2+1485._ki/2._ki*t6**2*t1**5*t4**2*t3**2*t5*&
+ &t2**2-t6*t1*t4**3*t3**4*t2**7/6._ki-120._ki*t6*t1**3*t4**5*t3**2*&
+ &t5**2*t2**3+160._ki*t6*t1**3*t4**6*t3**2*t5**2*t2**2-80._ki*t6*t1&
+ &**3*t4**7*t3**2*t5**2*t2+480._ki*t6*t1**3*t4**5*t3**3*t5*t2**2-8&
+ &00._ki/3._ki*t6*t1**3*t4**6*t3**3*t5*t2+280._ki/3._ki*t6*t1**3*t4**&
+ &3*t3**3*t5*t2**4+220._ki*t6*t1**3*t4**4*t3**4*t2**2-200._ki/3._ki*&
+ &t6*t1**3*t4**6*t3**3*t2**2-125._ki*t6*t1**3*t4**3*t3**4*t2**3-14&
+ &0._ki*t6*t1**3*t4**5*t3**4*t2-5._ki/2._ki*t6*t1**3*t3**4*t4*t2**5+&
+ &10._ki/3._ki*t6*t1**3*t4**7*t3**2*t2**3+120._ki*t6*t1**3*t4**5*t3*&
+ &*3*t2**3-80._ki*t6*t1**3*t4**4*t3**3*t2**4-275._ki*t1**3*t4**4*t3&
+ &**4*t2**2*t5-300._ki*t1**3*t4**5*t3**3*t5**2*t2**2+108._ki*t1**5*&
+ &t4**2*t3**2*t5*t2**4
+ !
+ stemp9=10._ki*t6*t1**4*t4**3*t3*t5**2*t2**5-360._ki*t6*t1**4*t4**2*&
+ &t3**3*t2**3*t5-320._ki/3._ki*t6*t1**2*t4**6*t3**3*t5*t2**3-10._ki*&
+ &t6*t1*t4**5*t3**4*t2**5+1140._ki*t6*t1**5*t4**2*t3**3*t5*t2-100.&
+ &_ki*t1*t4**6*t3**4*t5*t2**4-75._ki*t1**4*t4**2*t3**2*t5**3*t2**4+&
+ &stemp10+175._ki*t1**5*t4**3*t3*t5**4*t2**2-320._ki*t6*t1**3*t4**4&
+ &*t3**3*t5*t2**3-35._ki/3._ki*t6*t1**2*t3**4*t4**3*t2**5-t6*t1**4*&
+ &t4**3*t3*t2**7/6._ki-220._ki*t6*t1**4*t4**4*t3**3*t2**2+540._ki*t1&
+ &**5*t4**2*t3**2*t5**2*t2**3-36._ki*t1**5*t4**2*t5**2*t2**5*t3-36&
+ &._ki*t1**5*t4*t5*t2**5*t3**2-75._ki*t1**5*t4**2*t5**4*t3*t2**3-5.&
+ &_ki/3._ki*t6*t1**4*t4**3*t3*t2**6*t5+1000._ki*t6*t1**4*t4**3*t3**3&
+ &*t2**2*t5-60._ki*t6*t1**4*t4**4*t3*t5**2*t2**4+30._ki*t6*t1**4*t4&
+ &**2*t3**2*t5*t2**5+120._ki*t6*t1**4*t4**5*t3*t5**2*t2**3-360._ki*&
+ &t6*t1**6*t4**2*t5**3*t2*t3+45._ki*t6*t1**6*t4**2*t5*t2**3*t3+60.&
+ &_ki*t6*t1**6*t3**2*t5**2*t2**2-10._ki/3._ki*t1**2*t4**3*t5*t3**3*t&
+ &2**7-25._ki/4._ki*t1**2*t4**2*t3**4*t5*t2**6+45._ki*t6**2*t1**4*t4&
+ &**2*t3**3*t2**3
+ !
+ stemp10=stemp9+6._ki*t6**2*t1**4*t4**5*t3*t2**4+4._ki*t6**2*t1**4*t&
+ &4**7*t3*t2**2-60._ki*t6*t1**5*t4**4*t5**4*t2**2+960._ki*t6*t1**4*&
+ &t4**4*t3**2*t5**2*t2**2-35._ki*t6**2*t1**6*t4**3*t5*t2**3-20._ki*&
+ &t6*t1**4*t4**5*t3*t2**4*t5+10._ki*t6*t1**4*t4**4*t3*t2**5*t5-2._k&
+ &i*t6*t1**4*t4**5*t3*t2**5-150._ki*t6*t1**5*t4*t3**3*t2**3+190._ki&
+ &*t6*t1**4*t3**4*t2**2*t4**2+30._ki*t6*t1**4*t4**5*t3**2*t2**3+35&
+ &._ki/2._ki*t6*t1**4*t4**3*t3**2*t2**5-5._ki/2._ki*t6*t1**4*t4**2*t3&
+ &**2*t2**6+10._ki*t6*t1**4*t2**5*t3**3*t4-1875._ki/2._ki*t6**2*t1**&
+ &6*t4**3*t3*t5**2-75._ki/2._ki*t6**2*t1**6*t3**2*t5*t2**2+15._ki/2.&
+ &_ki*t6**2*t1**6*t4**2*t5*t2**4+15._ki/2._ki*t6**2*t1**6*t2**4*t3*t&
+ &4+40._ki*t6**2*t1**6*t4**4*t5*t2**2-225._ki/2._ki*t6**2*t1**6*t4*t&
+ &3*t5**2*t2**2-5._ki/2._ki*t6*t1**3*t4**3*t5*t3**2*t2**6-5._ki*t6*t&
+ &1**3*t4**3*t5**2*t2**5*t3**2-4125._ki/2._ki*t6**2*t1**5*t4**3*t3*&
+ &*2*t5*t2-32._ki/3._ki*t2**2*t3**5*t4**9-75._ki/2._ki*t6**2*t1**6*t4&
+ &**2*t5**3*t2**2+175._ki*t6**2*t1**6*t4**3*t5**3*t2
+ !
+ stemp8=stemp10+125._ki/2._ki*t6**2*t1**6*t2**2*t3*t4**3+4._ki/3._ki*t&
+ &6*t1**4*t4**6*t3*t2**4+30._ki*t6*t1**6*t4**2*t5**4*t2**2+7._ki/2.&
+ &_ki*t6*t1**6*t4**3*t5*t2**4-40._ki*t6*t1**6*t3**3*t5*t2-3._ki/2._ki&
+ &*t6*t1**6*t4**2*t5*t2**5-55._ki/6._ki*t6**2*t1**5*t2**3*t3**3+220&
+ &._ki/3._ki*t6**2*t1**5*t4**6*t5**3-210._ki*t6**2*t1**4*t4**5*t3**3&
+ &-44._ki*t6**2*t1**3*t4**7*t3**3-16._ki/3._ki*t6**2*t1**2*t4**9*t3*&
+ &*3-10._ki*t6*t1**6*t3**3*t2**2+3._ki/2._ki*t6*t1**5*t4**5*t2**5-3.&
+ &_ki/2._ki*t6*t1**5*t4**4*t2**6+3._ki/8._ki*t6*t1**5*t4**3*t2**7-30.&
+ &_ki*t6*t1**5*t3**4*t2**2+15._ki*t6*t1**5*t3**3*t2**4-7._ki/4._ki*t6&
+ &*t1**6*t4**3*t2**5+15._ki*t6**2*t1**7*t3**2*t5-200._ki*t6**2*t1**&
+ &6*t4**4*t5**3-95._ki*t1**4*t4**2*t3**4*t2**3-15._ki/4._ki*t6**2*t1&
+ &**4*t3**3*t2**4*t4-8._ki*t6**2*t1**4*t4**6*t3*t2**3+40._ki*t6*t1*&
+ &*4*t4*t3**3*t5*t2**4-80._ki*t6*t1**4*t4**6*t3*t5**2*t2**2+250._ki&
+ &*t6*t1**4*t2**3*t3**3*t4**3+250._ki*t1**5*t4*t3**3*t5**2*t2**2+4&
+ &50._ki*t1**5*t4**2*t5**3*t3**2*t2**2
+ !
+ stemp10=stemp8+200._ki*t1**5*t4*t5*t3**3*t2**3-150._ki*t1**5*t4*t5*&
+ &*3*t3**2*t2**3-40._ki*t6*t1*t2**3*t3**4*t4**7-32._ki/3._ki*t6*t1*t&
+ &2*t3**4*t4**9-2._ki*t6**2*t1**4*t4**4*t3*t2**5-60._ki*t6**2*t1**4&
+ &*t4**7*t3*t5**2+330._ki*t6**2*t1**4*t4**4*t3**3*t2+40._ki*t6**2*t&
+ &1**3*t4**4*t3**3*t2**3+3._ki/4._ki*t6**2*t1**3*t4**2*t3**3*t2**5+&
+ &100._ki*t6**2*t1**3*t4**6*t3**3*t2-14._ki*t1**5*t4**3*t5*t3*t2**5&
+ &+6._ki*t1**5*t4**2*t5*t3*t2**6-120._ki*t1**5*t4**2*t3*t5**3*t2**4&
+ &+50._ki*t1*t4**5*t3**4*t5*t2**5+280._ki*t1**5*t4**3*t3*t5**3*t2**&
+ &3+100._ki*t1**3*t4**5*t3**2*t5**3*t2**3-80._ki/3._ki*t6*t1**2*t4**&
+ &6*t3**3*t2**4-200._ki/3._ki*t1**3*t4**6*t3**2*t5**3*t2**2-50._ki*t&
+ &1**3*t4**4*t3**2*t5**3*t2**4+30._ki*t6*t1**6*t4**2*t5**3*t2**3-7&
+ &0._ki*t6*t1**6*t4**3*t5**4*t2+35._ki/2._ki*t6*t1**6*t4**3*t5**2*t2&
+ &**3-70._ki*t6*t1**6*t4**3*t5**3*t2**2+285._ki*t6*t1**5*t3**3*t2**&
+ &2*t4**2+105._ki*t6*t1**5*t3**4*t2*t4-45._ki/4._ki*t6*t1**5*t4*t3**&
+ &2*t2**5
+ !
+ stemp9=stemp10-5._ki/2._ki*t1**2*t4**2*t3**4*t2**7+70._ki/3._ki*t1**2&
+ &*t4**3*t3**4*t2**6-200._ki/3._ki*t1**2*t4**6*t3**4*t2**3-t1**2*t4&
+ &**3*t3**3*t2**8/3._ki-16._ki/3._ki*t1**2*t4**7*t3**3*t2**4+32._ki/3&
+ &._ki*t1**2*t4**6*t3**3*t2**5-8._ki*t1**2*t4**5*t3**3*t2**6-80._ki*&
+ &t1**2*t4**4*t3**4*t2**5+120._ki*t1**2*t4**5*t3**4*t2**4-70._ki*t1&
+ &**2*t2**2*t3**5*t4**5+15._ki*t1**2*t2**5*t3**5*t4**2+110._ki*t1**&
+ &2*t2**3*t3**5*t4**4-5._ki/4._ki*t1**2*t4*t3**5*t2**6-125._ki/2._ki*&
+ &t1**2*t2**4*t3**5*t4**3-35._ki/4._ki*t1*t2**6*t3**5*t4**3-50._ki*t&
+ &1**5*t3**3*t5**2*t2**3-3._ki*t1**5*t4**2*t3*t2**7+3._ki*t1**5*t4*&
+ &t3**2*t2**6-10._ki*t1**5*t4**3*t5**4*t2**4+t1**5*t4**3*t5**2*t2*&
+ &*6-40._ki*t1**5*t3**3*t5*t2**4+20._ki*t1**5*t4**4*t5**4*t2**3+2._k&
+ &i*t1**5*t4**4*t5*t2**6+25._ki*t1**5*t3**4*t5*t2**2-5._ki*t1**5*t4&
+ &**3*t5**5*t2**3+10._ki*t1**5*t4**4*t5**5*t2**2+3._ki/2._ki*t1**4*t&
+ &4**2*t3**2*t2**7
+ !
+ stemp10=stemp9-6._ki*t1**4*t4*t3**3*t2**6-t1**5*t4**3*t5*t2**7-90.&
+ &_ki*t1*t2**4*t3**5*t4**5+40._ki*t1*t2**5*t3**5*t4**4+540._ki*t6**2&
+ &*t1**4*t4**5*t3**2*t5*t2-360._ki*t6**2*t1**4*t4**4*t3**2*t5*t2**&
+ &2+8._ki*t1**5*t4**4*t5**3*t2**4-10._ki*t6*t1**3*t4**2*t3**3*t5*t2&
+ &**5+40._ki*t6*t1**3*t4**4*t3**2*t5**2*t2**4-60._ki*t6*t1**3*t4**5&
+ &*t3**2*t5*t2**4+120._ki*t6**2*t1**4*t4**6*t3*t5**2*t2-15._ki/2._ki&
+ &*t6**2*t1**3*t4**4*t5*t2**4*t3**2-60._ki*t6**2*t1**3*t4**6*t3**2&
+ &*t5*t2**2+3._ki/4._ki*t6**2*t1**3*t4**3*t5*t2**5*t3**2-24._ki*t6**&
+ &2*t1**3*t4**8*t3**2*t5-180._ki*t1**5*t4*t3**2*t5**2*t2**4+360._ki&
+ &*t1**4*t4**2*t3**3*t5*t2**4+30._ki*t6**2*t1**3*t4**5*t3**2*t5*t2&
+ &**3+60._ki*t6**2*t1**3*t4**7*t3**2*t5*t2-5._ki*t6**2*t1**7*t2**2*&
+ &t3*t4-9._ki*t6**2*t1**7*t4**2*t5*t2**2-35._ki/4._ki*t6**2*t1**3*t3&
+ &**3*t4**3*t2**4+105._ki*t6**2*t1**4*t4**3*t5*t3**2*t2**3-15._ki/4&
+ &._ki*t6**2*t1**4*t4**3*t5**2*t2**4*t3+30._ki*t6**2*t1**4*t4**4*t5&
+ &**2*t2**3*t3-90._ki*t6**2*t1**4*t4**5*t3*t5**2*t2**2+84._ki*t1**5&
+ &*t4**3*t5**2*t2**4*t3
+ !
+ stemp6=stemp10-4._ki*t1**4*t4**4*t3*t2**6*t5+125._ki*t1**4*t3**4*t5&
+ &*t2**3*t4-75._ki*t1**4*t4*t3**3*t2**4*t5**2+t1**4*t4**3*t3*t2**7&
+ &*t5+4._ki*t1**4*t4**5*t3*t2**5*t5+30._ki*t6*t1**6*t2**3*t3**2*t5+&
+ &25._ki/2._ki*t6*t1**6*t2**3*t4*t3**2+9._ki/2._ki*t6*t1**6*t4**2*t3*&
+ &t2**4-15._ki/2._ki*t6*t1**6*t4**2*t5**2*t2**4-3._ki/2._ki*t6*t1**6*&
+ &t4*t3*t2**5-210._ki*t6*t1**4*t4**3*t3**2*t5*t2**4+480._ki*t6*t1**&
+ &4*t4**4*t3**2*t5*t2**3-360._ki*t6*t1**4*t4**5*t3**2*t5*t2**2+25.&
+ &_ki/2._ki*t1**3*t4*t3**4*t2**5*t5-12._ki*t1**3*t3**2*t4**4*t5*t2**&
+ &6+24._ki*t1**3*t3**2*t4**5*t5*t2**5-175._ki*t1**3*t4**3*t3**3*t5*&
+ &*2*t2**4-200._ki*t1**2*t4**4*t3**4*t5*t2**4-25._ki/6._ki*t1**2*t4*&
+ &*3*t5**2*t2**6*t3**3+320._ki/3._ki*t1**2*t4**6*t3**3*t5*t2**4+300&
+ &._ki*t1**2*t4**5*t3**4*t5*t2**3+t6**2*t1**2*t4**4*t3**3*t2**5+40&
+ &._ki/3._ki*t6**2*t1**2*t4**6*t3**3*t2**3+16._ki*t6**2*t1**2*t4**8*&
+ &t3**3*t2-5._ki*t6**2*t1**2*t4**5*t3**3*t2**4-90._ki*t6**2*t1**3*t&
+ &4**5*t3**3*t2**2-20._ki*t6**2*t1**2*t4**7*t3**3*t2**2-t6**2*t1**&
+ &2*t4**3*t3**3*t2**6/12._ki
+ !
+ stemp7=t6/t2**12/t1**5
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(3)
+ !
+ stemp6=-30._ki*t6**3*t1*t4*t5**3*t2**3-250._ki*t2**2*t3**3*t6*t4*t5&
+ &**2-5._ki/4._ki*t6**2*t4**3*t2**7-45._ki*t6**3*t1*t3*t5**2*t2**3-t&
+ &6*t1*t2**5*t3**2-190._ki*t3**3*t2**2*t6**2*t4**2-6._ki*t3*t2**3*t&
+ &6**3*t1**2+10._ki*t3**2*t2**4*t1*t6**2-20._ki*t3**3*t2**4*t6*t4-2&
+ &5._ki*t6*t5*t2**2*t3**4+410._ki*t2*t3**3*t6**3*t4**2-165._ki*t2**2&
+ &*t3**3*t6**3*t4+70._ki*t6**2*t1*t4*t5*t2**4*t3-30._ki*t6**3*t4*t3&
+ &*t5**2*t2**4+2._ki*t6*t1*t4*t5**2*t2**6-9._ki*t6**2*t1*t3*t2**4*t&
+ &4**2+7._ki*t6**2*t1*t3*t2**5*t4-1395._ki*t6**3*t1*t4**2*t3*t5**2*&
+ &t2-24._ki*t6*t4*t5**2*t2**6*t3-25._ki*t6*t1*t5**4*t3*t2**3+6._ki*t&
+ &6**3*t1*t4*t5*t2**5+80._ki*t6**2*t1*t3*t5**3*t2**3+60._ki*t6**2*t&
+ &4*t3*t5**2*t2**5-10._ki*t6**2*t1*t4*t5**2*t2**5-40._ki*t6*t1*t5**&
+ &3*t3*t2**4-30._ki*t3*t5**2*t2**2*t1**2*t6**2+60._ki*t3**2*t5**2*t&
+ &2**3*t1*t6-10._ki*t6**2*t1*t3*t5*t2**5+2._ki*t6*t1*t2**6*t3*t5+80&
+ &._ki*t3**3*t2**4*t6*t5
+ !
+ stemp5=80._ki*t6**2*t4**4*t5**3*t2**3-40._ki*t6**2*t4**5*t5**3*t2**&
+ &2+5._ki/2._ki*t6**2*t4**3*t5*t2**6-4._ki*t6**2*t4**4*t5*t2**5+2._ki&
+ &*t6**2*t4**5*t5*t2**4+10._ki*t6**2*t4**5*t5**2*t2**3-20._ki*t6**2&
+ &*t4**4*t5**2*t2**4+5._ki*t1**3*t6**3*t5**3-8._ki*t6*t1*t4*t5**3*t&
+ &2**5-20._ki*t6*t1*t4*t5**4*t2**4+40._ki*t6**2*t1*t4*t5**4*t2**3-2&
+ &1._ki*t6**3*t1**2*t4*t5*t2**3-4._ki*t6*t4**2*t5**3*t2**6+20._ki*t6&
+ &**2*t2**2*t1*t3**3-90._ki*t6**3*t4**4*t5**3*t2**2+18._ki*t6**3*t4&
+ &**4*t5*t2**4-76._ki*t6**3*t4**4*t3*t2**3+57._ki*t6**3*t4**3*t3*t2&
+ &**4-10._ki*t6*t1*t4*t5**5*t2**3-40._ki*t6**3*t4**6*t5**3+27._ki*t6&
+ &**3*t1**2*t4**2*t5*t2**2+105._ki*t6**3*t1**2*t4*t5**3*t2-t6**2*t&
+ &4**5*t2**5+540._ki*t6**2*t1*t4**2*t3*t5**2*t2**2+720._ki*t6**2*t1&
+ &*t4**2*t5**3*t2*t3+105._ki*t3**3*t6**3*t1*t4-t2**2*t1**3*t6**3*t&
+ &5-45._ki*t6**3*t5*t1**2*t3**2-8._ki*t6*t4**4*t5**3*t2**4+8._ki*t6*&
+ &t4**2*t3*t2**7+12._ki*t6*t4**3*t5**3*t2**5+stemp6
+ !
+ stemp6=-t6*t1*t3*t2**7+90._ki*t2*t3*t1**2*t6**3*t5**2-560._ki*t6**2&
+ &*t1*t4*t5**3*t3*t2**2-660._ki*t6**2*t4*t3**2*t5**2*t2**3-48._ki*t&
+ &6**3*t1*t4**4*t5*t2**2-75._ki*t6**3*t1*t2**2*t3*t4**3+36._ki*t6*t&
+ &1*t4*t3*t2**4*t5**2+1125._ki*t6**3*t1*t4**3*t3*t5**2+320._ki*t6*t&
+ &4**2*t3*t5**3*t2**4+350._ki*t6*t4*t5**3*t3**2*t2**3-240._ki*t2**2&
+ &*t3**2*t1*t6**2*t5**2-t4**2*t2**10/4._ki+50._ki*t2**2*t3**2*t1*t6&
+ &*t5**3-120._ki*t2**3*t3**3*t6**2*t5-t6*t4**2*t2**8*t5-60._ki*t6*t&
+ &3**2*t2**5*t5**2+t6*t4**2*t5**2*t2**7-33._ki*t6**3*t1*t2**4*t3*t&
+ &4+200._ki*t6*t4**2*t5**4*t3*t2**3+84._ki*t6*t4*t5*t2**5*t3**2+855&
+ &._ki*t3**2*t1*t6**3*t5*t4**2+8._ki*t3**3*t6*t2**5-315._ki*t3**3*t6&
+ &**3*t4**3-540._ki*t6**3*t4**5*t3*t5**2-20._ki*t6**3*t4**5*t5*t2**&
+ &3-135._ki*t6**3*t1**2*t4**2*t5**3+240._ki*t6**3*t1*t4**4*t5**3-3.&
+ &_ki/4._ki*t6**2*t1**2*t4*t2**5-4._ki*t6**2*t1*t4**2*t2**6+7._ki/2._k&
+ &i*t6**2*t1*t4**3*t2**5-108._ki*t6*t4**2*t3**2*t5*t2**4
+ !
+ stemp4=-5._ki/2._ki*t6**2*t3**2*t2**6-10._ki*t6*t2**3*t3**4+t6**2*t1&
+ &**2*t2**6/4._ki+96._ki*t6*t4**2*t5**2*t2**5*t3-10._ki*t6**2*t4*t5*&
+ &t2**6*t3-520._ki*t6**2*t4**2*t5**3*t3*t2**3-7._ki*t6*t4**3*t3*t2*&
+ &*6-7._ki*t6*t4*t3**2*t2**6+9._ki*t6*t4**2*t3**2*t2**5-3._ki*t6*t4*&
+ &*3*t5**2*t2**6-84._ki*t6*t4**3*t5**2*t2**4*t3-540._ki*t6*t4**2*t3&
+ &**2*t5**2*t2**3-5._ki*t6*t4**2*t5**5*t2**4-990._ki*t6**3*t4**4*t3&
+ &**2*t5-7._ki*t6**3*t4**3*t5*t2**5+8._ki*t6**3*t4**6*t5*t2**2+35._k&
+ &i*t6**3*t4**3*t5**3*t2**3-5._ki/2._ki*t6**2*t4**2*t5**2*t2**6-175&
+ &._ki*t6*t4**3*t3*t5**4*t2**2+195._ki*t6**3*t1*t4**2*t5**3*t2**2+9&
+ &3._ki*t6**3*t1*t2**3*t3*t4**2-450._ki*t6*t4**2*t5**3*t3**2*t2**2-&
+ &750._ki*t6**2*t4**3*t3**2*t5*t2**2-390._ki*t6**3*t1*t4**3*t5**3*t&
+ &2+78._ki*t6**3*t1*t4**3*t5*t2**3-3._ki*t6*t1*t4**2*t5**2*t2**5+12&
+ &._ki*t6*t1*t4**2*t5**3*t2**4-50._ki*t6*t3**2*t5**3*t2**4-2._ki*t6*&
+ &t4*t3*t2**8-10._ki*t6*t4**2*t5**4*t2**5+stemp6+stemp5
+ !
+ stemp6=10._ki*t6**2*t4**2*t5**3*t2**5-t6**2*t4**2*t5*t2**7/2._ki-t6&
+ &**2*t4*t3*t2**7+25._ki/2._ki*t6**2*t4**3*t5**2*t2**5+30._ki*t6*t4*&
+ &*3*t5**4*t2**4-20._ki*t6*t4**4*t5**4*t2**3+3._ki*t6*t4**3*t5*t2**&
+ &7-2._ki*t6*t4**4*t5*t2**6+15._ki*t6*t4**3*t5**5*t2**3-10._ki*t6*t4&
+ &**4*t5**5*t2**2+100._ki*t2**3*t3**3*t6*t5**2+20._ki*t2**3*t3**3*t&
+ &6**3-640._ki*t6**2*t4**4*t3*t5**3*t2+55._ki/2._ki*t6**2*t4*t3**2*t&
+ &2**5-155._ki/2._ki*t6**2*t4**2*t3**2*t2**4+13._ki/2._ki*t6**2*t4**2&
+ &*t3*t2**6+2._ki*t6**3*t4*t3*t2**6+60._ki*t6**2*t3**2*t2**4*t5**2+&
+ &10._ki*t6**2*t4**2*t5**4*t2**4-t6**2*t1**2*t5*t2**5/2._ki+30._ki*t&
+ &6**2*t2**5*t3**2*t5+t6**2*t1*t4*t2**7-15._ki*t6**3*t3**2*t2**4*t&
+ &5-15._ki*t6**3*t1**2*t5**3*t2**2+15._ki*t6*t1*t4**2*t5**5*t2**2+3&
+ &0._ki*t6*t1*t4**2*t5**4*t2**3-30._ki*t3**3*t2**4*t6**2+30._ki*t3**&
+ &4*t2**2*t6**2+65._ki*t6**2*t4**2*t5*t2**5*t3-39._ki*t6**3*t1*t4**&
+ &2*t5*t2**4
+ !
+ stemp5=-280._ki*t6*t4**3*t3*t5**3*t2**3+270._ki*t6**3*t4**2*t3*t5**&
+ &2*t2**3-855._ki*t6**3*t4**3*t3*t5**2*t2**2+1140._ki*t6**3*t4**4*t&
+ &3*t5**2*t2+1695._ki*t6**3*t4**3*t3**2*t5*t2-70._ki*t3**4*t2*t6**2&
+ &*t4-45._ki*t3**3*t2*t6**3*t1+3._ki*t6**3*t1*t3*t2**5+3._ki*t6**3*t&
+ &1**2*t5*t2**4+t6**2*t1**2*t3*t2**4/2._ki-12._ki*t6*t5*t3**2*t2**6&
+ &+2._ki*t6**2*t4**4*t2**6-130._ki*t6**2*t4**3*t5*t2**4*t3+stemp6-2&
+ &._ki*t6*t1*t4*t5*t2**7-990._ki*t6**3*t4**2*t3**2*t5*t2**2-1500._ki&
+ &*t6**2*t4**3*t3**2*t5**2*t2+120._ki*t6*t1*t4*t5**3*t3*t2**3+14._k&
+ &i*t6*t4**3*t5*t3*t2**5+780._ki*t6**2*t4**3*t3*t5**2*t2**3+t6*t3*&
+ &*2*t2**7+930._ki*t6**2*t4**2*t3**2*t5*t2**3-330._ki*t6**2*t4*t3**&
+ &2*t5*t2**4-16._ki*t6*t4**2*t5*t3*t2**6+420._ki*t6*t4*t3**2*t5**2*&
+ &t2**4+t4**3*t2**9/4._ki-40._ki*t2*t3*t1**2*t6**2*t5**3-30._ki*t6**&
+ &2*t1**2*t4*t5**4*t2+5._ki*t3*t2**3*t1**2*t6**2*t5-480._ki*t6**2*t&
+ &4**4*t3*t5**2*t2**2-30._ki*t6**2*t1**2*t4*t5**3*t2**2+15._ki/2._ki&
+ &*t6**2*t1**2*t4*t5**2*t2**3
+ !
+ stemp6=-35._ki*t6**2*t1*t4**3*t5**2*t2**3-6._ki*t6*t1*t2**5*t3*t4*t&
+ &5-225._ki*t3*t1**2*t6**3*t4*t5**2-160._ki*t6**2*t1*t4**2*t5**4*t2&
+ &**2-7._ki*t6**2*t1*t4**3*t5*t2**4+3._ki*t6*t1*t4**2*t2**6*t5+140.&
+ &_ki*t6**2*t1*t4**3*t5**4*t2+80._ki*t6**2*t4*t5**3*t2**4*t3+stemp4&
+ &+40._ki*t6**2*t1*t4*t5**3*t2**4+3._ki*t6*t1*t2**6*t4*t3+12._ki*t3*&
+ &*2*t2**4*t1*t6*t5+135._ki*t2**2*t3**2*t1*t6**3*t5+80._ki*t6**2*t4&
+ &**4*t5*t2**3*t3+80._ki*t6**2*t5*t2*t1*t3**3+8._ki*t6**2*t1*t4**2*&
+ &t5*t2**5+40._ki*t6**2*t1*t4**2*t5**2*t2**4-390._ki*t6**2*t4**2*t3&
+ &*t5**2*t2**4-13._ki*t6**2*t4**3*t3*t2**5-50._ki*t6**2*t4**3*t5**4&
+ &*t2**3+80._ki*t6**2*t4**4*t5**4*t2**2-40._ki*t6**2*t4**5*t5**4*t2&
+ &+125._ki/2._ki*t6**2*t4**3*t3**2*t2**3+8._ki*t6**2*t4**4*t3*t2**4-&
+ &50._ki*t6**2*t4**3*t5**3*t2**4-120._ki*t3**2*t2**3*t6**2*t5*t1+75&
+ &._ki*t6*t1*t4*t5**4*t2**2*t3+stemp5-2._ki*t6**2*t1*t2**6*t4*t5-16&
+ &0._ki*t6**2*t1*t4**2*t5**3*t2**3+140._ki*t6**2*t1*t4**3*t5**3*t2*&
+ &*2
+ !
+ stemp3=stemp6+1040._ki*t6**2*t4**3*t3*t5**3*t2**2+3._ki/2._ki*t6**2*&
+ &t1**2*t4*t5*t2**4+300._ki*t3**2*t2**2*t6**2*t4*t5*t1-200._ki*t3**&
+ &3*t2**3*t6*t4*t5-18._ki*t6**3*t4**2*t3*t2**5+36._ki*t6**3*t4**5*t&
+ &3*t2**2+100._ki*t6**3*t4**5*t5**3*t2+60._ki*t6**2*t1*t3*t5**2*t2*&
+ &*4-90._ki*t6**2*t1*t4**2*t5*t2**3*t3-420._ki*t6**2*t1*t4*t3*t5**2&
+ &*t2**3-720._ki*t2*t3**2*t1*t6**3*t5*t4+1860._ki*t6**2*t4**2*t3**2&
+ &*t5**2*t2**2+600._ki*t2*t3**2*t1*t6**2*t4*t5**2-50._ki*t6*t4*t5**&
+ &4*t2**4*t3-5._ki/2._ki*t6**2*t1**2*t5**2*t2**4+10._ki*t6**2*t1**2*&
+ &t5**3*t2**3+10._ki*t6**2*t1**2*t5**4*t2**2-5._ki*t6**3*t4**2*t5**&
+ &3*t2**4+t6**3*t4**2*t5*t2**6+160._ki*t3**3*t2**3*t6**2*t4-760._ki&
+ &*t2*t3**3*t6**2*t5*t4**2+640._ki*t2**2*t3**3*t6**2*t5*t4+225._ki*&
+ &t6**3*t3**2*t2**3*t4*t5-t6**2*t2**6*t1*t3+2._ki*t6*t4**4*t5**2*t&
+ &2**5+4._ki*t6*t4*t3*t2**7*t5-80._ki*t6*t4*t5**3*t2**5*t3-25._ki*t3&
+ &**2*t2**3*t1*t6**2*t4+15._ki*t3*t2**2*t6**3*t4*t1**2+495._ki*t6**&
+ &3*t1*t4*t3*t5**2*t2**2-12._ki*t6*t1*t3*t5**2*t2**5+t6**2*t4**2*t&
+ &2**8/4._ki
+ !
+ stemp4=1._ki/t2**12*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=(-t4+t2)*t4**2/t2**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/4._k&
+ &i
+ !
+ stemp11=-5._ki/3._ki*t6*t4*t2**7*t3**2*t1**4-2._ki*t6*t1**6*t4**2*t2&
+ &**6-40._ki/3._ki*t6*t1**4*t3**4*t2**4+5._ki*t6*t1**6*t3**2*t2**4+1&
+ &75._ki/2._ki*t6**2*t1**6*t3**3*t4-1155._ki/2._ki*t6**2*t1**5*t4**3*&
+ &t3**3-77._ki/6._ki*t6**2*t1**5*t4**3*t5*t2**5-418._ki/3._ki*t6**2*t&
+ &1**5*t4**4*t3*t2**3-520._ki/3._ki*t1**2*t4**5*t3**4*t2**4+70._ki*t&
+ &1**2*t2**2*t3**5*t4**5-95._ki/2._ki*t1**2*t2**5*t3**5*t4**2-460._k&
+ &i/3._ki*t1**2*t2**3*t3**5*t4**4+95._ki/12._ki*t1**2*t4*t3**5*t2**6&
+ &+755._ki/6._ki*t1**2*t2**4*t3**5*t4**3+155._ki/4._ki*t1*t2**6*t3**5&
+ &*t4**3-1300._ki/3._ki*t1**2*t4**5*t3**4*t5*t2**3
+ !
+ stemp10=stemp11-320._ki/3._ki*t1**2*t4**4*t3**3*t5*t2**6+825._ki/2._k&
+ &i*t6**2*t1**6*t4*t3*t5**2*t2**2+200._ki/3._ki*t1**3*t4**6*t3**2*t&
+ &5**3*t2**2+150._ki*t1**3*t4**4*t3**2*t5**3*t2**4-200._ki*t6*t1**4&
+ &*t4*t3**3*t5*t2**4-250._ki*t1**5*t4*t3**3*t5**2*t2**2-625._ki/3._k&
+ &i*t1**2*t4**3*t3**4*t5*t2**5-375._ki*t6**2*t1**4*t4**3*t5*t3**2*&
+ &t2**3-200._ki*t1**2*t4**6*t3**3*t5**2*t2**3+120._ki*t6**2*t1**3*t&
+ &4**6*t3**2*t5*t2**2+16._ki/3._ki*t6**2*t1**2*t4**9*t3**3-3._ki/2._k&
+ &i*t6*t1**5*t4**5*t2**5+3._ki*t6*t1**5*t4**4*t2**6-15._ki/8._ki*t6*&
+ &t1**5*t4**3*t2**7+80._ki*t1*t4**6*t3**4*t2**5+44._ki*t1*t2**2*t3*&
+ &*5*t4**7-7._ki*t1*t2**7*t3**5*t4**2
+ !
+ stemp11=16._ki*t1*t4**8*t3**4*t2**3-2325._ki/2._ki*t6**2*t1**6*t4**2&
+ &*t3*t5**2*t2+220._ki*t6*t1**4*t4**4*t3**3*t2**2+13._ki/6._ki*t6*t1&
+ &*t4**3*t3**4*t2**7+280._ki*t6*t1**3*t4**5*t3**2*t5**2*t2**3+40._k&
+ &i/3._ki*t6*t4**2*t5**3*t2**5*t1**4*t3+95._ki/4._ki*t6**2*t1**4*t3*&
+ &*3*t2**4*t4-465._ki/4._ki*t6*t1**5*t4**2*t3**2*t2**4+75._ki/4._ki*t&
+ &6*t1**5*t4**3*t5**2*t2**5-156._ki*t1**4*t4**3*t5*t2**5*t3**2+96.&
+ &_ki*t1**4*t4**4*t5*t2**4*t3**2+120._ki*t6*t1**5*t4**4*t5**4*t2**2&
+ &+240._ki*t6*t1**5*t4*t3**3*t2**3+100._ki*t1**4*t4**3*t5**3*t3*t2*&
+ &*5-450._ki*t1**5*t4**2*t5**3*t3**2*t2**2-160._ki*t6*t1**2*t4**5*t&
+ &3**3*t5*t2**4-448._ki/3._ki*t6*t1**2*t4**7*t3**3*t5*t2**2
+ !
+ stemp9=stemp11-820._ki/3._ki*t6*t1**4*t3**4*t2**2*t4**2-160._ki*t1**&
+ &4*t4**4*t5**3*t3*t2**4+35._ki*t6*t1**6*t4*t5*t2**4*t3+2790._ki*t6&
+ &*t1**5*t4**2*t3**2*t5**2*t2**2-30._ki*t6*t1**4*t4**5*t3**2*t2**3&
+ &-95._ki/2._ki*t6*t1**4*t4**3*t3**2*t2**5+t4**2*t3**4*t2**9*t1/2._k&
+ &i+t6*t1**6*t4*t2**7/2._ki-t6*t1**6*t3*t2**6/2._ki+100._ki*t1**5*t3&
+ &**3*t5**2*t2**3+8._ki*t1**5*t4**2*t3*t2**7-7._ki*t1**5*t4*t3**2*t&
+ &2**6+30._ki*t1**5*t4**3*t5**4*t2**4-3._ki*t1**5*t4**3*t5**2*t2**6&
+ &-70._ki*t1**3*t4**3*t3**2*t5**2*t2**6+570._ki*t6*t1**4*t4**3*t3**&
+ &2*t5*t2**4+stemp10
+ !
+ stemp11=180._ki*t6*t1**4*t4**4*t3*t5**2*t2**4+270._ki*t6*t1**6*t4**&
+ &2*t3*t5**2*t2**2+6215._ki/2._ki*t6**2*t1**5*t4**3*t3**2*t5*t2+30.&
+ &_ki*t1**4*t4**3*t3*t2**6*t5**2-4._ki/3._ki*t6*t1**4*t4**6*t3*t2**4&
+ &-75._ki/2._ki*t6**2*t1**6*t3*t5**2*t2**3-t6*t4**2*t3**4*t2**8*t1/&
+ &6._ki+78._ki*t1**4*t4**2*t5*t2**6*t3**2-2250._ki*t6*t1**5*t4**3*t3&
+ &**2*t5**2*t2-50._ki*t1**5*t4*t5**4*t2**4*t3+24._ki*t1**4*t4**5*t3&
+ &*t2**4*t5**2+220._ki*t1**4*t4*t3**3*t5*t2**5-25._ki*t6**2*t1**6*t&
+ &4*t5**3*t2**3+11._ki/6._ki*t6**2*t4**2*t2**6*t1**5*t5+t1**4*t4**2&
+ &*t3*t2**8*t5+40._ki*t6*t1**6*t3*t5**3*t2**3+140._ki*t6*t1**3*t4**&
+ &5*t3**4*t2
+ !
+ stemp10=stemp11-15._ki/4._ki*t6*t1**5*t3**2*t2**6-5._ki/6._ki*t6*t3**&
+ &4*t2**6*t1**3+10._ki/3._ki*t6*t3**3*t2**6*t1**4+5._ki/2._ki*t6**2*t&
+ &1**6*t3*t2**5-565._ki/3._ki*t1**3*t4**3*t3**4*t2**4-4._ki/3._ki*t1*&
+ &*3*t4**6*t3**2*t2**5+110._ki*t1**3*t4**4*t3**4*t2**3-12._ki*t1**3&
+ &*t4**2*t3**3*t2**7+105._ki/2._ki*t1**3*t3**5*t2**2*t4**3+7._ki/6._k&
+ &i*t1**3*t4**3*t3**2*t2**8-8._ki*t1**4*t4**4*t3**2*t2**5-13._ki/2.&
+ &_ki*t1**4*t4**2*t3**2*t2**7+22._ki*t1**4*t4*t3**3*t2**6+3._ki*t1**&
+ &5*t4**3*t5*t2**7+170._ki*t1*t2**4*t3**5*t4**5-110._ki*t1*t2**5*t3&
+ &**5*t4**4-56._ki*t1*t4**7*t3**4*t2**4
+ !
+ stemp11=25._ki*t1*t4**4*t3**4*t2**7+4._ki*t1**5*t4*t3*t2**7*t5-33._k&
+ &i/4._ki*t6**2*t1**3*t4**3*t5*t2**5*t3**2-120._ki*t1**3*t4**2*t3**&
+ &3*t2**6*t5-180._ki*t6*t1**5*t3**3*t5*t2**3+240._ki*t6*t1**4*t4**4&
+ &*t5**3*t3*t2**3-60._ki*t1*t4**5*t3**4*t2**6-11._ki/2._ki*t1*t4**3*&
+ &t3**4*t2**8-136._ki*t1*t2**3*t3**5*t4**6-4._ki*t1**4*t4**4*t3*t2*&
+ &*7+5._ki/2._ki*t1**4*t4**3*t3*t2**8+35._ki/2._ki*t1**4*t3**5*t2**2*&
+ &t4+2._ki*t1**4*t4**5*t3*t2**6+13._ki*t1**4*t4**3*t3**2*t2**6-3._ki&
+ &*t1**3*t4**4*t3**2*t2**7-24._ki*t1**5*t4*t5**2*t2**6*t3-60._ki*t1&
+ &**4*t4*t3**2*t5**2*t2**6
+ !
+ stemp8=stemp11+500._ki*t1**4*t4**3*t3**3*t5*t2**3-2825._ki/6._ki*t1*&
+ &*3*t4**3*t3**4*t2**3*t5+50._ki/3._ki*t6*t1**2*t4**4*t3**3*t2**6-5&
+ &._ki*t6*t1**6*t3*t5*t2**5+95._ki/6._ki*t6*t1**3*t3**4*t4*t2**5+24.&
+ &_ki*t6**2*t1**3*t4**8*t3**2*t5-80._ki*t1**5*t4*t5**3*t2**5*t3-200&
+ &._ki*t1**5*t4*t5*t3**3*t2**3-108._ki*t1**5*t4**2*t3**2*t5*t2**4+1&
+ &00._ki/3._ki*t6*t1**4*t4**5*t3*t2**4*t5-30._ki*t6*t1**4*t4**4*t3*t&
+ &2**5*t5+375._ki/4._ki*t6*t1**5*t4**3*t3**2*t2**3+180._ki*t1**3*t4*&
+ &*4*t3**2*t5**2*t2**5-200._ki*t1**3*t4**5*t3**2*t5**2*t2**4+t1**5&
+ &*t3**2*t2**7+72._ki*t6*t1*t2**3*t3**4*t4**7+stemp10+stemp9
+ !
+ stemp11=128._ki/3._ki*t6*t1**2*t4**8*t3**3*t5*t2+170._ki*t6**2*t1**3&
+ &*t4**5*t3**3*t2**2+5._ki*t6**2*t1**6*t4*t5*t2**5-55._ki/2._ki*t6**&
+ &2*t5*t2**4*t3**2*t1**5-35._ki/3._ki*t6*t1**3*t4**5*t3**2*t2**5-10&
+ &._ki/3._ki*t6*t1**3*t4**7*t3**2*t2**3+35._ki/3._ki*t6*t1**4*t4**3*t&
+ &3*t2**6*t5-2080._ki/3._ki*t6*t1**3*t4**5*t3**3*t5*t2**2+640._ki/3.&
+ &_ki*t6*t1**2*t4**6*t3**3*t5*t2**3+350._ki*t1**5*t4*t5**3*t3**2*t2&
+ &**3-200._ki/3._ki*t2**5*t3**5*t4**6+5._ki/3._ki*t3**4*t2**7*t1**3+t&
+ &6**2*t4*t3**3*t2**6*t1**3/2._ki-360._ki*t6*t1**4*t4**2*t3**2*t5**&
+ &2*t2**4-40._ki/3._ki*t6*t1**4*t4**6*t3*t2**3*t5+40._ki/3._ki*t4*t3*&
+ &*3*t2**7*t1**3*t5
+ !
+ stemp10=stemp11-60._ki*t6*t1**6*t2**3*t3**2*t5-5._ki/2._ki*t6*t4**2*&
+ &t5*t3**2*t2**7*t1**3+80._ki*t6*t1**4*t4**6*t3*t5**2*t2**2+275._ki&
+ &*t1**3*t4**4*t3**4*t2**2*t5-14._ki*t1**3*t3**2*t4**3*t5*t2**7-78&
+ &0._ki*t6**2*t1**4*t4**5*t3**2*t5*t2-112._ki/3._ki*t6*t1**2*t4**7*t&
+ &3**3*t2**3+200._ki/3._ki*t6*t1**2*t4**4*t5*t2**5*t3**3+110._ki/3._k&
+ &i*t6*t1*t4**5*t3**4*t2**5-8._ki*t1**5*t4**4*t5**3*t2**4+4._ki/3._k&
+ &i*t4*t2**8*t3**3*t1**3+95._ki*t1**4*t4**2*t3**4*t2**3-50._ki*t1**&
+ &5*t3**2*t5**3*t2**4-2._ki*t1**5*t4*t3*t2**8-10._ki*t1**5*t4**2*t5&
+ &**4*t2**5-210._ki*t6*t1**6*t4*t3*t5**2*t2**3+15._ki*t6*t1**4*t4**&
+ &2*t3**2*t2**6
+ !
+ stemp11=1170._ki*t6*t1**5*t4**3*t3*t5**2*t2**3-1900._ki/3._ki*t1**3*&
+ &t4**4*t3**3*t5**2*t2**3+300._ki*t1**3*t4**5*t3**3*t5**2*t2**2-15&
+ &._ki/2._ki*t1**4*t3**5*t2**3+20._ki/3._ki*t6*t1**3*t4**4*t3**2*t2**&
+ &6-15._ki/8._ki*t6*t1**3*t4**3*t3**2*t2**7+36._ki*t6**2*t1**2*t4**7&
+ &*t3**3*t2**2-5._ki*t6*t4**2*t5**2*t2**6*t1**3*t3**2+13._ki/12._ki*&
+ &t6**2*t1**2*t4**3*t3**3*t2**6-6._ki*t6**2*t1**2*t4**4*t3**3*t2**&
+ &5-544._ki/3._ki*t6*t1**2*t4**6*t3**4*t2**2-25._ki/2._ki*t6*t1**6*t2&
+ &**3*t4*t3**2+385._ki/6._ki*t6**2*t1**5*t4**3*t5**3*t2**3+84._ki*t1&
+ &**5*t4*t5*t2**5*t3**2+1140._ki*t6*t1**4*t4**3*t3**2*t5**2*t2**3+&
+ &16._ki*t1**3*t3**2*t4**6*t5*t2**4-25._ki/6._ki*t4*t5*t2**7*t3**4*t&
+ &1**2
+ !
+ stemp9=stemp11+80._ki*t1**3*t4**6*t3**2*t5**2*t2**3-720._ki*t6*t1**&
+ &5*t4**4*t3*t5**2*t2**2+780._ki*t6**2*t1**4*t4**4*t3**2*t5*t2**2-&
+ &39._ki/2._ki*t6*t1**5*t4**3*t3*t2**5-75._ki*t6*t1**5*t4**3*t5**3*t&
+ &2**4-35._ki/2._ki*t6*t1**6*t4**3*t5**2*t2**3+70._ki*t6*t1**6*t4**3&
+ &*t5**3*t2**2+200._ki*t1*t4**6*t3**4*t5*t2**4+80._ki*t1**5*t3**3*t&
+ &5*t2**4-2._ki*t1**5*t4**4*t5*t2**6-25._ki*t1**5*t3**4*t5*t2**2+15&
+ &._ki*t1**5*t4**3*t5**5*t2**3-10._ki*t1**5*t4**4*t5**5*t2**2-75._ki&
+ &/2._ki*t6**2*t1**6*t3**3*t2-45._ki*t6**2*t1**7*t4**2*t5**3-2._ki*t&
+ &6**2*t1**7*t3*t2**3-20._ki*t1**5*t4**4*t5**4*t2**3+stemp10
+ !
+ stemp11=325._ki/2._ki*t6**2*t1**6*t4**2*t5**3*t2**2+800._ki/3._ki*t6*&
+ &t1**3*t4**6*t3**3*t5*t2-75._ki*t6*t1**5*t4**3*t5**4*t2**3+40._ki/&
+ &3._ki*t6*t5*t2**5*t3**3*t1**4-10._ki/3._ki*t1**3*t3**5*t2**5+90._ki&
+ &*t6*t1**5*t3**2*t2**4*t5**2+15._ki*t6*t1**5*t4**2*t5**4*t2**4-12&
+ &5._ki/2._ki*t1**3*t4*t3**4*t2**5*t5+10._ki/3._ki*t6*t1**4*t4**5*t3*&
+ &t2**5+40._ki*t6*t1**3*t4**7*t3**2*t5*t2**2+200._ki/3._ki*t1**2*t4*&
+ &*7*t3**3*t5**2*t2**2-620._ki*t1**4*t4**2*t3**3*t5*t2**4+560._ki/3&
+ &._ki*t1**2*t4**5*t3**3*t5*t2**5-32._ki/3._ki*t1**2*t4**4*t3**3*t2*&
+ &*7-80._ki*t6*t1**6*t4**2*t5**4*t2**2-285._ki*t6*t1**5*t3**3*t2**2&
+ &*t4**2+320._ki*t1**5*t4**2*t3*t5**3*t2**4
+ !
+ stemp10=stemp11-5._ki/3._ki*t6*t4*t3**3*t2**7*t1**3-75._ki*t6**2*t1*&
+ &*7*t4*t3*t5**2+20._ki*t6*t1**6*t4*t5**3*t2**4+40._ki*t6*t4*t3**2*&
+ &t2**5*t1**4*t5**2+825._ki/2._ki*t6**2*t1**5*t3**2*t2**3*t4*t5-30.&
+ &_ki*t6*t1**5*t4**4*t5**2*t2**4+14._ki*t1**5*t4**3*t5*t3*t2**5+110&
+ &._ki*t6*t1**4*t3**4*t2**3*t4-105._ki*t6*t1**5*t3**4*t2*t4-128._ki/&
+ &3._ki*t6*t1*t2**2*t3**4*t4**8-44._ki/3._ki*t6*t1**2*t4**3*t5*t2**6&
+ &*t3**3-12._ki*t4**4*t3**5*t2**7-t6*t1**6*t2**6*t4*t5+30._ki*t6*t1&
+ &**6*t3*t5**2*t2**4-40._ki*t6*t1**2*t4**5*t3**3*t2**5-25._ki/6._ki*&
+ &t4**2*t5**2*t2**7*t1**2*t3**3+480._ki*t1**4*t4**4*t3**2*t5**2*t2&
+ &**3
+ !
+ stemp7=-16._ki*t1**5*t4**2*t5*t3*t2**6+stemp8-250._ki/3._ki*t6*t1**3&
+ &*t4**3*t3**3*t2**5-325._ki*t6**2*t1**6*t4**3*t5**3*t2-125._ki/2._k&
+ &i*t6**2*t1**6*t2**2*t3*t4**3-5._ki*t6*t1**6*t4*t5**2*t2**5-540._k&
+ &i*t1**5*t4**2*t3**2*t5**2*t2**3+495._ki*t6**2*t1**5*t4**2*t3*t5*&
+ &*2*t2**3+700._ki/3._ki*t1**2*t4**5*t3**3*t5**2*t2**4-400._ki/3._ki*&
+ &t1**2*t4**4*t3**3*t5**2*t2**5+stemp10-180._ki*t6*t1**4*t4**2*t3*&
+ &*2*t5*t2**5-200._ki*t6*t1**4*t4**5*t3*t5**2*t2**3+33._ki*t6**2*t1&
+ &**5*t4**4*t5*t2**4+110._ki/3._ki*t4**5*t3**5*t2**6-2._ki*t1**4*t3*&
+ &*3*t2**7+15._ki*t6*t1**5*t4**5*t5**2*t2**3-1000._ki/3._ki*t6*t1**3&
+ &*t4**3*t3**3*t5*t2**4+176._ki/3._ki*t6*t1**2*t4**7*t3**4*t2-7._ki*&
+ &t6**2*t1**3*t4**2*t3**3*t2**5+90._ki*t6*t1**5*t4*t3*t5**2*t2**5+&
+ &96._ki*t1**5*t4**2*t5**2*t2**5*t3-150._ki*t1**3*t4**2*t3**3*t5**2&
+ &*t2**5+20._ki*t6*t1**6*t4*t5**4*t2**3+36._ki*t1**3*t3**2*t4**4*t5&
+ &*t2**6-128._ki/3._ki*t2**3*t3**5*t4**8+72._ki*t2**4*t3**5*t4**7+15&
+ &._ki*t1**4*t3**4*t2**5-t4**2*t3**5*t2**9/6._ki+8._ki*t1**5*t3**3*t&
+ &2**5-175._ki/3._ki*t1**3*t4**3*t3**2*t5**3*t2**5-136._ki*t6**2*t1*&
+ &*3*t4**6*t3**3*t2+165._ki/4._ki*t6*t1**5*t4*t3**2*t2**5-55._ki/6._k&
+ &i*t6**2*t4**2*t5**3*t2**4*t1**5+stemp9
+ !
+ stemp10=-100._ki/3._ki*t6**2*t1**2*t4**6*t3**3*t2**3-64._ki/3._ki*t6*&
+ &*2*t1**2*t4**8*t3**3*t2-5._ki/3._ki*t6*t4**2*t2**7*t1**4*t3*t5-11&
+ &40._ki*t6*t1**5*t4**2*t3**3*t5*t2-12._ki*t1**4*t3**2*t5*t4*t2**7-&
+ &50._ki*t1**4*t4*t5**3*t2**5*t3**2-20._ki*t1**4*t4**2*t3*t5**3*t2*&
+ &*6+220._ki*t6*t1**4*t2**4*t3**3*t4**2-800._ki/3._ki*t6*t1**4*t4**5&
+ &*t5**3*t3*t2**2-50._ki*t6*t1**4*t2**5*t3**3*t4+190._ki/3._ki*t6*t1&
+ &**4*t4**4*t3**2*t2**4+10._ki*t6*t4**2*t3*t2**6*t1**4*t5**2-5._ki*&
+ &t6**2*t1**7*t5**3*t2**2+t4*t3**5*t2**8*t1/2._ki+25._ki/6._ki*t5*t2&
+ &**6*t3**4*t1**3-5._ki*t1**5*t4**2*t5**5*t2**4-t1**5*t4**2*t2**8*&
+ &t5-60._ki*t1**5*t3**2*t2**5*t5**2+t1**5*t4**2*t5**2*t2**7-10._ki*&
+ &t1**5*t2**3*t3**4-7._ki*t1**5*t4**3*t3*t2**6-20._ki*t1**5*t3**3*t&
+ &2**4*t4+10._ki*t6*t1**6*t3**3*t2**2-5._ki/3._ki*t4*t3**4*t2**8*t1*&
+ &*2+12._ki*t1**5*t4**3*t5**3*t2**5-80._ki*t1**4*t4*t3**4*t2**4+75.&
+ &_ki/2._ki*t1**4*t3**4*t5*t2**4+9._ki*t1**5*t4**2*t3**2*t2**5-62._ki&
+ &*t1**4*t4**2*t3**3*t2**5+360._ki*t6*t1**6*t4**2*t5**3*t2*t3-3._ki&
+ &/4._ki*t6*t1**5*t4**2*t5*t2**7-6._ki*t1**4*t4**2*t5**2*t2**7*t3+1&
+ &50._ki*t6*t1**6*t4*t5*t3**2*t2**2
+ !
+ stemp11=stemp10-25._ki/2._ki*t1**4*t4**2*t3*t5**4*t2**5+155._ki/4._ki&
+ &*t6**2*t1**3*t3**3*t4**3*t2**4-285._ki/2._ki*t6**2*t1**4*t4**2*t3&
+ &**3*t2**3+120._ki*t6*t1**5*t4**4*t5*t2**3*t3-14._ki*t6**2*t1**4*t&
+ &4**5*t3*t2**4+30._ki*t6**2*t1**7*t3*t5**2*t2-7._ki*t6**2*t1**7*t4&
+ &*t5*t2**3-40._ki*t1**3*t3**2*t4**5*t5*t2**5+475._ki*t1**3*t4**3*t&
+ &3**3*t5**2*t2**4+380._ki*t1**3*t4**3*t3**3*t2**5*t5+135._ki/4._ki*&
+ &t6**2*t1**4*t4**3*t5**2*t2**4*t3+55._ki/3._ki*t6**2*t1**2*t4**5*t&
+ &3**3*t2**4-80._ki*t6*t1**3*t4**4*t3**2*t5*t2**5-120._ki*t6*t1**3*&
+ &t4**6*t3**2*t5*t2**3-25._ki*t1**3*t4*t3**4*t2**6+55._ki/2._ki*t1**&
+ &3*t3**5*t2**4*t4
+ !
+ stemp9=stemp11+110._ki/3._ki*t6**2*t1**5*t2**3*t3**3-220._ki/3._ki*t6&
+ &**2*t1**5*t4**6*t5**3+210._ki*t6**2*t1**4*t4**5*t3**3+44._ki*t6**&
+ &2*t1**3*t4**7*t3**3-4._ki*t6**2*t1**4*t4**7*t3*t2**2+10._ki/3._ki*&
+ &t1**3*t4**5*t3**2*t2**6+110._ki*t1**3*t4**2*t3**4*t2**5+38._ki*t1&
+ &**3*t4**3*t3**3*t2**6-152._ki/3._ki*t1**3*t4**4*t3**3*t2**5+24._ki&
+ &*t1**3*t4**5*t3**3*t2**4+3._ki/8._ki*t6*t1**5*t4**2*t2**8+35._ki*t&
+ &6**2*t1**7*t4*t5**3*t2-165._ki*t6**2*t1**5*t4**4*t5**3*t2**2+25.&
+ &_ki/3._ki*t4**2*t5**3*t2**6*t1**3*t3**2+230._ki/3._ki*t6*t1**3*t4**&
+ &2*t3**3*t5*t2**5-160._ki*t6*t1**3*t4**4*t3**2*t5**2*t2**4+200._ki&
+ &*t1**5*t4**2*t5**4*t3*t2**3
+ !
+ stemp11=550._ki/3._ki*t6**2*t1**5*t4**5*t5**3*t2+680._ki/3._ki*t6*t1*&
+ &*2*t4**5*t3**4*t2**3-15._ki*t6*t1**5*t4*t5*t2**6*t3-28._ki/3._ki*t&
+ &6*t1**2*t4**2*t3**4*t2**6+880._ki*t6*t1**4*t4**4*t3**3*t5*t2-650&
+ &._ki*t1**4*t4**3*t3**2*t5**3*t2**3+300._ki*t6*t1**6*t4*t3**2*t5**&
+ &2*t2-90._ki*t6**2*t1**3*t4**5*t3**2*t5*t2**3-1125._ki*t6*t1**5*t4&
+ &**3*t3**2*t5*t2**2-495._ki*t6*t1**5*t4*t3**2*t5*t2**4-150._ki*t1*&
+ &t4**5*t3**4*t5*t2**5+40._ki*t1*t4**8*t3**4*t5*t2**2+80._ki*t1**4*&
+ &t4**5*t5**3*t3*t2**3-240._ki*t6*t1**3*t4**6*t3**2*t5**2*t2**2-84&
+ &._ki*t6**2*t1**3*t4**7*t3**2*t5*t2+44._ki/3._ki*t6**2*t1**5*t4**6*&
+ &t5*t2**2-110._ki/3._ki*t6**2*t1**5*t4**5*t5*t2**3
+ !
+ stemp10=stemp11+195._ki/2._ki*t6*t1**5*t4**2*t5*t2**5*t3-3135._ki/2.&
+ &_ki*t6**2*t1**5*t4**3*t3*t5**2*t2**2-5._ki/12._ki*t3**5*t2**7*t1**&
+ &2-3._ki*t6*t1**4*t4**4*t3*t2**6-440._ki/3._ki*t6*t1**2*t2**4*t4**4&
+ &*t3**4-200._ki/3._ki*t6*t1*t2**4*t3**4*t4**6-280._ki*t6*t1**6*t4*t&
+ &5**3*t3*t2**2+13._ki/6._ki*t4**3*t3**5*t2**8+66._ki*t6**2*t1**5*t4&
+ &**5*t3*t2**2+1560._ki*t6*t1**5*t4**3*t3*t5**3*t2**2+50._ki*t1**4*&
+ &t3**3*t4**3*t2**4+2._ki*t1**5*t4**4*t5**2*t2**5-205._ki/3._ki*t1**&
+ &3*t3**5*t2**3*t4**2+45._ki*t6*t1**5*t3**4*t2**2-45._ki*t6*t1**5*t&
+ &3**3*t2**4+7._ki/4._ki*t6*t1**6*t4**3*t2**5-15._ki*t6**2*t1**7*t3*&
+ &*2*t5
+ !
+ stemp11=stemp10+200._ki*t6**2*t1**6*t4**4*t5**3-3._ki/2._ki*t6*t1**5&
+ &*t4*t3*t2**7-280._ki*t1**5*t4**3*t3*t5**3*t2**3+420._ki*t1**5*t4*&
+ &t3**2*t5**2*t2**4+210._ki*t6*t1**4*t4**3*t3**4*t2+20._ki*t6*t4*t3&
+ &**2*t2**6*t1**4*t5-175._ki*t1**5*t4**3*t3*t5**4*t2**2-990._ki*t6*&
+ &t1**5*t4*t3**2*t5**2*t2**3+300._ki*t6**2*t1**4*t4**6*t3**2*t5+50&
+ &0._ki/3._ki*t1**2*t4**6*t3**4*t5*t2**2-6._ki*t6*t1**5*t4**4*t5*t2*&
+ &*5+15._ki/4._ki*t6*t1**5*t4**3*t5*t2**6-9._ki/4._ki*t6**2*t1**4*t4*&
+ &*3*t3*t2**6+15._ki*t6*t1**5*t4**2*t5**3*t2**5+50._ki*t1**4*t4**5*&
+ &t5**4*t3*t2**2+125._ki/2._ki*t1**4*t4**3*t5**4*t3*t2**4
+ !
+ stemp8=stemp11-11._ki/3._ki*t6*t1**2*t4**3*t3**3*t2**7+140._ki*t6*t1&
+ &**3*t4**5*t3**2*t5*t2**4-60._ki*t6*t1**5*t4**5*t5**3*t2**2+225._k&
+ &i/2._ki*t6**2*t1**6*t3**2*t5*t2**2+120._ki*t6*t1**5*t4**4*t5**3*t&
+ &2**3-70._ki*t6*t1**4*t4**3*t3*t5**2*t2**5-140._ki*t1*t4**7*t3**4*&
+ &t5*t2**3+45._ki*t6*t1**5*t2**5*t3**2*t5+5._ki*t6**2*t1**7*t2**2*t&
+ &3*t4+9._ki*t6**2*t1**7*t4**2*t5*t2**2+12._ki*t6**2*t1**4*t4**6*t3&
+ &*t2**3-1130._ki/3._ki*t6*t1**4*t2**3*t3**3*t4**3-60._ki*t6*t1**5*t&
+ &4**5*t5**4*t2+50._ki/3._ki*t4*t3**3*t2**6*t1**3*t5**2-t6**2*t4**2&
+ &*t3**3*t2**7*t1**2/12._ki+65._ki*t6**2*t1**6*t4**3*t5*t2**3+10._ki&
+ &*t4**2*t3**2*t2**7*t1**3*t5**2+stemp9
+ !
+ stemp11=stemp8+209._ki/2._ki*t6**2*t1**5*t4**3*t3*t2**4+2090._ki*t6*&
+ &*2*t1**5*t4**4*t3*t5**2*t2-120._ki*t6**2*t1**4*t4**4*t5**2*t2**3&
+ &*t3+2._ki*t4**2*t3**2*t2**8*t1**3*t5+320._ki/3._ki*t6*t1**4*t4**6*&
+ &t5**3*t3*t2+210._ki*t6**2*t1**4*t4**5*t3*t5**2*t2**2+160._ki/3._ki&
+ &*t1**2*t4**7*t3**3*t5*t2**3+880._ki*t6*t1**4*t4**2*t3**3*t2**3*t&
+ &5-33._ki*t6**2*t1**5*t4**2*t3*t2**5-780._ki*t1**4*t4**3*t3**2*t5*&
+ &*2*t2**4-1815._ki*t6**2*t1**5*t4**4*t3**2*t5+115._ki/6._ki*t6*t1**&
+ &3*t4**2*t3**3*t2**6-95._ki*t6*t1**3*t4**2*t3**4*t2**4-180._ki*t6*&
+ &*2*t1**4*t4**6*t3*t5**2*t2+8._ki*t6**2*t1**4*t4**4*t3*t2**5
+ !
+ stemp10=stemp11+8._ki*t1**4*t4**4*t3*t2**6*t5-48._ki*t1**4*t4**4*t3&
+ &*t2**5*t5**2-t6*t1**4*t4**2*t3*t2**8/6._ki-280._ki/3._ki*t6*t1**4*&
+ &t4**3*t5**3*t3*t2**4+60._ki*t6**2*t1**4*t4**7*t3*t5**2-55._ki*t6*&
+ &*2*t4*t3*t2**4*t1**5*t5**2-9._ki/2._ki*t6*t1**6*t4**2*t3*t2**4-7.&
+ &_ki/2._ki*t6*t1**6*t4**3*t5*t2**4+1395._ki*t6*t1**5*t4**2*t3**2*t5&
+ &*t2**3+30._ki*t1**2*t4**3*t5*t3**3*t2**7+625._ki*t1**4*t4**3*t3**&
+ &3*t5**2*t2**2-20._ki/3._ki*t6*t4*t5*t2**6*t3**3*t1**3+4._ki/3._ki*t&
+ &6*t4**2*t5*t2**7*t1**2*t3**3-1815._ki*t6**2*t1**5*t4**2*t3**2*t5&
+ &*t2**2+345._ki/4._ki*t6**2*t1**4*t4**2*t3**2*t5*t2**4+t6**2*t4**2&
+ &*t3*t2**7*t1**4/4._ki-585._ki*t6*t1**5*t4**2*t3*t5**2*t2**4
+ !
+ stemp11=stemp10+960._ki*t6*t1**5*t3**3*t5*t2**2*t4+32._ki/3._ki*t2**&
+ &2*t3**5*t4**9+2255._ki/3._ki*t6**2*t1**5*t3**3*t4**2*t2-460._ki*t6&
+ &**2*t1**4*t4**4*t3**3*t2-12._ki*t6*t1*t4**4*t3**4*t2**6-10._ki/3.&
+ &_ki*t4**2*t5*t3**3*t2**8*t1**2-775._ki*t1**4*t4**2*t3**3*t2**3*t5&
+ &**2-1520._ki*t6*t1**4*t4**4*t3**2*t5**2*t2**2+575._ki/12._ki*t1**2&
+ &*t4**2*t3**4*t5*t2**6-200._ki*t1**4*t3**4*t5*t2**3*t4+1425._ki/2.&
+ &_ki*t6**2*t1**6*t4**2*t3**2*t5+155._ki/2._ki*t6**2*t1**6*t2**3*t3*&
+ &t4**2+720._ki*t6*t1**4*t4**5*t3**2*t5**2*t2-500._ki/3._ki*t1**3*t4&
+ &**5*t3**2*t5**3*t2**3-15._ki/4._ki*t6*t1**5*t4**2*t5**2*t2**6+2._k&
+ &i/3._ki*t6*t4*t3**4*t2**7*t1**2
+ !
+ stemp9=stemp11+120._ki*t6*t1**5*t4*t5**3*t2**4*t3-600._ki*t6**2*t1*&
+ &*6*t3**2*t5*t2*t4+11._ki/3._ki*t6**2*t4*t2**6*t3*t1**5-15._ki/4._ki&
+ &*t6**2*t4**2*t5**2*t2**5*t1**4*t3-55._ki/4._ki*t1*t4**3*t5*t2**7*&
+ &t3**4+1300._ki/3._ki*t1**2*t4**4*t3**4*t5*t2**4+10._ki*t6*t1**3*t4&
+ &**6*t3**2*t2**4+stemp7+5._ki/24._ki*t6*t4**2*t3**2*t2**8*t1**3+3.&
+ &_ki/4._ki*t6**2*t4**2*t5*t2**6*t1**3*t3**2+75._ki/2._ki*t1**2*t4**3&
+ &*t5**2*t2**6*t3**3-15._ki/2._ki*t6**2*t4*t5*t2**5*t3**2*t1**4-195&
+ &._ki*t6*t1**5*t4**3*t5*t2**4*t3-920._ki/3._ki*t6*t1**3*t4**4*t3**4&
+ &*t2**2-5._ki/4._ki*t6**2*t3**3*t2**5*t1**4+3._ki*t6*t1**5*t4**5*t5&
+ &*t2**4-760._ki*t6*t1**4*t4**4*t3**2*t5*t2**3+1875._ki/2._ki*t6**2*&
+ &t1**6*t4**3*t3*t5**2
+ !
+ stemp11=stemp9-100._ki*t1**4*t4**4*t5**4*t3*t2**3+400._ki*t1**4*t4*&
+ &*4*t3**2*t5**3*t2**2+275._ki*t1**4*t4*t3**3*t2**4*t5**2+40._ki*t6&
+ &*t1**6*t3**3*t5*t2+4._ki*t6*t1**6*t4**2*t5*t2**5+32._ki/3._ki*t6*t&
+ &1*t2*t3**4*t4**9-4520._ki/3._ki*t6*t1**4*t4**3*t3**3*t2**2*t5+5._k&
+ &i/4._ki*t4**2*t5*t2**8*t1*t3**4+125._ki/2._ki*t1*t4**4*t5*t2**6*t3&
+ &**4+160._ki/3._ki*t6*t1**2*t4**6*t3**3*t2**4+32._ki/3._ki*t6*t1**2*&
+ &t4**8*t3**3*t2**2-65._ki/2._ki*t6**2*t1**6*t4**2*t5*t2**4+45._ki/2&
+ &._ki*t6*t1**3*t4**3*t5*t3**2*t2**6+360._ki*t6*t1**4*t4**5*t3**2*t&
+ &5*t2**2+20._ki*t6*t1**6*t4**2*t5**2*t2**4+7._ki/2._ki*t6*t1**6*t4*&
+ &t3*t2**5
+ !
+ stemp10=stemp11+80._ki*t6*t1**3*t4**7*t3**2*t5**2*t2-12._ki*t1**5*t&
+ &5*t3**2*t2**6-4._ki*t1**5*t4**2*t5**3*t2**6-25._ki*t1**4*t3**3*t5&
+ &**2*t2**5+t6**2*t1**7*t5*t2**4-t4**2*t3**3*t2**9*t1**2/3._ki-20.&
+ &_ki*t1**4*t3**3*t5*t2**6+t1**4*t4*t3**2*t2**8-t1**4*t4**2*t3*t2*&
+ &*9/2._ki-t1**3*t4**2*t3**2*t2**9/6._ki-55._ki/2._ki*t6**2*t1**6*t2*&
+ &*4*t3*t4-40._ki*t6**2*t1**6*t4**4*t5*t2**2-80._ki*t6*t1**6*t4**2*&
+ &t5**3*t2**3-780._ki*t6*t1**5*t4**2*t5**3*t3*t2**3+755._ki/3._ki*t6&
+ &*t1**3*t4**3*t3**4*t2**3-110._ki*t6**2*t1**3*t4**4*t3**3*t2**3-1&
+ &20._ki*t6*t1**6*t3**2*t5**2*t2**2
+ !
+ stemp11=stemp10+200._ki/3._ki*t6*t1**3*t4**6*t3**3*t2**2+520._ki/3._k&
+ &i*t6*t1**3*t4**4*t3**3*t2**4-520._ki/3._ki*t6*t1**3*t4**5*t3**3*t&
+ &2**3-960._ki*t6*t1**5*t4**4*t3*t5**3*t2+t6*t4**2*t3**3*t2**8*t1*&
+ &*2/3._ki+325._ki*t1**4*t4**2*t3**2*t5**3*t2**4-84._ki*t1**5*t4**3*&
+ &t5**2*t2**4*t3+45._ki*t6*t1**3*t4**3*t5**2*t2**5*t3**2+115._ki/6.&
+ &_ki*t1**2*t4**2*t3**4*t2**7-250._ki/3._ki*t1**2*t4**3*t3**4*t2**6+&
+ &200._ki/3._ki*t1**2*t4**6*t3**4*t2**3+3._ki*t1**2*t4**3*t3**3*t2**&
+ &8+16._ki/3._ki*t1**2*t4**7*t3**3*t2**4-45._ki*t6*t1**6*t4**2*t5*t2&
+ &**3*t3+390._ki*t1**4*t4**2*t3**2*t5**2*t2**5-605._ki/2._ki*t6**2*t&
+ &1**5*t3**3*t2**2*t4+39._ki/4._ki*t6*t1**5*t4**2*t3*t2**6
+ !
+ stemp6=stemp11-160._ki*t1**2*t4**6*t3**3*t5*t2**4+7._ki/6._ki*t6*t1*&
+ &*4*t4**3*t3*t2**7-16._ki*t1**2*t4**6*t3**3*t2**5+56._ki/3._ki*t1**&
+ &2*t4**5*t3**3*t2**6+520._ki/3._ki*t1**2*t4**4*t3**4*t2**5-5._ki*t1&
+ &**4*t4**3*t3*t2**7*t5-4._ki*t1**4*t4**5*t3*t2**5*t5+275._ki*t1**3&
+ &*t4**2*t3**4*t2**4*t5-1520._ki/3._ki*t1**3*t4**4*t3**3*t2**4*t5+7&
+ &55._ki/2._ki*t6**2*t1**4*t4**3*t3**3*t2**2+2080._ki/3._ki*t6*t1**3*&
+ &t4**4*t3**3*t5*t2**3+75._ki/2._ki*t6**2*t1**3*t4**4*t5*t2**4*t3**&
+ &2+70._ki*t6*t1**6*t4**3*t5**4*t2+240._ki*t1**3*t4**5*t3**3*t2**3*&
+ &t5+475._ki/2._ki*t1**4*t4**2*t3**4*t5*t2**2+155._ki/3._ki*t6*t1**2*&
+ &t3**4*t4**3*t2**5-990._ki*t6**2*t1**5*t4**5*t3*t5**2+12._ki*t6*t1&
+ &**5*t4**4*t3*t2**4
+ !
+ stemp7=t6/t1**5/t2**12
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp5=20._ki*t6**2*t1*t2*t3*t4*t5**2+5._ki*t6**2*t1*t2*t5*t3**2+5.&
+ &_ki*t6**3*t1*t3*t5*t2**2+65._ki*t6**3*t1*t4**2*t3*t5-25._ki*t6**3*&
+ &t1*t4**2*t5**2*t2-14._ki/3._ki*t6**2*t1*t2**3*t3*t4+16._ki*t6**3*t&
+ &1*t2**2*t3*t4+7._ki/6._ki*t6**2*t4*t3*t2**5+10._ki/3._ki*t6**2*t4**&
+ &3*t5**3*t2**2-10._ki/3._ki*t6**2*t4**4*t5**3*t2-5._ki/6._ki*t6**2*t&
+ &4**2*t5**3*t2**3+5._ki*t6**2*t1*t4**2*t2**4-2._ki*t6**2*t1*t4*t2*&
+ &*5+t6*t4*t2**6*t1/2._ki+20._ki*t6**3*t1*t4**2*t5*t2**2+56._ki/3._ki&
+ &*t6**3*t4**4*t3*t2+10._ki*t6**3*t4**2*t3*t2**3+10._ki*t6**3*t4**4&
+ &*t5**2*t2-24._ki*t6**3*t4**3*t3*t2**2-4._ki/3._ki*t6**3*t4*t3*t2**&
+ &4-5._ki*t6**3*t4**3*t5**2*t2**2+9._ki*t6**3*t1*t4**3*t2**2
+ !
+ stemp4=stemp5+16._ki/3._ki*t6**3*t4**5*t5*t2+5._ki/6._ki*t6**3*t4**2*&
+ &t5**2*t2**3+4._ki*t6**3*t4**3*t5*t2**3-8._ki*t6**3*t4**4*t5*t2**2&
+ &-2._ki/3._ki*t6**3*t4**2*t5*t2**4-4._ki*t6**3*t1*t4*t5*t2**3-25._ki&
+ &*t6**3*t4**2*t3*t5*t2**2-2._ki*t6**2*t4**4*t2**4-35._ki/6._ki*t6**&
+ &2*t4**2*t3*t2**4+7._ki/12._ki*t6**2*t4**2*t5*t2**5-7._ki/3._ki*t6**&
+ &2*t4**3*t5*t2**4+7._ki/3._ki*t6**2*t4**4*t5*t2**3+7._ki*t6**2*t4**&
+ &3*t3*t2**3-140._ki/3._ki*t6**3*t4**4*t3*t5-10._ki*t6**3*t1**2*t5**&
+ &2*t4+5._ki/2._ki*t6**3*t1**2*t5**2*t2+2._ki*t6**3*t1**2*t2*t3-2._ki&
+ &*t6**3*t1**2*t5*t2**2+60._ki*t6**3*t4**3*t3*t5*t2-40._ki*t6**3*t1&
+ &*t3*t5*t2*t4+5._ki*t6**3*t1*t4*t5**2*t2**2-24._ki*t6**3*t1*t4**3*&
+ &t5*t2
+ !
+ stemp5=-26._ki*t6**3*t1*t2*t3*t4**2-5._ki*t6**2*t1*t5**2*t3*t2**2-6&
+ &5._ki/2._ki*t6**2*t2*t3**2*t4**2*t5+20._ki*t6**2*t3**2*t4*t5*t2**2&
+ &+8._ki*t6**3*t1**2*t5*t2*t4-35._ki/6._ki*t6**2*t1*t4**2*t5*t2**3+5&
+ &._ki/3._ki*t6**2*t2**2*t3**3-t1**2*t2**4*t6**2/2._ki-20._ki/3._ki*t6&
+ &**3*t4**5*t5**2+t6**3*t4**2*t2**5/4._ki-3._ki/2._ki*t6**3*t4**3*t2&
+ &**4+3._ki/4._ki*t6**3*t1**2*t2**3-2._ki*t6**3*t4**5*t2**2+t4**2*t5&
+ &*t2**7/12._ki+t4*t3*t2**7/6._ki+2._ki*t6**2*t4**3*t2**5+5._ki/6._ki*&
+ &t6**3*t2**3*t3**2-95._ki/3._ki*t6**3*t3**2*t4**3+7._ki/3._ki*t6**2*&
+ &t1*t4*t5*t2**4+t6*t4**2*t2**7/4._ki+3._ki*t6**3*t4**4*t2**3-t6**2&
+ &*t4**2*t2**6/2._ki
+ !
+ stemp3=stemp5-t6*t4**3*t2**6/2._ki+25._ki*t6**2*t4**2*t5**2*t3*t2**&
+ &2+stemp4-30._ki*t6**2*t4**3*t5**2*t3*t2-5._ki*t6**2*t4*t5**2*t3*t&
+ &2**3-10._ki/3._ki*t6**2*t1*t4*t5**3*t2**2+25._ki/3._ki*t6**2*t1*t4*&
+ &*2*t5**3*t2+10._ki/3._ki*t6**3*t4*t3*t5*t2**3+7._ki/12._ki*t6**2*t1&
+ &**2*t5*t2**3-5._ki/6._ki*t6**2*t1**2*t2*t5**3+7._ki/6._ki*t6**2*t1*&
+ &t2**4*t3-5._ki*t6**2*t2*t3**3*t4-5._ki/2._ki*t6**2*t2**3*t3**2*t5-&
+ &5._ki*t6**3*t1*t3**2*t2+15._ki*t6**3*t3**2*t1*t4+65._ki/2._ki*t6**3&
+ &*t3**2*t2*t4**2-10._ki*t6**3*t2**2*t3**2*t4-15._ki/2._ki*t6**3*t1*&
+ &t4**2*t2**3+3._ki/2._ki*t6**3*t1*t4*t2**4+30._ki*t6**3*t1*t4**3*t5&
+ &**2-2._ki*t6**3*t1*t2**3*t3-5._ki*t6**3*t1**2*t3*t5-3._ki*t6**3*t1&
+ &**2*t2**2*t4
+ !
+ stemp4=1._ki/t2**10*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(-2._ki*t3*t1*t6+2._ki*t3**2*t2+3._ki*t6*t4*t2*t3-6._ki*t4**2&
+ &*t3*t6+t3*t5*t2*t4-4._ki*t4*t1*t6*t5)*t4/t2**4/t3*q(4,(t2*t3-t1*&
+ &t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp9=22._ki/3._ki*t6**3*t1**3*t4**3*t5*t2**3+25._ki/6._ki*t6**3*t1*&
+ &*4*t4*t5**2*t2**2+7._ki/3._ki*t6**2*t1**2*t4**4*t3*t2**4-7._ki/6._k&
+ &i*t6**2*t1**2*t4**3*t3*t2**5+2._ki/3._ki*t6**3*t1**5*t2*t3+15._ki/&
+ &2._ki*t6**3*t1**4*t4**3*t2**2-25._ki/4._ki*t6**3*t1**4*t4**2*t2**3&
+ &+t1**3*t4*t3*t2**7/18._ki+5._ki/4._ki*t6**3*t1**4*t4*t2**4+25._ki*t&
+ &6**3*t1**4*t4**3*t5**2-5._ki/3._ki*t6**3*t1**4*t2**3*t3-11._ki/4._k&
+ &i*t6**3*t1**3*t4**3*t2**4-11._ki/3._ki*t6**3*t1**3*t4**5*t2**2+55&
+ &._ki/36._ki*t6**3*t1**3*t3**2*t2**3-110._ki/9._ki*t6**3*t1**3*t4**5&
+ &*t5**2-1045._ki/18._ki*t6**3*t1**3*t3**2*t4**3+11._ki/24._ki*t6**3*&
+ &t1**3*t4**2*t2**5
+ !
+ stemp8=stemp9+11._ki/2._ki*t6**3*t1**3*t4**4*t2**3+5._ki/2._ki*t6**2*&
+ &t1**3*t3**3*t2**2+5._ki/2._ki*t6**2*t1**4*t4**2*t2**4+7._ki/12._ki*&
+ &t6**2*t1**4*t2**4*t3+5._ki/12._ki*t6**3*t1*t4**3*t3**2*t2**4-70._k&
+ &i/9._ki*t6**2*t1*t4**4*t3**3*t2**2-25._ki/18._ki*t6**2*t1*t2**4*t3&
+ &**3*t4**2+20._ki/3._ki*t6**2*t1**2*t4**5*t3*t5**2*t2+70._ki/3._ki*t&
+ &6**2*t1**2*t3**2*t4**4*t5*t2-14._ki/9._ki*t6**2*t1**2*t4**5*t3*t2&
+ &**3-30._ki*t6**2*t1**2*t3**2*t4**3*t5*t2**2-5._ki/18._ki*t6**2*t1*&
+ &*2*t3**3*t2**4-10._ki/9._ki*t6**2*t4**4*t3**3*t2**4+20._ki/9._ki*t6&
+ &**2*t4**5*t3**3*t2**3-20._ki/9._ki*t6**2*t4**6*t3**3*t2**2+25._ki/&
+ &2._ki*t6**3*t1**4*t3**2*t4-25._ki/6._ki*t6**3*t1**4*t3**2*t2
+ !
+ stemp9=8._ki/9._ki*t6**2*t4**7*t3**3*t2-t6**2*t1**4*t4*t2**5-3._ki/4&
+ &._ki*t6**2*t1**3*t4**2*t2**6-3._ki*t6**2*t1**3*t4**4*t2**4+3._ki*t&
+ &6**2*t1**3*t4**3*t2**5-t6*t1**3*t4**3*t2**6/2._ki+t6*t1**3*t4**2&
+ &*t2**7/4._ki-t6**2*t2**6*t3**3*t4**2/36._ki+5._ki/18._ki*t6**2*t2**&
+ &5*t3**3*t4**3+t1**3*t4**2*t5*t2**7/9._ki-70._ki/3._ki*t6**3*t1**2*&
+ &t4**4*t3**2*t2+55._ki/9._ki*t6**3*t1**3*t4*t3*t5*t2**3+15._ki*t6**&
+ &3*t1**2*t4**3*t3**2*t2**2+16._ki/3._ki*t6**3*t1**2*t4**5*t3*t2**2&
+ &-44._ki/3._ki*t6**3*t1**3*t4**4*t5*t2**2-55._ki/3._ki*t6**3*t1**3*t&
+ &4*t3**2*t2**2-22._ki/9._ki*t6**3*t1**3*t4*t3*t2**4
+ !
+ stemp7=stemp9+stemp8-40._ki/3._ki*t6**3*t1**2*t4**5*t3*t5*t2+10._ki*&
+ &t6**3*t1**2*t4**4*t3*t5*t2**2-25._ki/6._ki*t6**3*t1**2*t4**2*t3**&
+ &2*t2**3+4._ki/3._ki*t6**3*t1**2*t4**3*t3*t2**4-770._ki/9._ki*t6**3*&
+ &t1**3*t4**4*t3*t5+55._ki/3._ki*t6**3*t1**3*t4**4*t5**2*t2-55._ki/6&
+ &._ki*t6**3*t1**3*t4**3*t5**2*t2**2+25._ki/2._ki*t6**2*t1**2*t3**2*&
+ &t4**2*t5*t2**3-10._ki*t6**2*t1**2*t4**4*t3*t5**2*t2**2-11._ki/9._k&
+ &i*t6**3*t1**3*t4**2*t5*t2**4+7._ki/6._ki*t6**2*t1**4*t4*t5*t2**4+&
+ &25._ki/6._ki*t6**2*t1**4*t4**2*t5**3*t2+10._ki/3._ki*t6**3*t1*t4**5&
+ &*t3**2*t2**2+8._ki/3._ki*t6**3*t1**5*t5*t2*t4+20._ki/3._ki*t6**3*t1&
+ &**2*t4**6*t3*t5-8._ki/3._ki*t6**3*t1**2*t4**6*t3*t2-4._ki*t6**3*t1&
+ &**2*t4**4*t3*t2**3
+ !
+ stemp9=stemp7-35._ki/12._ki*t6**2*t1**4*t4**2*t5*t2**3+110._ki*t6**3&
+ &*t1**3*t4**3*t3*t5*t2+715._ki/12._ki*t6**3*t1**3*t3**2*t4**2*t2+5&
+ &5._ki/36._ki*t6**3*t1**3*t4**2*t5**2*t2**3+40._ki/9._ki*t6**2*t1*t4&
+ &**5*t3**3*t2+88._ki/9._ki*t6**3*t1**3*t4**5*t5*t2-10._ki/3._ki*t6**&
+ &3*t1**2*t4**3*t3*t5*t2**3-5._ki/3._ki*t6**2*t1**4*t4*t5**3*t2**2-&
+ &7._ki/3._ki*t6**2*t1**4*t2**3*t3*t4+55._ki/3._ki*t6**3*t1**3*t4**2*&
+ &t3*t2**3+40._ki/3._ki*t6**3*t1**2*t4**5*t3**2+4._ki/3._ki*t6**3*t1*&
+ &t4**7*t3**2-5._ki/3._ki*t6**3*t1**5*t3*t5-t6**3*t1**5*t2**2*t4-10&
+ &._ki/3._ki*t6**3*t1**5*t5**2*t4+5._ki/6._ki*t6**3*t1**5*t5**2*t2
+ !
+ stemp8=stemp9-2._ki/3._ki*t6**3*t1**5*t5*t2**2-44._ki*t6**3*t1**3*t4&
+ &**3*t3*t2**2-10._ki/3._ki*t6**3*t1*t4**6*t3**2*t2+5._ki*t6**2*t1*t&
+ &4**4*t3**2*t5*t2**3+5._ki*t6**2*t1*t2**3*t3**3*t4**3+75._ki/2._ki*&
+ &t6**2*t1**3*t4**2*t5**2*t3*t2**2+308._ki/9._ki*t6**3*t1**3*t4**4*&
+ &t3*t2-15._ki/4._ki*t6**2*t1**3*t2**3*t3**2*t5-45._ki*t6**2*t1**3*t&
+ &4**3*t5**2*t3*t2+10._ki*t6**2*t1**4*t5**2*t3*t2*t4+5._ki/2._ki*t6*&
+ &*2*t1**4*t3**2*t5*t2-195._ki/4._ki*t6**2*t1**3*t3**2*t5*t2*t4**2-&
+ &35._ki/4._ki*t6**2*t1**3*t4**2*t3*t2**4-275._ki/6._ki*t6**3*t1**3*t&
+ &4**2*t3*t5*t2**2+7._ki/4._ki*t6**2*t1**3*t4*t3*t2**5-5._ki/3._ki*t6&
+ &**3*t1*t4**4*t3**2*t2**3+25._ki/6._ki*t6**3*t1**4*t3*t5*t2**2-5._k&
+ &i/2._ki*t6**2*t1**4*t5**2*t3*t2**2
+ !
+ stemp9=stemp8-t6**3*t1**2*t4**2*t3*t2**5/6._ki+30._ki*t6**2*t1**3*t&
+ &3**2*t5*t2**2*t4+21._ki/2._ki*t6**2*t1**3*t4**3*t3*t2**3-125._ki/6&
+ &._ki*t6**3*t1**4*t4**2*t5**2*t2+7._ki/8._ki*t6**2*t1**3*t4**2*t5*t&
+ &2**5+95._ki/9._ki*t6**2*t1**2*t3**3*t4**3*t2-65._ki/6._ki*t6**2*t1*&
+ &*2*t3**3*t4**2*t2**2-20._ki/3._ki*t6**2*t1*t4**5*t3**2*t5*t2**2+1&
+ &0._ki/3._ki*t6**2*t1*t4**6*t3**2*t5*t2-15._ki/2._ki*t6**2*t1**3*t3*&
+ &*3*t2*t4-7._ki/2._ki*t6**2*t1**3*t4**3*t5*t2**4+7._ki/2._ki*t6**2*t&
+ &1**3*t4**4*t5*t2**3+40._ki/3._ki*t6**3*t1**4*t2**2*t3*t4+50._ki/3.&
+ &_ki*t6**3*t1**4*t4**2*t5*t2**2+325._ki/6._ki*t6**3*t1**4*t4**2*t3*&
+ &t5-100._ki/3._ki*t6**3*t1**4*t3*t5*t2*t4-t6**3*t1*t4**2*t3**2*t2*&
+ &*5/24._ki
+ !
+ stemp6=stemp9+5._ki/12._ki*t6**3*t1**2*t4*t3**2*t2**4+5._ki/12._ki*t6&
+ &**3*t1**2*t4**2*t5*t2**4*t3+5._ki/36._ki*t6**2*t1*t2**5*t3**3*t4+&
+ &5._ki*t6**2*t1**2*t4**3*t3*t5**2*t2**3+10._ki/3._ki*t6**2*t1**2*t4&
+ &*t3**3*t2**3+t6**3*t1**5*t2**3/4._ki-5._ki/3._ki*t6**2*t1*t4**3*t3&
+ &**2*t5*t2**4+5._ki*t6**2*t1**3*t4**3*t5**3*t2**2-5._ki*t6**2*t1**&
+ &3*t4**4*t5**3*t2-10._ki/3._ki*t6**3*t1**4*t4*t5*t2**3-20._ki*t6**3&
+ &*t1**4*t4**3*t5*t2+5._ki/24._ki*t6**2*t1*t4**2*t3**2*t2**5*t5-5._k&
+ &i/6._ki*t6**2*t1**2*t4**2*t3*t5**2*t2**4-5._ki/3._ki*t6**2*t1**2*t&
+ &4*t3**2*t5*t2**4+7._ki/36._ki*t6**2*t1**2*t4**2*t3*t2**6-65._ki/3.&
+ &_ki*t6**3*t1**4*t2*t3*t4**2-5._ki/4._ki*t6**2*t1**3*t4**2*t5**3*t2&
+ &**3-15._ki/2._ki*t6**2*t1**3*t4*t5**2*t3*t2**3
+ !
+ stemp7=1._ki/t1**3/t2**10
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ stemp7=-660._ki*t6*t4*t3**2*t5**2*t2**4+450._ki*t6*t4**2*t5**3*t3**&
+ &2*t2**2-12._ki*t6*t1*t4**2*t5**3*t2**4+3._ki*t6*t1*t4**2*t5**2*t2&
+ &**5-15._ki*t6*t1*t4**2*t5**5*t2**2-30._ki*t6*t1*t4**2*t5**4*t2**3&
+ &-3._ki*t6*t1*t4**2*t2**6*t5-140._ki*t6**2*t1*t4*t5**3*t2**4-400._k&
+ &i*t6**2*t4*t5**3*t2**4*t3+30._ki*t6**2*t1**2*t4*t5**4*t2-15._ki/2&
+ &._ki*t6**2*t1**2*t4*t5**2*t2**3+30._ki*t6**2*t1**2*t4*t5**3*t2**2&
+ &+35._ki*t6**2*t1*t4**3*t5**2*t2**3+260._ki*t6**2*t1*t4**2*t5**4*t&
+ &2**2+7._ki*t6**2*t1*t4**3*t5*t2**4-140._ki*t6**2*t1*t4**3*t5**4*t&
+ &2-13._ki*t6**2*t1*t4**2*t5*t2**5
+ !
+ stemp6=stemp7-65._ki*t6**2*t1*t4**2*t5**2*t2**4+260._ki*t6**2*t1*t4&
+ &**2*t5**3*t2**3-140._ki*t6**2*t1*t4**3*t5**3*t2**2-3._ki/2._ki*t6*&
+ &*2*t1**2*t4*t5*t2**4+90._ki*t6**2*t1*t4**2*t5*t2**3*t3+660._ki*t6&
+ &**2*t1*t4*t3*t5**2*t2**3-110._ki*t6**2*t1*t4*t5*t2**4*t3-540._ki*&
+ &t6**2*t1*t4**2*t3*t5**2*t2**2-720._ki*t6**2*t1*t4**2*t5**3*t2*t3&
+ &+880._ki*t6**2*t1*t4*t5**3*t3*t2**2-120._ki*t6**2*t4**4*t5**4*t2*&
+ &*2+40._ki*t6**2*t4**5*t5**4*t2-125._ki/2._ki*t6**2*t4**3*t3**2*t2*&
+ &*3-8._ki*t6**2*t4**4*t3*t2**4+130._ki*t6**2*t4**3*t5**3*t2**4-120&
+ &._ki*t6**2*t4**4*t5**3*t2**3-13._ki/2._ki*t6**2*t4**3*t5*t2**6+6._k&
+ &i*t6**2*t4**4*t5*t2**5
+ !
+ stemp5=-2._ki*t6**2*t4**5*t5*t2**4-10._ki*t6**2*t4**5*t5**2*t2**3+3&
+ &0._ki*t6**2*t4**4*t5**2*t2**4-65._ki/2._ki*t6**2*t4**3*t5**2*t2**5&
+ &-50._ki*t6*t4**3*t5**4*t2**4+20._ki*t6*t4**4*t5**4*t2**3-5._ki*t6*&
+ &t4**3*t5*t2**7+2._ki*t6*t4**4*t5*t2**6-25._ki*t6*t4**3*t5**5*t2**&
+ &3+10._ki*t6*t4**4*t5**5*t2**2+8._ki*t6*t4**4*t5**3*t2**4-13._ki*t6&
+ &*t4**2*t3*t2**7-20._ki*t6*t4**3*t5**3*t2**5+7._ki*t6*t4**3*t3*t2*&
+ &*6+11._ki*t6*t4*t3**2*t2**6-9._ki*t6*t4**2*t3**2*t2**5+5._ki*t6*t4&
+ &**3*t5**2*t2**6-2._ki*t6*t4**4*t5**2*t2**5-13._ki*t6**3*t4*t3*t2*&
+ &*6-240._ki*t6**2*t3**2*t2**4*t5**2-60._ki*t6**2*t4**2*t5**4*t2**4&
+ &+t6**2*t1**2*t5*t2**5+5._ki*t6**2*t1**2*t5**2*t2**4-20._ki*t6**2*&
+ &t1**2*t5**3*t2**3-20._ki*t6**2*t1**2*t5**4*t2**2+40._ki*t6**3*t4*&
+ &*2*t5**3*t2**4-8._ki*t6**3*t4**2*t5*t2**6+t6*t1*t2**5*t3**2-220.&
+ &_ki*t3**3*t2**3*t6**2*t4-120._ki*t3**3*t2**4*t6*t5+190._ki*t3**3*t&
+ &2**2*t6**2*t4**2+9._ki*t3*t2**3*t6**3*t1**2-15._ki*t3**2*t2**4*t1&
+ &*t6**2+20._ki*t3**3*t2**4*t6*t4+25._ki*t6*t5*t2**2*t3**4+stemp6
+ !
+ stemp6=-535._ki*t2*t3**3*t6**3*t4**2+290._ki*t2**2*t3**3*t6**3*t4-1&
+ &05._ki*t3**3*t6**3*t1*t4+3._ki*t6**2*t2**6*t1*t3+2._ki*t6*t1*t3*t2&
+ &**7+t2**2*t1**3*t6**3*t5+45._ki*t6**3*t5*t1**2*t3**2-150._ki*t2**&
+ &3*t3**3*t6*t5**2+240._ki*t2**3*t3**3*t6**2*t5+4._ki*t6*t4**2*t2**&
+ &8*t5+180._ki*t3**2*t2**3*t6**2*t5*t1-300._ki*t3**2*t2**2*t6**2*t4&
+ &*t5*t1+200._ki*t3**3*t2**3*t6*t4*t5-15._ki*t3*t2**2*t6**3*t4*t1**&
+ &2+25._ki*t3**2*t2**3*t1*t6**2*t4-5._ki*t3*t2**3*t1**2*t6**2*t5+6.&
+ &_ki*t6*t1*t2**5*t3*t4*t5-3._ki*t6*t1*t2**6*t4*t3-12._ki*t3**2*t2**&
+ &4*t1*t6*t5-80._ki*t6**2*t5*t2*t1*t3**3-135._ki*t2*t3*t1**2*t6**3*&
+ &t5**2+360._ki*t2**2*t3**2*t1*t6**2*t5**2-855._ki*t3**2*t1*t6**3*t&
+ &5*t4**2+t4**2*t2**10/2._ki-t4**3*t2**9/4._ki+t6**2*t4*t2**9/4._ki-&
+ &3._ki/2._ki*t6**2*t4**2*t2**8+60._ki*t3**3*t2**4*t6**2-5._ki*t1**3*&
+ &t6**3*t5**3+10._ki*t6*t2**3*t3**4-40._ki*t3**4*t2**2*t6**2+40._ki*&
+ &t6**3*t4**6*t5**3-3._ki*t6*t3**2*t2**7+stemp5-630._ki*t6**3*t3**2&
+ &*t2**3*t4*t5
+ !
+ stemp7=stemp6-1080._ki*t6**3*t1*t4*t3*t5**2*t2**2+1980._ki*t6**3*t1&
+ &*t4**2*t3*t5**2*t2+33._ki*t6**3*t1**2*t4*t5*t2**3-27._ki*t6**3*t1&
+ &**2*t4**2*t5*t2**2-165._ki*t6**3*t1**2*t4*t5**3*t2+75._ki*t6**3*t&
+ &1*t2**2*t3*t4**3+48._ki*t6**3*t1*t4**4*t5*t2**2-1125._ki*t6**3*t1&
+ &*t4**3*t3*t5**2+72._ki*t6**3*t1*t2**4*t3*t4-465._ki*t6**3*t1*t4**&
+ &2*t5**3*t2**2-132._ki*t6**3*t1*t2**3*t3*t4**2+570._ki*t6**3*t1*t4&
+ &**3*t5**3*t2-114._ki*t6**3*t1*t4**3*t5*t2**3+93._ki*t6**3*t1*t4**&
+ &2*t5*t2**4-855._ki*t6**3*t4**2*t3*t5**2*t2**3+1695._ki*t6**3*t4**&
+ &3*t3*t5**2*t2**2-1560._ki*t6**3*t4**4*t3*t5**2*t2
+ !
+ stemp4=stemp7-2265._ki*t6**3*t4**3*t3**2*t5*t2+1845._ki*t6**3*t4**2&
+ &*t3**2*t5*t2**2+40._ki*t6**2*t4**5*t5**3*t2**2+40._ki*t2*t3*t1**2&
+ &*t6**2*t5**3+225._ki*t3*t1**2*t6**3*t4*t5**2-270._ki*t2**2*t3**2*&
+ &t1*t6**3*t5+990._ki*t2*t3**2*t1*t6**3*t5*t4-600._ki*t2*t3**2*t1*t&
+ &6**2*t4*t5**2-880._ki*t2**2*t3**3*t6**2*t5*t4+760._ki*t2*t3**3*t6&
+ &**2*t5*t4**2+175._ki*t6*t4*t5**4*t2**4*t3-14._ki*t6*t4*t3*t2**7*t&
+ &5+280._ki*t6*t4*t5**3*t2**5*t3+250._ki*t2**2*t3**3*t6*t4*t5**2+15&
+ &0._ki*t6**3*t1*t4*t5**3*t2**3+180._ki*t6**3*t1*t3*t5**2*t2**3+84.&
+ &_ki*t6*t4*t5**2*t2**6*t3+50._ki*t6*t1*t5**4*t3*t2**3+80._ki*t6*t1*&
+ &t5**3*t3*t2**4
+ !
+ stemp6=stemp4-300._ki*t6**2*t4*t3*t5**2*t2**5+35._ki*t6**2*t1*t4*t5&
+ &**2*t2**5-140._ki*t6**2*t1*t4*t5**4*t2**3+1440._ki*t6**2*t4*t3**2&
+ &*t5**2*t2**3+1500._ki*t6**2*t4**3*t3**2*t5**2*t2+720._ki*t6**2*t4&
+ &*t3**2*t5*t2**4-1320._ki*t6**2*t4**2*t3**2*t5*t2**3-1520._ki*t6**&
+ &2*t4**3*t3*t5**3*t2**2-2640._ki*t6**2*t4**2*t3**2*t5**2*t2**2+75&
+ &0._ki*t6**2*t4**3*t3**2*t5*t2**2+640._ki*t6**2*t4**4*t3*t5**3*t2-&
+ &155._ki*t6**2*t4**2*t5*t2**5*t3+190._ki*t6**2*t4**3*t5*t2**4*t3+4&
+ &._ki*t6*t1*t4*t5*t2**7+24._ki*t6*t1*t3*t5**2*t2**5-4._ki*t6*t1*t4*&
+ &t5**2*t2**6+195._ki*t6**3*t4*t3*t5**2*t2**4+180._ki*t6*t3**2*t2**&
+ &5*t5**2-4._ki*t6*t4**2*t5**2*t2**7+150._ki*t6*t3**2*t5**3*t2**4+7&
+ &._ki*t6*t4*t3*t2**8+40._ki*t6*t4**2*t5**4*t2**5-60._ki*t6**2*t4**2&
+ &*t5**3*t2**5+3._ki*t6**2*t4**2*t5*t2**7+5._ki*t6**2*t4*t3*t2**7-1&
+ &20._ki*t6**2*t2**5*t3**2*t5-7._ki/2._ki*t6**2*t1*t4*t2**7+75._ki*t6&
+ &**3*t3**2*t2**4*t5+45._ki*t6**3*t1**2*t5**3*t2**2-9._ki*t6**3*t1*&
+ &*2*t5*t2**4-12._ki*t6**3*t1*t3*t2**5-t6**2*t1**2*t3*t2**4/2._ki+6&
+ &0._ki*t3**3*t2*t6**3*t1+70._ki*t3**4*t2*t6**2*t4
+ !
+ stemp5=stemp6-20._ki*t6**2*t2**2*t1*t3**3+36._ki*t6*t5*t3**2*t2**6+&
+ &16._ki*t6*t4**2*t5**3*t2**6+15._ki*t6**2*t4**2*t5**2*t2**6+20._ki*&
+ &t6*t4**2*t5**5*t2**4+t6**3*t4*t5*t2**7-5._ki*t6**3*t4*t5**3*t2**&
+ &5-15._ki*t6**3*t3*t5**2*t2**5-15._ki*t6**3*t1*t5**3*t2**4+3._ki*t6&
+ &**3*t1*t5*t2**6+10._ki*t6**2*t4*t5**3*t2**6-5._ki/2._ki*t6**2*t4*t&
+ &5**2*t2**7-5._ki*t6**2*t5*t2**7*t3+10._ki*t6**2*t4*t5**4*t2**5+30&
+ &._ki*t6**2*t3*t5**2*t2**6+40._ki*t6**2*t5**3*t2**5*t3-t6*t1*t5*t2&
+ &**8-40._ki*t6*t3*t5**3*t2**6-25._ki*t6*t5**4*t2**5*t3+2._ki*t6*t5*&
+ &t3*t2**8-t6**2*t4*t2**8*t5/2._ki-5._ki*t6**2*t1*t5**2*t2**6-t6**2&
+ &*t1*t5*t2**7+20._ki*t6**2*t1*t5**4*t2**4+20._ki*t6**2*t1*t5**3*t2&
+ &**5-10._ki*t6*t4*t5**4*t2**6-t6*t4*t2**9*t5-4._ki*t6*t4*t5**3*t2*&
+ &*7+t6*t2**8*t4*t5**2-5._ki*t6*t4*t5**5*t2**5-12._ki*t6*t3*t5**2*t&
+ &2**7-10._ki*t6*t1*t5**4*t2**5-5._ki*t6*t1*t5**5*t2**4-4._ki*t6*t1*&
+ &t5**3*t2**6+t6*t1*t5**2*t2**7
+ !
+ stemp6=stemp5+990._ki*t6**3*t4**4*t3**2*t5+25._ki*t6**3*t4**3*t5*t2&
+ &**5-8._ki*t6**3*t4**6*t5*t2**2-125._ki*t6**3*t4**3*t5**3*t2**3+57&
+ &._ki*t6**3*t4**2*t3*t2**5-36._ki*t6**3*t4**5*t3*t2**2-140._ki*t6**&
+ &3*t4**5*t5**3*t2+190._ki*t6**3*t4**4*t5**3*t2**2-38._ki*t6**3*t4*&
+ &*4*t5*t2**4+104._ki*t6**3*t4**4*t3*t2**3-113._ki*t6**3*t4**3*t3*t&
+ &2**4+540._ki*t6**3*t4**5*t3*t5**2+28._ki*t6**3*t4**5*t5*t2**3+135&
+ &._ki*t6**3*t1**2*t4**2*t5**3-240._ki*t6**3*t1*t4**4*t5**3+3._ki/4.&
+ &_ki*t6**2*t1**2*t4*t2**5+13._ki/2._ki*t6**2*t1*t4**2*t2**6-7._ki/2.&
+ &_ki*t6**2*t1*t4**3*t2**5-60._ki*t6**2*t4*t3**2*t2**5+110._ki*t6**2&
+ &*t4**2*t3**2*t2**4-31._ki/2._ki*t6**2*t4**2*t3*t2**6+19._ki*t6**2*&
+ &t4**3*t3*t2**5+130._ki*t6**2*t4**3*t5**4*t2**3+50._ki*t6**2*t4*t5&
+ &*t2**6*t3+1240._ki*t6**2*t4**2*t5**3*t3*t2**3-1140._ki*t6**2*t4**&
+ &3*t3*t5**2*t2**3+480._ki*t6**2*t4**4*t3*t5**2*t2**2-80._ki*t6**2*&
+ &t4**4*t5*t2**3*t3+930._ki*t6**2*t4**2*t3*t5**2*t2**4-75._ki*t6*t1&
+ &*t4*t5**4*t2**2*t3+7._ki*t6**2*t1*t2**6*t4*t5-180._ki*t6**2*t1*t3&
+ &*t5**2*t2**4+9._ki*t6**2*t1*t3*t2**4*t4**2-11._ki*t6**2*t1*t3*t2*&
+ &*5*t4-50._ki*t2**3*t3**3*t6**3
+ !
+ stemp7=stemp6+315._ki*t3**3*t6**3*t4**3+10._ki*t6**2*t3**2*t2**6-t6&
+ &**2*t1**2*t2**6/2._ki-12._ki*t3**3*t6*t2**5+t6**3*t3*t2**7-t6**2*&
+ &t3*t2**8/2._ki+t6**2*t1*t2**8/2._ki-t6*t3*t2**9+13._ki/4._ki*t6**2*&
+ &t4**3*t2**7-3._ki*t6**2*t4**4*t2**6+t6**2*t4**5*t2**5+30._ki*t3*t&
+ &5**2*t2**2*t1**2*t6**2-60._ki*t3**2*t5**2*t2**3*t1*t6-t4*t2**11/&
+ &4._ki-50._ki*t2**2*t3**2*t1*t6*t5**3-30._ki*t6**3*t1*t4*t5*t2**5-2&
+ &40._ki*t6**2*t1*t3*t5**3*t2**3
+ !
+ stemp3=stemp7+30._ki*t6**2*t1*t3*t5*t2**5-4._ki*t6*t1*t2**6*t3*t5+1&
+ &6._ki*t6*t1*t4*t5**3*t2**5+40._ki*t6*t1*t4*t5**4*t2**4+20._ki*t6*t&
+ &1*t4*t5**5*t2**3-36._ki*t6*t1*t4*t3*t2**4*t5**2-550._ki*t6*t4*t5*&
+ &*3*t3**2*t2**3-520._ki*t6*t4**2*t3*t5**3*t2**4-325._ki*t6*t4**2*t&
+ &5**4*t3*t2**3-132._ki*t6*t4*t5*t2**5*t3**2+108._ki*t6*t4**2*t3**2&
+ &*t5*t2**4-156._ki*t6*t4**2*t5**2*t2**5*t3+84._ki*t6*t4**3*t5**2*t&
+ &2**4*t3+540._ki*t6*t4**2*t3**2*t5**2*t2**3+175._ki*t6*t4**3*t3*t5&
+ &**4*t2**2+280._ki*t6*t4**3*t3*t5**3*t2**3-120._ki*t6*t1*t4*t5**3*&
+ &t3*t2**3-14._ki*t6*t4**3*t5*t3*t2**5+26._ki*t6*t4**2*t5*t3*t2**6
+ !
+ stemp4=1._ki/t2**12*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=(-t4+t2)**2*t4/t2**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/4._k&
+ &i
+ !
+ stemp11=20._ki*t6*t3**2*t5**2*t2**6*t1**4-5._ki/2._ki*t6*t4*t5*t3**2&
+ &*t2**8*t1**3-5._ki*t6*t3**2*t4*t2**7*t1**3*t5**2+4._ki/3._ki*t6*t3&
+ &**3*t4*t2**8*t1**2*t5+15._ki*t6*t1**5*t4*t5**4*t2**5+45._ki*t6*t1&
+ &**5*t3*t5**2*t2**6+60._ki*t6*t1**5*t5**3*t2**5*t3+10._ki*t6*t5*t3&
+ &**2*t2**7*t1**4-10._ki/3._ki*t6*t2**7*t3**3*t1**3*t5+4._ki/3._ki*t6&
+ &*t1**4*t4**2*t3*t2**8-19._ki/3._ki*t6*t4*t3**4*t2**7*t1**2-600._ki&
+ &*t6*t1**5*t4*t5**3*t2**4*t3-25._ki/12._ki*t6*t4**2*t3**2*t2**8*t1&
+ &**3-450._ki*t6*t1**5*t4*t3*t5**2*t2**5+9._ki/2._ki*t6*t1**5*t4**2*&
+ &t5*t2**7+15._ki/2._ki*t6*t1**5*t4*t3*t2**7-180._ki*t6*t1**5*t2**5*&
+ &t3**2*t5+45._ki/2._ki*t6*t1**5*t4**2*t5**2*t2**6+240._ki*t6**2*t1*&
+ &*4*t4**6*t3*t5**2*t2
+ !
+ stemp10=stemp11-255._ki/2._ki*t6**2*t1**3*t4**4*t5*t2**4*t3**2-204.&
+ &_ki*t6**2*t1**3*t4**6*t3**2*t5*t2**2+183._ki/4._ki*t6**2*t1**3*t4*&
+ &*3*t5*t2**5*t3**2-24._ki*t6**2*t1**3*t4**8*t3**2*t5-278._ki*t6**2&
+ &*t1**3*t4**5*t3**3*t2**2-172._ki/3._ki*t6**2*t1**2*t4**7*t3**3*t2&
+ &**2-85._ki/12._ki*t6**2*t1**2*t4**3*t3**3*t2**6+73._ki/3._ki*t6**2*&
+ &t1**2*t4**4*t3**3*t2**5+208._ki/3._ki*t6**2*t1**2*t4**6*t3**3*t2*&
+ &*3+80._ki/3._ki*t6**2*t1**2*t4**8*t3**3*t2-155._ki/3._ki*t6**2*t1**&
+ &2*t4**5*t3**3*t2**4+108._ki*t6**2*t1**3*t4**7*t3**2*t5*t2-5._ki*t&
+ &6**2*t1**7*t2**2*t3*t4-9._ki*t6**2*t1**7*t4**2*t5*t2**2-1130._ki*&
+ &t6*t1**4*t4**3*t3**2*t5*t2**4+1040._ki*t6*t1**4*t4**4*t3**2*t5*t&
+ &2**3-360._ki*t6*t1**4*t4**5*t3**2*t5*t2**2-205._ki*t6*t1**3*t4**3&
+ &*t5**2*t2**5*t3**2-8305._ki/2._ki*t6**2*t1**5*t4**3*t3**2*t5*t2
+ !
+ stemp11=-910._ki/3._ki*t6*t1**3*t4**2*t3**3*t5*t2**5+440._ki*t6*t1**&
+ &3*t4**4*t3**2*t5**2*t2**4-260._ki*t6*t1**3*t4**5*t3**2*t5*t2**4-&
+ &680._ki/3._ki*t6*t1**2*t4**4*t5*t2**5*t3**3-310._ki/3._ki*t6*t1*t4*&
+ &*5*t3**4*t2**5+146._ki/3._ki*t6*t1*t4**4*t3**4*t2**6+25._ki/3._ki*t&
+ &4*t5**3*t2**7*t1**3*t3**2+125._ki/3._ki*t4**2*t5**2*t2**7*t1**2*t&
+ &3**3+108._ki*t1**5*t4**2*t3**2*t5*t2**4+84._ki*t1**5*t4**3*t5**2*&
+ &t2**4*t3-12._ki*t1**4*t4**4*t3*t2**6*t5+275._ki*t1**4*t3**4*t5*t2&
+ &**3*t4-600._ki*t1**4*t4*t3**3*t2**4*t5**2-195._ki/4._ki*t6*t1**5*t&
+ &4**3*t5**2*t2**5-150._ki*t6*t1**6*t4*t5*t3**2*t2**2-270._ki*t6*t1&
+ &**6*t4**2*t3*t5**2*t2**2-90._ki*t6*t1**5*t4**2*t5**3*t2**5-320._k&
+ &i/3._ki*t6*t1**4*t4**6*t5**3*t3*t2+1000._ki/3._ki*t6*t1**4*t4**3*t&
+ &5**3*t3*t2**4
+ !
+ stemp9=stemp11-775._ki*t1**4*t4**2*t3**2*t5**3*t2**4-340._ki*t1*t4*&
+ &*6*t3**4*t5*t2**4-1980._ki*t6*t1**5*t4**2*t3**2*t5*t2**3+175._ki*&
+ &t1**5*t4**3*t3*t5**4*t2**2+880._ki*t1**4*t4**2*t3**3*t5*t2**4-16&
+ &._ki*t4**2*t3**2*t2**8*t1**3*t5-96._ki*t1**4*t4**4*t5*t2**4*t3**2&
+ &+228._ki*t1**4*t4**3*t5*t2**5*t3**2+100._ki/3._ki*t4*t5*t2**7*t3**&
+ &4*t1**2+13._ki*t1**4*t4**3*t3*t2**7*t5+4._ki*t1**4*t4**5*t3*t2**5&
+ &*t5-500._ki*t1**4*t4**3*t3**3*t5*t2**3+3775._ki/6._ki*t1**3*t4**3*&
+ &t3**4*t2**3*t5+175._ki*t1**3*t4*t3**4*t2**5*t5-76._ki*t1**3*t3**2&
+ &*t4**4*t5*t2**6+56._ki*t1**3*t3**2*t4**5*t5*t2**5-2825._ki/3._ki*t&
+ &1**3*t4**3*t3**3*t5**2*t2**4+540._ki*t1**5*t4**2*t3**2*t5**2*t2*&
+ &*3-132._ki*t1**5*t4*t5*t2**5*t3**2+stemp10
+ !
+ stemp11=-325._ki*t1**5*t4**2*t5**4*t3*t2**3+280._ki*t1**5*t4**3*t3*&
+ &t5**3*t2**3-200._ki/3._ki*t1**2*t4**7*t3**3*t5**2*t2**2+9._ki/2._ki&
+ &*t6*t1**6*t4**2*t3*t2**4+825._ki*t6**2*t1**6*t3**2*t5*t2*t4-1040&
+ &._ki/3._ki*t1**2*t4**5*t3**3*t5*t2**5+1120._ki/3._ki*t6*t1**2*t4**5&
+ &*t3**3*t5*t2**4-55._ki*t6*t1**6*t4*t5*t2**4*t3+2250._ki*t6*t1**5*&
+ &t4**3*t3**2*t5**2*t2-1710._ki*t6*t1**5*t4**3*t3*t5**2*t2**3+720.&
+ &_ki*t6*t1**5*t4**4*t3*t5**2*t2**2+250._ki*t1**5*t4*t3**3*t5**2*t2&
+ &**2+450._ki*t1**5*t4**2*t5**3*t3**2*t2**2-550._ki*t1**5*t4*t5**3*&
+ &t3**2*t2**3-1025._ki/2._ki*t1**3*t4**2*t3**4*t2**4*t5+2080._ki/3._k&
+ &i*t1**3*t4**4*t3**3*t2**4*t5-240._ki*t1**3*t4**5*t3**3*t2**3*t5+&
+ &250._ki*t1**3*t4**3*t3**2*t5**2*t2**6-2260._ki/3._ki*t1**3*t4**3*t&
+ &3**3*t2**5*t5
+ !
+ stemp10=stemp11+380._ki*t1**3*t4**2*t3**3*t2**6*t5-380._ki*t1**3*t4&
+ &**4*t3**2*t5**2*t2**5+280._ki*t1**3*t4**5*t3**2*t5**2*t2**4+50._k&
+ &i*t1**3*t3**2*t4**3*t5*t2**7-16._ki*t1**3*t3**2*t4**6*t5*t2**4-9&
+ &3._ki/4._ki*t6*t1**5*t4**2*t3*t2**6+360._ki*t6*t1**5*t3**3*t5*t2**&
+ &3-375._ki/4._ki*t6*t1**5*t4**3*t3**2*t2**3-40._ki*t6*t1**3*t4**7*t&
+ &3**2*t5*t2**2+220._ki*t6*t1**3*t4**4*t3**2*t5*t2**5+160._ki*t6*t1&
+ &**3*t4**6*t3**2*t5*t2**3+210._ki*t6*t1**3*t4**3*t3**3*t2**5+19._k&
+ &i/3._ki*t6*t1**4*t4**4*t3*t2**6-210._ki*t6*t1**4*t4**3*t3**4*t2-4&
+ &0._ki/3._ki*t6*t1**3*t4**6*t3**2*t2**4-200._ki/3._ki*t6*t1**3*t4**6&
+ &*t3**3*t2**2-425._ki*t6*t1**3*t4**3*t3**4*t2**3-140._ki*t6*t1**3*&
+ &t4**5*t3**4*t2-325._ki/6._ki*t6*t1**3*t3**4*t4*t2**5
+ !
+ stemp11=10._ki/3._ki*t6*t1**3*t4**7*t3**2*t2**3+680._ki/3._ki*t6*t1**&
+ &3*t4**5*t3**3*t2**3-2275._ki/12._ki*t1**2*t4**2*t3**4*t5*t2**6+33&
+ &0._ki*t6*t1**6*t4*t3*t5**2*t2**3-1640._ki*t6*t1**4*t4**2*t3**3*t2&
+ &**3*t5-770._ki/3._ki*t6**2*t1**5*t4**5*t5**3*t2+75._ki*t6**2*t1**7&
+ &*t4*t3*t5**2-45._ki*t6**2*t1**7*t3*t5**2*t2+11._ki*t6**2*t1**7*t4&
+ &*t5*t2**3-55._ki*t6**2*t1**7*t4*t5**3*t2+1650._ki*t6**2*t1**6*t4*&
+ &*2*t3*t5**2*t2+1595._ki/3._ki*t6**2*t1**5*t3**3*t2**2*t4+572._ki/3&
+ &._ki*t6**2*t1**5*t4**4*t3*t2**3+275._ki/6._ki*t6**2*t1**5*t4**3*t5&
+ &*t2**5-130._ki*t6*t4*t3**2*t2**6*t1**4*t5-320._ki/3._ki*t6*t4**2*t&
+ &5**3*t2**5*t1**4*t3+25._ki*t6*t4**2*t5*t3**2*t2**7*t1**3-325._ki/&
+ &2._ki*t1**4*t4**3*t5**4*t3*t2**4+88._ki/3._ki*t1**2*t4**4*t3**3*t2&
+ &**7-455._ki/6._ki*t1**2*t4**2*t3**4*t2**7
+ !
+ stemp8=stemp11+210._ki*t1**2*t4**3*t3**4*t2**6-200._ki/3._ki*t1**2*t&
+ &4**6*t3**4*t2**3-41._ki/3._ki*t1**2*t4**3*t3**3*t2**8-16._ki/3._ki*&
+ &t1**2*t4**7*t3**3*t2**4+64._ki/3._ki*t1**2*t4**6*t3**3*t2**5-104.&
+ &_ki/3._ki*t1**2*t4**5*t3**3*t2**6-920._ki/3._ki*t1**2*t4**4*t3**4*t&
+ &2**5+680._ki/3._ki*t1**2*t4**5*t3**4*t2**4-70._ki*t1**2*t2**2*t3**&
+ &5*t4**5+110._ki*t1**2*t2**5*t3**5*t4**2+590._ki/3._ki*t1**2*t2**3*&
+ &t3**5*t4**4-325._ki/12._ki*t1**2*t4*t3**5*t2**6-425._ki/2._ki*t1**2&
+ &*t2**4*t3**5*t4**3-475._ki/4._ki*t1*t2**6*t3**5*t4**3-6._ki*t4**2*&
+ &t3**4*t2**9*t1-150._ki*t1**5*t3**3*t5**2*t2**3-13._ki*t1**5*t4**2&
+ &*t3*t2**7+11._ki*t1**5*t4*t3**2*t2**6+stemp9+stemp10
+ !
+ stemp11=-50._ki*t1**5*t4**3*t5**4*t2**4+5._ki*t1**5*t4**3*t5**2*t2*&
+ &*6-120._ki*t1**5*t3**3*t5*t2**4+20._ki*t1**5*t4**4*t5**4*t2**3+2.&
+ &_ki*t1**5*t4**4*t5*t2**6+25._ki*t1**5*t3**4*t5*t2**2-25._ki*t1**5*&
+ &t4**3*t5**5*t2**3+416._ki/3._ki*t6*t1*t2**4*t3**4*t4**6-85._ki/6._k&
+ &i*t6*t1*t4**3*t3**4*t2**7-44._ki/3._ki*t6**2*t4**2*t2**6*t1**5*t5&
+ &+220._ki/3._ki*t6**2*t4**2*t5**3*t2**4*t1**5+715._ki/2._ki*t6**2*t4&
+ &*t3*t2**4*t1**5*t5**2-143._ki/6._ki*t6**2*t4*t2**6*t3*t1**5+75._ki&
+ &/2._ki*t6**2*t4**2*t5**2*t2**5*t1**4*t3-9._ki*t6**2*t4**2*t5*t2**&
+ &6*t1**3*t3**2+320._ki*t6*t1**3*t4**6*t3**2*t5**2*t2**2-80._ki*t6*&
+ &t1**3*t4**7*t3**2*t5**2*t2+2720._ki/3._ki*t6*t1**3*t4**5*t3**3*t5&
+ &*t2**2-800._ki/3._ki*t6*t1**3*t4**6*t3**3*t5*t2
+ !
+ stemp10=stemp11+840._ki*t6*t1**3*t4**3*t3**3*t5*t2**4+880._ki/3._ki*&
+ &t1**2*t4**4*t3**3*t5*t2**6-19._ki/4._ki*t6**2*t4*t3**3*t2**6*t1**&
+ &3-t6*t3**4*t4*t2**9*t1/6._ki-t6**2*t3**3*t4*t2**8*t1**2/12._ki-6.&
+ &_ki*t1**4*t4**2*t3*t2**8*t5-325._ki/3._ki*t4*t3**3*t2**6*t1**3*t5*&
+ &*2+10._ki*t4*t3**2*t5**2*t2**8*t1**3-25._ki/2._ki*t1**4*t4*t5**4*t&
+ &3*t2**6-6._ki*t1**4*t3*t5**2*t4*t2**8+t1**4*t2**9*t4*t5*t3+10._ki&
+ &*t1**5*t4**4*t5**5*t2**2-6._ki*t1**4*t3**2*t2**8*t5-25._ki*t1**4*&
+ &t5**3*t2**6*t3**2-t1**4*t3*t4*t2**10/2._ki-30._ki*t1**4*t3**2*t2*&
+ &*7*t5**2-t1**3*t3**2*t4*t2**10/6._ki+8._ki*t1**4*t4**4*t3**2*t2**&
+ &5+31._ki/2._ki*t1**4*t4**2*t3**2*t2**7
+ !
+ stemp11=-48._ki*t1**4*t4*t3**3*t2**6-5._ki*t1**5*t4**3*t5*t2**7-278&
+ &._ki*t1*t2**4*t3**5*t4**5+240._ki*t1*t2**5*t3**5*t4**4+72._ki*t1*t&
+ &4**7*t3**4*t2**4-85._ki*t1*t4**4*t3**4*t2**7+140._ki*t1*t4**5*t3*&
+ &*4*t2**6+61._ki/2._ki*t1*t4**3*t3**4*t2**8+172._ki*t1*t2**3*t3**5*&
+ &t4**6+6._ki*t1**4*t4**4*t3*t2**7-13._ki/2._ki*t1**4*t4**3*t3*t2**8&
+ &-35._ki/2._ki*t1**4*t3**5*t2**2*t4-2._ki*t1**4*t4**5*t3*t2**6-19._k&
+ &i*t1**4*t4**3*t3**2*t2**6+19._ki/3._ki*t1**3*t4**4*t3**2*t2**7+70&
+ &._ki*t1**3*t4*t3**4*t2**6-145._ki/3._ki*t1**3*t3**5*t2**4*t4-136._k&
+ &i*t1*t4**6*t3**4*t2**5-44._ki*t1*t2**2*t3**5*t4**7
+ !
+ stemp9=stemp11+133._ki/4._ki*t1*t2**7*t3**5*t4**2-16._ki*t1*t4**8*t3&
+ &**4*t2**3+7._ki*t1**5*t4**3*t3*t2**6+20._ki*t1**5*t3**3*t2**4*t4+&
+ &40._ki/3._ki*t4*t3**4*t2**8*t1**2-20._ki*t1**5*t4**3*t5**3*t2**5+1&
+ &10._ki*t1**4*t4*t3**4*t2**4-75._ki*t1**4*t3**4*t5*t2**4-9._ki*t1**&
+ &5*t4**2*t3**2*t2**5+88._ki*t1**4*t4**2*t3**3*t2**5-50._ki*t1**4*t&
+ &3**3*t4**3*t2**4-2._ki*t1**5*t4**4*t5**2*t2**5+535._ki/6._ki*t1**3&
+ &*t3**5*t2**3*t4**2+755._ki/3._ki*t1**3*t4**3*t3**4*t2**4+4._ki/3._k&
+ &i*t1**3*t4**6*t3**2*t2**5-110._ki*t1**3*t4**4*t3**4*t2**3+38._ki*&
+ &t1**3*t4**2*t3**3*t2**7-105._ki/2._ki*t1**3*t3**5*t2**2*t4**3-25.&
+ &_ki/6._ki*t1**3*t4**3*t3**2*t2**8+stemp10
+ !
+ stemp11=-14._ki/3._ki*t1**3*t4**5*t3**2*t2**6-205._ki*t1**3*t4**2*t3&
+ &**4*t2**5-226._ki/3._ki*t1**3*t4**3*t3**3*t2**6+208._ki/3._ki*t1**3&
+ &*t4**4*t3**3*t2**5-24._ki*t1**3*t4**5*t3**3*t2**4+25._ki/3._ki*t3*&
+ &*3*t5**2*t2**7*t1**3-t4*t2**10*t1**2*t3**3/3._ki+8._ki*t1**5*t4**&
+ &4*t5**3*t2**4-26._ki/3._ki*t4*t2**8*t3**3*t1**3+t4*t3**4*t2**10*t&
+ &1/2._ki-95._ki*t1**4*t4**2*t3**4*t2**3+150._ki*t1**5*t3**2*t5**3*t&
+ &2**4+7._ki*t1**5*t4*t3*t2**8+40._ki*t1**5*t4**2*t5**4*t2**5+36._ki&
+ &*t1**5*t5*t3**2*t2**6+16._ki*t1**5*t4**2*t5**3*t2**6+100._ki*t1**&
+ &4*t3**3*t5**2*t2**5+10._ki/3._ki*t4**2*t3**3*t2**9*t1**2+80._ki*t1&
+ &**4*t3**3*t5*t2**6
+ !
+ stemp10=stemp11-5._ki*t1**4*t4*t3**2*t2**8+3._ki*t1**4*t4**2*t3*t2*&
+ &*9+950._ki*t1**4*t4**3*t3**2*t5**3*t2**3-80._ki*t1**4*t4**5*t5**3&
+ &*t3*t2**3-80._ki*t1**3*t4**6*t3**2*t5**2*t2**3-455._ki/6._ki*t6*t1&
+ &**3*t4**2*t3**3*t2**6+220._ki*t6*t1**3*t4**2*t3**4*t2**4+65._ki/3&
+ &._ki*t6*t1**3*t4**5*t3**2*t2**5-55._ki/3._ki*t6*t1**3*t4**4*t3**2*&
+ &t2**6+205._ki/24._ki*t6*t1**3*t4**3*t3**2*t2**7+57._ki/2._ki*t6*t1*&
+ &*5*t4**3*t3*t2**5+195._ki*t6*t1**5*t4**3*t5**4*t2**3+60._ki*t6*t1&
+ &**5*t4**5*t5**4*t2-1155._ki*t6**2*t1**5*t3**2*t2**3*t4*t5-1243._k&
+ &i/6._ki*t6**2*t1**5*t4**3*t3*t2**4+1815._ki*t6**2*t1**5*t4**4*t3*&
+ &*2*t5+209._ki/2._ki*t6**2*t1**5*t4**2*t3*t2**5+stemp8+stemp9+195.&
+ &_ki*t6*t1**5*t4**3*t5**3*t2**4
+ !
+ stemp11=stemp10-3._ki/4._ki*t6*t1**5*t4*t2**8*t5-t6*t1**4*t4*t3*t2*&
+ &*9/6._ki+45._ki*t6*t1**5*t4**4*t5**2*t2**4-15._ki*t6*t1**5*t4**5*t&
+ &5**2*t2**3+1140._ki*t6*t1**5*t4**2*t3**3*t5*t2-120._ki*t6*t1**5*t&
+ &4**4*t5*t2**3*t3+1395._ki*t6*t1**5*t4**2*t3*t5**2*t2**4+1125._ki*&
+ &t6*t1**5*t4**3*t3**2*t5*t2**2-465._ki/2._ki*t6*t1**5*t4**2*t5*t2*&
+ &*5*t3-2280._ki*t6*t1**5*t4**3*t3*t5**3*t2**2+9._ki*t6*t1**5*t4**4&
+ &*t5*t2**5-39._ki/4._ki*t6*t1**5*t4**3*t5*t2**6+60._ki*t6*t1**5*t4*&
+ &*5*t5**3*t2**2-180._ki*t6*t1**5*t4**4*t5**3*t2**3-3._ki*t6*t1**5*&
+ &t4**5*t5*t2**4-12._ki*t6*t1**5*t4**4*t3*t2**4-200._ki/3._ki*t1**3*&
+ &t4**6*t3**2*t5**3*t2**2-950._ki/3._ki*t1**3*t4**4*t3**2*t5**3*t2*&
+ &*4-275._ki*t1**3*t4**4*t3**4*t2**2*t5
+ !
+ stemp7=stemp11+2600._ki/3._ki*t1**3*t4**4*t3**3*t5**2*t2**3-300._ki*&
+ &t1**3*t4**5*t3**3*t5**2*t2**2+625._ki/3._ki*t1**3*t4**3*t3**2*t5*&
+ &*3*t2**5+475._ki*t1**3*t4**2*t3**3*t5**2*t2**5-t1**5*t3*t2**9+14&
+ &6._ki/3._ki*t4**4*t3**5*t2**7+8._ki*t1**4*t3**3*t2**7+160._ki/3._ki*&
+ &t2**3*t3**5*t4**8-12._ki*t1**5*t3**3*t2**5-30._ki*t1**4*t3**4*t2*&
+ &*5+25._ki/3._ki*t1**3*t3**5*t2**5-t3**5*t4*t2**10/6._ki+10._ki*t1**&
+ &5*t2**3*t3**4+t1**4*t3**2*t2**9/2._ki+7._ki/3._ki*t4**2*t3**5*t2**&
+ &9+200._ki*t1**5*t4*t5*t3**3*t2**3-128._ki/3._ki*t6*t1**2*t4**8*t3*&
+ &*3*t5*t2+1045._ki/3._ki*t6**2*t1**5*t4**4*t5**3*t2**2+210._ki*t6**&
+ &2*t1**3*t4**5*t3**2*t5*t2**3-615._ki/4._ki*t6**2*t1**4*t4**3*t5**&
+ &2*t2**4*t3
+ !
+ stemp11=stemp7+990._ki*t6**2*t1**5*t4**5*t3*t5**2-1520._ki/3._ki*t6*&
+ &t1**4*t4**4*t5**3*t3*t2**3+1140._ki*t6*t1**4*t4**2*t3**2*t5**2*t&
+ &2**4+40._ki/3._ki*t6*t1**4*t4**6*t3*t2**3*t5+1120._ki/3._ki*t6*t1**&
+ &4*t4**5*t5**3*t3*t2**2-880._ki*t6*t1**4*t4**4*t3**3*t5*t2+1180._k&
+ &i/3._ki*t6*t1**3*t4**4*t3**4*t2**2-272._ki/3._ki*t6*t1**2*t4**6*t3&
+ &**3*t2**4-32._ki/3._ki*t6*t1**2*t4**8*t3**3*t2**2+3._ki/4._ki*t6**2&
+ &*t3**2*t4*t2**7*t1**3*t5-15._ki/4._ki*t6**2*t3*t4*t2**6*t1**4*t5*&
+ &*2+7._ki/6._ki*t6**2*t4**2*t3**3*t2**7*t1**2+10._ki*t6*t5**2*t4*t2&
+ &**7*t1**4*t3-5._ki/3._ki*t6*t4*t5*t3*t2**8*t1**4+t6*t4*t3**3*t2**&
+ &9*t1**2/3._ki+5._ki/24._ki*t6*t4*t2**9*t1**3*t3**2-78._ki*t1**4*t4*&
+ &*3*t3*t2**6*t5**2-24._ki*t1**4*t4**5*t3*t2**4*t5**2
+ !
+ stemp10=stemp11-480._ki*t1**4*t4*t3**3*t5*t2**5-170._ki/3._ki*t6*t1*&
+ &*2*t4**4*t3**3*t2**6-14._ki*t1**5*t4**3*t5*t3*t2**5-1088._ki/3._ki&
+ &*t6*t1**2*t4**6*t3**3*t5*t2**3+192._ki*t6*t1**2*t4**7*t3**3*t5*t&
+ &2**2+26._ki*t1**5*t4**2*t5*t3*t2**6-520._ki*t1**5*t4**2*t3*t5**3*&
+ &t2**4-900._ki*t6**2*t1**6*t4*t3*t5**2*t2**2+350._ki*t1*t4**5*t3**&
+ &4*t5*t2**5-40._ki*t1*t4**8*t3**4*t5*t2**2+180._ki*t1*t4**7*t3**4*&
+ &t5*t2**3+305._ki/4._ki*t1*t4**3*t5*t2**7*t3**4-425._ki/2._ki*t1*t4*&
+ &*4*t5*t2**6*t3**4+50._ki*t6*t4**2*t5**2*t2**6*t1**3*t3**2-55._ki/&
+ &6._ki*t6**2*t4*t5**3*t2**5*t1**5+t6**2*t4*t2**8*t1**4*t3/4._ki-55&
+ &._ki/2._ki*t6**2*t3*t5**2*t2**5*t1**5+11._ki/6._ki*t6**2*t4*t5*t2**&
+ &7*t1**5-360._ki*t6*t1**5*t3**2*t2**4*t5**2
+ !
+ stemp11=stemp10-90._ki*t6*t1**5*t4**2*t5**4*t2**4-200._ki/3._ki*t6*t&
+ &5*t2**5*t3**3*t1**4+40._ki/3._ki*t6*t4*t3**3*t2**7*t1**3+7._ki/2._k&
+ &i*t6*t1**6*t2**6*t4*t5-90._ki*t6*t1**6*t3*t5**2*t2**4+35._ki/2._ki&
+ &*t6*t1**6*t4*t5**2*t2**5-70._ki*t6*t1**6*t4*t5**4*t2**3-120._ki*t&
+ &6*t1**6*t3*t5**3*t2**3+15._ki*t6*t1**6*t3*t5*t2**5-1025._ki/6._ki*&
+ &t1**2*t4**3*t5**2*t2**6*t3**3+700._ki/3._ki*t1**3*t4**5*t3**2*t5*&
+ &*3*t2**3+440._ki*t6*t1**6*t4*t5**3*t3*t2**2-1375._ki/6._ki*t6**2*t&
+ &1**5*t4**3*t5**3*t2**3-3960._ki*t6*t1**5*t4**2*t3**2*t5**2*t2**2&
+ &-410._ki*t6*t1**4*t2**4*t3**3*t4**2-1300._ki/3._ki*t1**2*t4**5*t3*&
+ &*3*t5**2*t2**4-16._ki*t6*t4**2*t5*t2**7*t1**2*t3**3+280._ki/3._ki*&
+ &t6*t1**2*t4**5*t3**3*t2**5
+ !
+ stemp9=stemp11-176._ki/3._ki*t6*t1**2*t4**7*t3**4*t2-1112._ki/3._ki*t&
+ &6*t1**2*t4**5*t3**4*t2**3+133._ki/3._ki*t6*t1**2*t4**2*t3**4*t2**&
+ &6+320._ki*t6*t1**2*t2**4*t4**4*t3**4+61._ki/3._ki*t6*t1**2*t4**3*t&
+ &3**3*t2**7+48._ki*t6*t1**2*t4**7*t3**3*t2**3+688._ki/3._ki*t6*t1**&
+ &2*t4**6*t3**4*t2**2+160._ki/3._ki*t6*t1*t2**2*t3**4*t4**8+244._ki/&
+ &3._ki*t6*t1**2*t4**3*t5*t2**6*t3**3+7._ki/3._ki*t6*t4**2*t3**4*t2*&
+ &*8*t1+15._ki*t6*t1**5*t4*t5**3*t2**6-15._ki/4._ki*t6*t1**5*t4*t5**&
+ &2*t2**7-15._ki/2._ki*t6*t1**5*t5*t2**7*t3-15._ki/4._ki*t6**2*t2**6*&
+ &t3**2*t1**4*t5+150._ki*t6**2*t1**6*t3*t5**2*t2**3+125._ki*t6**2*t&
+ &1**6*t4*t5**3*t2**3-25._ki*t6**2*t1**6*t4*t5*t2**5+275._ki/2._ki*t&
+ &6**2*t5*t2**4*t3**2*t1**5+2._ki*t4*t3**2*t2**9*t1**3*t5+1155._ki/&
+ &2._ki*t6**2*t1**5*t4**3*t3**3
+ !
+ stemp11=stemp9+50._ki*t6**2*t1**6*t3**3*t2-275._ki/3._ki*t6**2*t1**5&
+ &*t2**3*t3**3+220._ki/3._ki*t6**2*t1**5*t4**6*t5**3-210._ki*t6**2*t&
+ &1**4*t4**5*t3**3-44._ki*t6**2*t1**3*t4**7*t3**3-16._ki/3._ki*t6**2&
+ &*t1**2*t4**9*t3**3-10._ki*t6*t1**6*t3**3*t2**2+3._ki/2._ki*t6*t1**&
+ &5*t4**5*t2**5-9._ki/2._ki*t6*t1**5*t4**4*t2**6+39._ki/8._ki*t6*t1**&
+ &5*t4**3*t2**7-60._ki*t6*t1**5*t3**4*t2**2+90._ki*t6*t1**5*t3**3*t&
+ &2**4-7._ki/4._ki*t6*t1**6*t4**3*t2**5+15._ki*t6**2*t1**7*t3**2*t5-&
+ &200._ki*t6**2*t1**6*t4**4*t5**3-9._ki/4._ki*t6*t1**5*t4**2*t2**8+1&
+ &5._ki*t6*t1**5*t3**2*t2**6+5._ki*t6*t3**4*t2**6*t1**3
+ !
+ stemp10=stemp11-50._ki/3._ki*t6*t3**3*t2**6*t1**4+5._ki/2._ki*t6**2*t&
+ &1**6*t5*t2**6+t6*t2**8*t1**2*t3**4/3._ki-5._ki/6._ki*t6*t2**8*t3**&
+ &2*t1**4-5._ki/2._ki*t6*t1**6*t5**2*t2**6-t6*t1**6*t5*t2**7/2._ki+1&
+ &0._ki*t6*t1**6*t5**4*t2**4+10._ki*t6*t1**6*t5**3*t2**5+3._ki/8._ki*&
+ &t6*t1**5*t4*t2**9-3._ki/4._ki*t6*t2**8*t3*t1**5-5._ki/6._ki*t6*t3**&
+ &3*t2**8*t1**3+15._ki*t6**2*t1**7*t5**3*t2**2-3._ki*t6**2*t1**7*t5&
+ &*t2**4-10._ki*t6**2*t1**6*t3*t2**5+15._ki/2._ki*t6**2*t3**3*t2**5*&
+ &t1**4+3._ki/2._ki*t6*t1**6*t3*t2**6-7._ki/4._ki*t6*t1**6*t4*t2**7+t&
+ &6**2*t2**7*t3**3*t1**3/4._ki+11._ki/6._ki*t6**2*t2**7*t3*t1**5-25.&
+ &_ki/2._ki*t6**2*t1**6*t5**3*t2**4
+ !
+ stemp11=stemp10+45._ki*t6**2*t1**7*t4**2*t5**3-10._ki*t1**5*t4*t5**&
+ &4*t2**6-t1**5*t4*t2**9*t5-4._ki*t1**5*t4*t5**3*t2**7+t1**5*t2**8&
+ &*t4*t5**2-5._ki*t1**5*t4*t5**5*t2**5-12._ki*t1**5*t3*t5**2*t2**7-&
+ &40._ki*t1**5*t3*t5**3*t2**6-25._ki*t1**5*t5**4*t2**5*t3+2._ki*t1**&
+ &5*t5*t3*t2**8-25._ki/12._ki*t2**8*t3**4*t1**2*t5-19._ki/4._ki*t4*t3&
+ &**5*t2**8*t1-125._ki/6._ki*t5*t2**6*t3**4*t1**3+20._ki*t1**5*t4**2&
+ &*t5**5*t2**4+4._ki*t1**5*t4**2*t2**8*t5+180._ki*t1**5*t3**2*t2**5&
+ &*t5**2-4._ki*t1**5*t4**2*t5**2*t2**7-110._ki*t6**2*t1**6*t2**3*t3&
+ &*t4**2+1100._ki/3._ki*t1**2*t4**4*t3**3*t5**2*t2**5
+ !
+ stemp8=stemp11-1380._ki*t6**2*t1**4*t4**4*t3**2*t5*t2**2+330._ki*t6&
+ &**2*t1**4*t4**2*t3**3*t2**3+26._ki*t6**2*t1**4*t4**5*t3*t2**4+4.&
+ &_ki*t6**2*t1**4*t4**7*t3*t2**2-180._ki*t6*t1**5*t4**4*t5**4*t2**2&
+ &-330._ki*t6*t1**5*t4*t3**3*t2**3+1070._ki/3._ki*t6*t1**4*t3**4*t2*&
+ &*2*t4**2+30._ki*t6*t1**4*t4**5*t3**2*t2**3+565._ki/6._ki*t6*t1**4*&
+ &t4**3*t3**2*t2**5-95._ki/2._ki*t6*t1**4*t4**2*t3**2*t2**6+140._ki*&
+ &t6*t1**4*t2**5*t3**3*t4-260._ki/3._ki*t6*t1**4*t4**4*t3**2*t2**4-&
+ &580._ki/3._ki*t6*t1**4*t3**4*t2**3*t4-300._ki*t6*t1**6*t4*t3**2*t5&
+ &**2*t2+1080._ki*t6*t1**5*t4*t3**2*t5*t2**4-3680._ki/3._ki*t6*t1**3&
+ &*t4**4*t3**3*t5*t2**3-475._ki/3._ki*t6*t1**2*t3**4*t4**3*t2**5-25&
+ &._ki/6._ki*t6*t1**4*t4**3*t3*t2**7-220._ki*t6*t1**4*t4**4*t3**3*t2&
+ &**2+4._ki/3._ki*t6*t1**4*t4**6*t3*t2**4
+ !
+ stemp11=stemp8+130._ki*t6*t1**6*t4**2*t5**4*t2**2+7._ki/2._ki*t6*t1*&
+ &*6*t4**3*t5*t2**4-40._ki*t6*t1**6*t3**3*t5*t2-13._ki/2._ki*t6*t1**&
+ &6*t4**2*t5*t2**5+130._ki*t6*t1**6*t4**2*t5**3*t2**3-70._ki*t6*t1*&
+ &*6*t4**3*t5**4*t2+35._ki/2._ki*t6*t1**6*t4**3*t5**2*t2**3-70._ki*t&
+ &6*t1**6*t4**3*t5**3*t2**2+285._ki*t6*t1**5*t3**3*t2**2*t4**2+105&
+ &._ki*t6*t1**5*t3**4*t2*t4-90._ki*t6*t1**5*t4*t3**2*t2**5+165._ki*t&
+ &6*t1**5*t4**2*t3**2*t2**4-5._ki/6._ki*t3**4*t2**9*t1**2-14._ki*t1*&
+ &*5*t4*t3*t2**7*t5+280._ki*t1**5*t4*t5**3*t2**5*t3+84._ki*t1**5*t4&
+ &*t5**2*t2**6*t3+300._ki*t1**4*t4*t3**2*t5**2*t2**6+250._ki*t1**4*&
+ &t4*t5**3*t2**5*t3**2
+ !
+ stemp10=stemp11+120._ki*t1**4*t4**2*t3*t5**3*t2**6+60._ki*t1**4*t3*&
+ &*2*t5*t4*t2**7+36._ki*t1**4*t4**2*t5**2*t2**7*t3+75._ki*t1**4*t4*&
+ &*2*t3*t5**4*t2**5+4._ki/3._ki*t1**3*t4**2*t3**2*t2**9+20._ki/3._ki*&
+ &t5*t3**3*t2**8*t1**3+13._ki/4._ki*t6*t1**6*t4**2*t2**6+100._ki/3._k&
+ &i*t6*t1**4*t3**4*t2**4-15._ki/2._ki*t6*t1**6*t3**2*t2**4+3._ki*t6*&
+ &*2*t1**7*t3*t2**3-175._ki/2._ki*t6**2*t1**6*t3**3*t4-140._ki/3._ki*&
+ &t6*t1**4*t4**5*t3*t2**4*t5+190._ki/3._ki*t6*t1**4*t4**4*t3*t2**5*&
+ &t5-2260._ki*t6*t1**4*t4**3*t3**2*t5**2*t2**3-14._ki/3._ki*t6*t1**4&
+ &*t4**5*t3*t2**5-325._ki/4._ki*t6**2*t1**4*t3**3*t2**4*t4-16._ki*t6&
+ &**2*t1**4*t4**6*t3*t2**3-22._ki*t6**2*t1**4*t4**4*t3*t2**5+590._k&
+ &i*t6**2*t1**4*t4**4*t3**3*t2
+ !
+ stemp11=stemp10+240._ki*t6**2*t1**3*t4**4*t3**3*t2**3+133._ki/4._ki*&
+ &t6**2*t1**3*t4**2*t3**3*t2**5+172._ki*t6**2*t1**3*t4**6*t3**3*t2&
+ &-475._ki/4._ki*t6**2*t1**3*t3**3*t4**3*t2**4+945._ki*t6**2*t1**4*t&
+ &4**3*t5*t3**2*t2**3+330._ki*t6**2*t1**4*t4**4*t5**2*t2**3*t3-390&
+ &._ki*t6**2*t1**4*t4**5*t3*t5**2*t2**2-95._ki*t6**2*t1**6*t4**3*t5&
+ &*t2**3-1425._ki/2._ki*t6**2*t1**6*t4**2*t3**2*t5-1875._ki/2._ki*t6*&
+ &*2*t1**6*t4**3*t3*t5**2-225._ki*t6**2*t1**6*t3**2*t5*t2**2+155._k&
+ &i/2._ki*t6**2*t1**6*t4**2*t5*t2**4+60._ki*t6**2*t1**6*t2**4*t3*t4&
+ &+40._ki*t6**2*t1**6*t4**4*t5*t2**2-775._ki/2._ki*t6**2*t1**6*t4**2&
+ &*t5**3*t2**2+475._ki*t6**2*t1**6*t4**3*t5**3*t2+125._ki/2._ki*t6**&
+ &2*t1**6*t2**2*t3*t4**3-209._ki/3._ki*t6**2*t1**5*t4**4*t5*t2**4+4&
+ &0._ki/3._ki*t6*t4*t5**3*t2**6*t1**4*t3
+ !
+ stemp9=stemp11+2160._ki*t6*t1**5*t4*t3**2*t5**2*t2**3-1320._ki*t6*t&
+ &1**5*t3**3*t5*t2**2*t4+285._ki*t6*t1**5*t4**3*t5*t2**4*t3+1860._k&
+ &i*t6*t1**5*t4**2*t5**3*t3*t2**3+960._ki*t6*t1**5*t4**4*t3*t5**3*&
+ &t2+560._ki*t6*t1**4*t4*t3**3*t5*t2**4-80._ki*t6*t1**4*t4**6*t3*t5&
+ &**2*t2**2+250._ki*t6*t1**4*t4**3*t3*t5**2*t2**5+1510._ki/3._ki*t6*&
+ &t1**4*t2**3*t3**3*t4**3-20._ki*t1**4*t4*t5**3*t3*t2**7+2080._ki*t&
+ &6*t1**4*t4**4*t3**2*t5**2*t2**2-720._ki*t6*t1**4*t4**5*t3**2*t5*&
+ &*2*t2-520._ki*t6*t1**3*t4**5*t3**2*t5**2*t2**3-660._ki*t1**5*t4*t&
+ &3**2*t5**2*t2**4+t2**9*t3**5*t1/4._ki+5._ki/2._ki*t3**5*t2**7*t1**&
+ &2+t6*t1**6*t2**8/4._ki-32._ki/3._ki*t2**2*t3**5*t4**9-3._ki*t1**5*t&
+ &3**2*t2**7+10._ki*t1**4*t3**5*t2**3
+ !
+ stemp11=stemp9-85._ki/6._ki*t4**3*t3**5*t2**8-344._ki/3._ki*t2**4*t3*&
+ &*5*t4**7-310._ki/3._ki*t4**5*t3**5*t2**6-25._ki/3._ki*t3**4*t2**7*t&
+ &1**3-70._ki*t6*t1**6*t4*t5**3*t2**4+40._ki/3._ki*t6*t4**2*t2**7*t1&
+ &**4*t3*t5-260._ki*t6*t4*t3**2*t2**5*t1**4*t5**2-80._ki*t6*t4**2*t&
+ &3*t2**6*t1**4*t5**2+160._ki/3._ki*t6*t4*t5*t2**6*t3**3*t1**3-5._ki&
+ &/2._ki*t6**2*t4**2*t3*t2**7*t1**4+60._ki*t6**2*t4*t5*t2**5*t3**2*&
+ &t1**4-4._ki*t6*t4**2*t3**3*t2**8*t1**2+65._ki/6._ki*t6*t4*t2**7*t3&
+ &**2*t1**4+75._ki*t6*t1**5*t4*t5*t2**6*t3-10._ki/3._ki*t4*t5*t3**3*&
+ &t2**9*t1**2-80._ki*t4**2*t3**2*t2**7*t1**3*t5**2-25._ki/6._ki*t3**&
+ &3*t4*t2**8*t1**2*t5**2+5._ki/4._ki*t3**4*t4*t2**9*t1*t5
+ !
+ stemp10=stemp11+175._ki*t1**5*t4*t5**4*t2**4*t3-5885._ki/6._ki*t6**2&
+ &*t1**5*t3**3*t4**2*t2-44._ki/3._ki*t6**2*t1**5*t4**6*t5*t2**2+154&
+ &._ki/3._ki*t6**2*t1**5*t4**5*t5*t2**3-66._ki*t6**2*t1**5*t4**5*t3*&
+ &t2**2-300._ki*t6**2*t1**4*t4**6*t3**2*t5+41._ki/4._ki*t6**2*t1**4*&
+ &t4**3*t3*t2**6-1275._ki/2._ki*t6**2*t1**4*t4**3*t3**3*t2**2+6215.&
+ &_ki/2._ki*t6**2*t1**5*t4**3*t3*t5**2*t2**2-2860._ki*t6**2*t1**5*t4&
+ &**4*t3*t5**2*t2-3135._ki/2._ki*t6**2*t1**5*t4**2*t3*t5**2*t2**3+6&
+ &765._ki/2._ki*t6**2*t1**5*t4**2*t3**2*t5*t2**2-1365._ki/4._ki*t6**2&
+ &*t1**4*t4**2*t3**2*t5*t2**4+1020._ki*t6**2*t1**4*t4**5*t3**2*t5*&
+ &t2-156._ki*t1**5*t4**2*t5**2*t2**5*t3-920._ki/3._ki*t6*t1**3*t4**4&
+ &*t3**3*t2**4-344._ki/3._ki*t6*t1*t2**3*t3**4*t4**7-32._ki/3._ki*t6*&
+ &t1*t2*t3**4*t4**9-125._ki/3._ki*t6*t1**4*t4**3*t3*t2**6*t5+6040._k&
+ &i/3._ki*t6*t1**4*t4**3*t3**3*t2**2*t5
+ !
+ stemp11=stemp10-380._ki*t6*t1**4*t4**4*t3*t5**2*t2**4+570._ki*t6*t1&
+ &**4*t4**2*t3**2*t5*t2**5+280._ki*t6*t1**4*t4**5*t3*t5**2*t2**3-3&
+ &60._ki*t6*t1**6*t4**2*t5**3*t2*t3+45._ki*t6*t1**6*t4**2*t5*t2**3*&
+ &t3+180._ki*t6*t1**6*t3**2*t5**2*t2**2+90._ki*t6*t1**6*t2**3*t3**2&
+ &*t5+25._ki/2._ki*t6*t1**6*t2**3*t4*t3**2-65._ki/2._ki*t6*t1**6*t4**&
+ &2*t5**2*t2**4-11._ki/2._ki*t6*t1**6*t4*t3*t2**5-50._ki*t1**4*t4**5&
+ &*t5**4*t3*t2**2+1140._ki*t1**4*t4**3*t3**2*t5**2*t2**4+72._ki*t1*&
+ &*4*t4**4*t3*t2**5*t5**2-625._ki*t1**4*t4**3*t3**3*t5**2*t2**2+15&
+ &0._ki*t1**4*t4**4*t5**4*t3*t2**3-400._ki*t1**4*t4**4*t3**2*t5**3*&
+ &t2**2-186._ki*t1**4*t4**2*t5*t2**6*t3**2-480._ki*t1**4*t4**4*t3**&
+ &2*t5**2*t2**3-200._ki/3._ki*t4**2*t5**3*t2**6*t1**3*t3**2
+ !
+ stemp6=stemp11-500._ki/3._ki*t1**2*t4**6*t3**4*t5*t2**2-410._ki/3._ki&
+ &*t1**2*t4**3*t5*t3**3*t2**7+2._ki/3._ki*t3**3*t2**9*t1**3-2300._ki&
+ &/3._ki*t1**2*t4**4*t3**4*t5*t2**4+640._ki/3._ki*t1**2*t4**6*t3**3*&
+ &t5*t2**4-205._ki/2._ki*t6*t1**3*t4**3*t5*t3**2*t2**6+1700._ki/3._ki&
+ &*t1**2*t4**5*t3**4*t5*t2**3+416._ki/3._ki*t2**5*t3**5*t4**6+525._k&
+ &i*t1**2*t4**3*t3**4*t5*t2**5+800._ki/3._ki*t1**2*t4**6*t3**3*t5**&
+ &2*t2**3-260._ki/3._ki*t4*t3**3*t2**7*t1**3*t5-15._ki*t4**2*t5*t2**&
+ &8*t1*t3**4+100._ki/3._ki*t4**2*t5*t3**3*t2**8*t1**2+1100._ki*t1**4&
+ &*t4**2*t3**3*t2**3*t5**2-475._ki/2._ki*t1**4*t4**2*t3**4*t5*t2**2&
+ &-930._ki*t1**4*t4**2*t3**2*t5**2*t2**5-260._ki*t1**4*t4**3*t5**3*&
+ &t3*t2**5+240._ki*t1**4*t4**4*t5**3*t3*t2**4-160._ki/3._ki*t1**2*t4&
+ &**7*t3**3*t5*t2**3-60._ki*t6**2*t1**4*t4**7*t3*t5**2
+ !
+ stemp7=t6/t1**5/t2**12
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp5=95._ki/3._ki*t6**3*t3**2*t4**3-5._ki/2._ki*t6**2*t2**2*t3**3+t&
+ &6*t4*t2**8/4._ki+20._ki/3._ki*t6**3*t4**5*t5**2-7._ki/4._ki*t6**3*t4&
+ &**2*t2**5-3._ki/2._ki*t6**3*t1**2*t2**3+2._ki*t6**3*t4**5*t2**2+2.&
+ &_ki*t6**2*t4**4*t2**4-5._ki*t6**3*t4**4*t2**3-3._ki/4._ki*t6*t4**2*&
+ &t2**7+t6*t4**3*t2**6/2._ki+7._ki/12._ki*t6**2*t3*t2**6-t6**2*t4*t2&
+ &**7/2._ki-t6**2*t1*t2**6+t6*t1*t2**7/4._ki+t4*t2**8*t5/12._ki-t4*t&
+ &3*t2**7/6._ki-7._ki/12._ki*t6**2*t1**2*t5*t2**3+5._ki/6._ki*t6**2*t1&
+ &**2*t2*t5**3-7._ki/3._ki*t6**2*t1*t2**4*t3+5._ki*t6**2*t2*t3**3*t4&
+ &+15._ki/2._ki*t6**2*t2**3*t3**2*t5+15._ki/2._ki*t6**3*t1*t3**2*t2-1&
+ &5._ki*t6**3*t3**2*t1*t4-95._ki/2._ki*t6**3*t3**2*t2*t4**2+45._ki/2.&
+ &_ki*t6**3*t2**2*t3**2*t4+27._ki/2._ki*t6**3*t1*t4**2*t2**3
+ !
+ stemp4=-6._ki*t6**3*t1*t4*t2**4-4._ki*t6**2*t4**3*t2**5+t6**3*t4*t2&
+ &**6/4._ki-10._ki/3._ki*t6**3*t2**3*t3**2+16._ki*t6**3*t1*t4*t5*t2**&
+ &3+65._ki*t6**3*t4**2*t3*t5*t2**2-280._ki/3._ki*t6**3*t4**3*t3*t5*t&
+ &2-20._ki*t6**3*t1*t4*t5**2*t2**2+65._ki*t6**3*t1*t3*t5*t2*t4+24._k&
+ &i*t6**3*t1*t4**3*t5*t2+26._ki*t6**3*t1*t2*t3*t4**2-20._ki*t6**2*t&
+ &1*t2*t3*t4*t5**2-5._ki*t6**2*t1*t2*t5*t3**2+14._ki/3._ki*t6**2*t1*&
+ &t2**3*t3*t4+10._ki*t6**2*t1*t5**2*t3*t2**2+65._ki/2._ki*t6**2*t2*t&
+ &3**2*t4**2*t5-8._ki*t6**3*t1**2*t5*t2*t4+35._ki/6._ki*t6**2*t1*t4*&
+ &*2*t5*t2**3-35._ki/6._ki*t6**2*t1*t4*t5*t2**4-45._ki*t6**2*t4**2*t&
+ &5**2*t3*t2**2+20._ki*t6**2*t4*t5**2*t3*t2**3+25._ki/3._ki*t6**2*t1&
+ &*t4*t5**3*t2**2-25._ki/3._ki*t6**2*t1*t4**2*t5**3*t2-65._ki/2._ki*t&
+ &6**2*t3**2*t4*t5*t2**2-55._ki/3._ki*t6**3*t4*t3*t5*t2**3-15._ki*t6&
+ &**3*t1*t3*t5*t2**2-65._ki*t6**3*t1*t4**2*t3*t5+stemp5
+ !
+ stemp5=-5._ki/2._ki*t6**2*t3*t5**2*t2**4-20._ki/3._ki*t6**2*t4**3*t5*&
+ &*3*t2**2+10._ki/3._ki*t6**2*t4**4*t5**3*t2+25._ki/6._ki*t6**2*t4**2&
+ &*t5**3*t2**3-2._ki/3._ki*t6**3*t4*t5*t2**5-5._ki*t6**2*t1*t4**2*t2&
+ &**4+5._ki*t6**2*t1*t4*t2**5-t6*t4*t2**6*t1/2._ki-30._ki*t6**3*t1*t&
+ &4**3*t5**2+6._ki*t6**3*t1*t2**3*t3+5._ki*t6**3*t1**2*t3*t5+3._ki*t&
+ &6**3*t1**2*t2**2*t4-56._ki/3._ki*t6**3*t4**4*t3*t2-26._ki*t6**3*t4&
+ &**2*t3*t2**3-50._ki/3._ki*t6**3*t4**4*t5**2*t2+112._ki/3._ki*t6**3*&
+ &t4**3*t3*t2**2+22._ki/3._ki*t6**3*t4*t3*t2**4+15._ki*t6**3*t4**3*t&
+ &5**2*t2**2-9._ki*t6**3*t1*t4**3*t2**2-16._ki/3._ki*t6**3*t4**5*t5*&
+ &t2-35._ki/6._ki*t6**3*t4**2*t5**2*t2**3-12._ki*t6**3*t4**3*t5*t2**&
+ &3+40._ki/3._ki*t6**3*t4**4*t5*t2**2+14._ki/3._ki*t6**3*t4**2*t5*t2*&
+ &*4+140._ki/3._ki*t6**3*t4**4*t3*t5+10._ki*t6**3*t1**2*t5**2*t4-5._k&
+ &i*t6**3*t1**2*t5**2*t2
+ !
+ stemp3=-2._ki*t6**3*t1**2*t2*t3+5._ki/3._ki*t6**3*t3*t2**4*t5+5._ki/6&
+ &._ki*t6**3*t4*t5**2*t2**4+4._ki*t6**3*t1**2*t5*t2**2+5._ki/2._ki*t6&
+ &**3*t1*t5**2*t2**3+7._ki/12._ki*t6**2*t2**6*t4*t5-t4**2*t5*t2**7/&
+ &12._ki+3._ki/4._ki*t6**3*t1*t2**5+9._ki/2._ki*t6**3*t4**3*t2**4+5._ki&
+ &/2._ki*t6**2*t4**2*t2**6+t1**2*t2**4*t6**2/2._ki-2._ki/3._ki*t6**3*&
+ &t2**5*t3+30._ki*t6**2*t4**3*t5**2*t3*t2-5._ki/6._ki*t6**2*t4*t5**3&
+ &*t2**4-5._ki/3._ki*t6**2*t1*t5**3*t2**3+7._ki/6._ki*t6**2*t1*t5*t2*&
+ &*5+stemp4+stemp5+t3*t2**8/12._ki+45._ki*t6**3*t1*t4**2*t5**2*t2-2&
+ &6._ki*t6**3*t1*t2**2*t3*t4-36._ki*t6**3*t1*t4**2*t5*t2**2+21._ki/2&
+ &._ki*t6**2*t4**2*t3*t2**4-35._ki/12._ki*t6**2*t4**2*t5*t2**5+14._ki&
+ &/3._ki*t6**2*t4**3*t5*t2**4-7._ki/3._ki*t6**2*t4**4*t5*t2**3-7._ki*&
+ &t6**2*t4**3*t3*t2**3-14._ki/3._ki*t6**2*t4*t3*t2**5-2._ki*t6**3*t1&
+ &*t5*t2**4
+ !
+ stemp4=1._ki/t2**10*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(t4*t3*t5*t2**2-4._ki*t4*t2*t1*t6*t5-t3*t2*t1*t6+3._ki*t4*t&
+ &3*t6*t2**2-9._ki*t4**2*t3*t6*t2+4._ki*t4**2*t5*t1*t6-2._ki*t4*t3**&
+ &2*t2+2._ki*t4*t3*t1*t6+t3**2*t2**2+6._ki*t3*t4**3*t6-t3*t4**2*t2*&
+ &t5)/t3/t2**4*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp9=195._ki/4._ki*t6**2*t1**3*t3**2*t5*t2*t4**2-195._ki/4._ki*t6**&
+ &2*t1**3*t3**2*t5*t2**2*t4-21._ki/2._ki*t6**2*t1**3*t4**3*t3*t2**3&
+ &-7._ki*t6**2*t1**3*t4*t3*t2**5+25._ki/6._ki*t6**2*t1**4*t4*t5**3*t&
+ &2**2+7._ki/3._ki*t6**2*t1**4*t2**3*t3*t4-10._ki*t6**2*t1**4*t5**2*&
+ &t3*t2*t4-5._ki/2._ki*t6**2*t1**4*t3**2*t5*t2-275._ki/9._ki*t6**3*t1&
+ &**3*t4**4*t5**2*t2+55._ki/2._ki*t6**3*t1**3*t4**3*t5**2*t2**2+25.&
+ &_ki/4._ki*t6**3*t1**4*t3**2*t2+10._ki*t6**2*t1*t4**5*t3**2*t5*t2**&
+ &2-10._ki/3._ki*t6**2*t1*t4**6*t3**2*t5*t2-35._ki/3._ki*t6**2*t1*t4*&
+ &*4*t3**2*t5*t2**3-95._ki/9._ki*t6**2*t1*t2**3*t3**3*t4**3+5._ki*t6&
+ &**2*t1**4*t5**2*t3*t2**2+11._ki/24._ki*t6**3*t1*t4**2*t3**2*t2**5&
+ &+55._ki/18._ki*t6**3*t1**3*t3*t2**4*t5+40._ki/3._ki*t6**3*t1**4*t4*&
+ &t5*t2**3-308._ki/9._ki*t6**3*t1**3*t4**4*t3*t2
+ !
+ stemp8=stemp9-t6**3*t1**5*t2**3/2._ki+5._ki/8._ki*t6**3*t1**4*t2**5+&
+ &715._ki/6._ki*t6**3*t1**3*t4**2*t3*t5*t2**2+45._ki/4._ki*t6**2*t1**&
+ &3*t2**3*t3**2*t5+63._ki/4._ki*t6**2*t1**3*t4**2*t3*t2**4-35._ki/8.&
+ &_ki*t6**2*t1**3*t4**2*t5*t2**5+7._ki*t6**2*t1**3*t4**3*t5*t2**4-7&
+ &._ki/2._ki*t6**2*t1**3*t4**4*t5*t2**3+20._ki/3._ki*t6**2*t1*t4**3*t&
+ &3**2*t5*t2**4+t1**3*t3*t2**8/36._ki+15._ki/2._ki*t6**2*t1**3*t3**3&
+ &*t2*t4-15._ki*t6**2*t1**2*t4**3*t3*t5**2*t2**3+20._ki*t6**3*t1**4&
+ &*t4**3*t5*t2+65._ki/3._ki*t6**3*t1**4*t2*t3*t4**2-22._ki*t6**3*t1*&
+ &*3*t4**3*t5*t2**3-50._ki/3._ki*t6**3*t1**4*t4*t5**2*t2**2+5._ki/24&
+ &._ki*t6**2*t1*t4*t3**2*t2**6*t5+7._ki/36._ki*t6**2*t1**2*t4*t3*t2*&
+ &*7-5._ki/6._ki*t6**2*t1**2*t2**5*t3**2*t5+3._ki/2._ki*t6**3*t1**2*t&
+ &4**2*t3*t2**5+55._ki/6._ki*t6**2*t1**2*t4*t3**2*t5*t2**4
+ !
+ stemp9=stemp8-15._ki/2._ki*t6**2*t1**2*t4*t3**3*t2**3-5._ki/6._ki*t6*&
+ &*2*t1**2*t3*t5**2*t2**5*t4+5._ki/12._ki*t6**3*t1**2*t4*t5*t2**5*t&
+ &3-t6**3*t1**2*t4*t3*t2**6/6._ki-t6**3*t1*t4*t3**2*t2**6/24._ki-49&
+ &._ki/36._ki*t6**2*t1**2*t4**2*t3*t2**6-35._ki/9._ki*t6**2*t1**2*t4*&
+ &*4*t3*t2**4+7._ki/2._ki*t6**2*t1**2*t4**3*t3*t2**5-25._ki/12._ki*t6&
+ &**3*t1*t4**3*t3**2*t2**4-20._ki/3._ki*t6**2*t1**2*t4**5*t3*t5**2*&
+ &t2-15._ki/8._ki*t6**2*t1*t4**2*t3**2*t2**5*t5-88._ki/9._ki*t6**3*t1&
+ &**3*t4**5*t5*t2-70._ki/3._ki*t6**2*t1**2*t3**2*t4**4*t5*t2+14._ki/&
+ &9._ki*t6**2*t1**2*t4**5*t3*t2**3+140._ki/3._ki*t6**2*t1**2*t3**2*t&
+ &4**3*t5*t2**2-65._ki/2._ki*t6**2*t1**2*t3**2*t4**2*t5*t2**3+20._ki&
+ &*t6**3*t1**2*t4**5*t3*t5*t2-70._ki/3._ki*t6**3*t1**2*t4**4*t3*t5*&
+ &t2**2-16._ki/3._ki*t6**3*t1**2*t4**3*t3*t2**4+85._ki/6._ki*t6**3*t1&
+ &**2*t4**2*t3**2*t2**3
+ !
+ stemp7=stemp9-20._ki/3._ki*t6**3*t1**2*t4**6*t3*t5+8._ki/3._ki*t6**3*&
+ &t1**2*t4**6*t3*t2+28._ki/3._ki*t6**3*t1**2*t4**4*t3*t2**3-325._ki/&
+ &6._ki*t6**3*t1**4*t4**2*t3*t5+325._ki/6._ki*t6**3*t1**4*t3*t5*t2*t&
+ &4+40._ki/3._ki*t6**3*t1**2*t4**3*t3*t5*t2**3+100._ki/3._ki*t6**3*t1&
+ &**2*t4**4*t3**2*t2-605._ki/18._ki*t6**3*t1**3*t4*t3*t5*t2**3-95._k&
+ &i/3._ki*t6**3*t1**2*t4**3*t3**2*t2**2-8._ki*t6**3*t1**2*t4**5*t3*&
+ &t2**2-35._ki/12._ki*t6**3*t1**2*t4*t3**2*t2**4+7._ki/8._ki*t6**2*t1&
+ &**3*t2**6*t4*t5-15._ki/4._ki*t6**3*t1**2*t4**2*t5*t2**4*t3-5._ki/4&
+ &._ki*t6**2*t1**3*t4*t5**3*t2**4-15._ki/4._ki*t6**2*t1**3*t3*t5**2*&
+ &t2**4-135._ki/2._ki*t6**2*t1**3*t4**2*t5**2*t3*t2**2+45._ki*t6**2*&
+ &t1**3*t4**3*t5**2*t3*t2-t1**3*t4**2*t5*t2**7/9._ki-40._ki/3._ki*t6&
+ &**3*t1**2*t4**5*t3**2-4._ki/3._ki*t6**3*t1*t4**7*t3**2+5._ki/3._ki*&
+ &t6**3*t1**5*t3*t5+t6**3*t1**5*t2**2*t4
+ !
+ stemp9=10._ki/3._ki*t6**3*t1**5*t5**2*t4-5._ki/3._ki*t6**3*t1**5*t5**&
+ &2*t2+4._ki/3._ki*t6**3*t1**5*t5*t2**2-2._ki/3._ki*t6**3*t1**5*t2*t3&
+ &-15._ki/2._ki*t6**3*t1**4*t4**3*t2**2+45._ki/4._ki*t6**3*t1**4*t4**&
+ &2*t2**3-5._ki*t6**3*t1**4*t4*t2**4-25._ki/2._ki*t6**3*t1**4*t3**2*&
+ &t4-25._ki*t6**3*t1**4*t4**3*t5**2+5._ki*t6**3*t1**4*t2**3*t3+33._k&
+ &i/4._ki*t6**3*t1**3*t4**3*t2**4+11._ki/3._ki*t6**3*t1**3*t4**5*t2*&
+ &*2-55._ki/9._ki*t6**3*t1**3*t3**2*t2**3-t1**3*t4*t3*t2**7/18._ki+t&
+ &1**3*t4*t2**8*t5/9._ki+110._ki/9._ki*t6**3*t1**3*t4**5*t5**2-77._ki&
+ &/24._ki*t6**3*t1**3*t4**2*t2**5-55._ki/6._ki*t6**3*t1**3*t4**4*t2*&
+ &*3-15._ki/4._ki*t6**2*t1**3*t3**3*t2**2-5._ki/2._ki*t6**2*t1**4*t4*&
+ &*2*t2**4-7._ki/6._ki*t6**2*t1**4*t2**4*t3
+ !
+ stemp8=stemp9+5._ki/24._ki*t6**3*t1**2*t3**2*t2**5-t6**2*t2**7*t3**&
+ &3*t4/36._ki-5._ki/3._ki*t6**3*t1**4*t5*t2**4+10._ki/9._ki*t6**2*t1**&
+ &2*t3**3*t2**4+10._ki/3._ki*t6**2*t4**4*t3**3*t2**4-40._ki/9._ki*t6*&
+ &*2*t4**5*t3**3*t2**3+28._ki/9._ki*t6**2*t4**6*t3**3*t2**2-8._ki/9.&
+ &_ki*t6**2*t4**7*t3**3*t2+5._ki/2._ki*t6**2*t1**4*t4*t2**5+15._ki/4.&
+ &_ki*t6**2*t1**3*t4**2*t2**6+3._ki*t6**2*t1**3*t4**4*t2**4-6._ki*t6&
+ &**2*t1**3*t4**3*t2**5+t6*t1**3*t4**3*t2**6/2._ki-3._ki/4._ki*t6*t1&
+ &**3*t4**2*t2**7+25._ki/12._ki*t6**3*t1**4*t5**2*t2**3+7._ki/8._ki*t&
+ &6**2*t1**3*t3*t2**6-5._ki/6._ki*t6**2*t1**4*t5**3*t2**3+7._ki/12._k&
+ &i*t6**2*t1**4*t5*t2**5-3._ki/4._ki*t6**2*t1**3*t4*t2**7+t6*t1**3*&
+ &t4*t2**8/4._ki+11._ki/36._ki*t6**2*t2**6*t3**3*t4**2
+ !
+ stemp9=stemp8+5._ki/72._ki*t6**2*t1*t2**6*t3**3-25._ki/18._ki*t6**2*t&
+ &2**5*t3**3*t4**3-11._ki/9._ki*t6**3*t1**3*t2**5*t3+11._ki/24._ki*t6&
+ &**3*t1**3*t4*t2**6+1045._ki/18._ki*t6**3*t1**3*t3**2*t4**3+50._ki/&
+ &3._ki*t6**2*t1**2*t4**4*t3*t5**2*t2**2-40._ki/9._ki*t6**2*t1*t4**5&
+ &*t3**3*t2+100._ki/9._ki*t6**2*t1*t4**4*t3**3*t2**2-11._ki/9._ki*t6*&
+ &*3*t1**3*t4*t5*t2**5+55._ki/36._ki*t6**3*t1**3*t4*t5**2*t2**4+85.&
+ &_ki/18._ki*t6**2*t1*t2**4*t3**3*t4**2-35._ki/12._ki*t6**2*t1**4*t4*&
+ &t5*t2**4-20._ki/3._ki*t6**3*t1*t4**5*t3**2*t2**2-8._ki/3._ki*t6**3*&
+ &t1**5*t5*t2*t4+14._ki/3._ki*t6**3*t1*t4**6*t3**2*t2-t6**2*t1**4*t&
+ &2**6/2._ki-25._ki/6._ki*t6**2*t1**4*t4**2*t5**3*t2+35._ki/12._ki*t6*&
+ &*2*t1**4*t4**2*t5*t2**3+stemp7+35._ki/6._ki*t6**2*t1**2*t4**2*t3*&
+ &t5**2*t2**4
+ !
+ stemp6=stemp9+220._ki/9._ki*t6**3*t1**3*t4**4*t5*t2**2+165._ki/4._ki*&
+ &t6**3*t1**3*t4*t3**2*t2**2+121._ki/9._ki*t6**3*t1**3*t4*t3*t2**4+&
+ &770._ki/9._ki*t6**3*t1**3*t4**4*t3*t5+77._ki/9._ki*t6**3*t1**3*t4**&
+ &2*t5*t2**4-1540._ki/9._ki*t6**3*t1**3*t4**3*t3*t5*t2-1045._ki/12._k&
+ &i*t6**3*t1**3*t3**2*t4**2*t2-385._ki/36._ki*t6**3*t1**3*t4**2*t5*&
+ &*2*t2**3-143._ki/3._ki*t6**3*t1**3*t4**2*t3*t2**3+616._ki/9._ki*t6*&
+ &*3*t1**3*t4**3*t3*t2**2+5._ki*t6**3*t1*t4**4*t3**2*t2**3-25._ki/2&
+ &._ki*t6**3*t1**4*t3*t5*t2**2+75._ki/2._ki*t6**3*t1**4*t4**2*t5**2*&
+ &t2-65._ki/3._ki*t6**3*t1**4*t2**2*t3*t4-30._ki*t6**3*t1**4*t4**2*t&
+ &5*t2**2-10._ki*t6**2*t1**3*t4**3*t5**3*t2**2+5._ki*t6**2*t1**3*t4&
+ &**4*t5**3*t2-35._ki/36._ki*t6**2*t1*t2**5*t3**3*t4+25._ki/4._ki*t6*&
+ &*2*t1**3*t4**2*t5**3*t2**3+30._ki*t6**2*t1**3*t4*t5**2*t3*t2**3-&
+ &95._ki/9._ki*t6**2*t1**2*t3**3*t4**3*t2+95._ki/6._ki*t6**2*t1**2*t3&
+ &**3*t4**2*t2**2
+ !
+ stemp7=1._ki/t1**3/t2**10
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ stemp2=-(-24._ki*t6**3*t2**2*t5*t4**2+48._ki*t6**3*t4**3*t5*t2-24._k&
+ &i*t6**3*t3*t2*t1+60._ki*t6**3*t4*t1*t3+96._ki*t6**3*t3*t2*t4**2-3&
+ &6._ki*t6**3*t3*t2**2*t4+2._ki*t6*t1*t2**4*t5+2._ki*t6*t2**5*t4*t5-&
+ &4._ki*t6*t2**4*t4**2*t5-6._ki*t3*t4*t6*t2**4-18._ki*t6**2*t1*t2**3&
+ &*t4+2._ki*t3*t5*t2**5+6._ki*t6**2*t1*t2**4-12._ki*t6**3*t1**2*t5-3&
+ &2._ki*t6**3*t4**4*t5-12._ki*t6**2*t2**4*t4**2+96._ki*t6**3*t1*t5*t&
+ &4**2+12._ki*t1*t6**3*t2**2*t5+4._ki*t6**3*t2**3*t5*t4-72._ki*t1*t6&
+ &**3*t4*t5*t2+t4*t5**2*t2**5+12._ki*t6**2*t2**3*t4**3+3._ki*t6**2*&
+ &t2**5*t4-80._ki*t6**3*t3*t4**3+4._ki*t6**3*t3*t2**3+2._ki*t6*t2**5&
+ &*t3)/t2**8*z_log(t1*t6/t2**2,1._ki)/12._ki
+ !
+ stemp4=(-6._ki*t2*t6*t3**3*t4+2._ki*t2**2*t5*t3**3-4._ki*t3**2*t4**2&
+ &*t5*t2*t6+2._ki*t4*t5*t3**2*t6*t2**2+6._ki*t1*t6**2*t3**2*t4-8._ki&
+ &*t3*t4*t5*t2*t6**2*t1+4._ki*t5*t1**2*t6**2*t3-6._ki*t2*t5*t1*t6*t&
+ &3**2-4._ki*t3*t4*t5**2*t2*t1*t6+t3**2*t4*t5**2*t2**2+16._ki*t3*t4&
+ &**2*t5*t6**2*t1+2._ki*t6*t3**3*t2**2-12._ki*t2*t4**2*t3**2*t6**2+&
+ &12._ki*t4**3*t3**2*t6**2-2._ki*t2*t1*t6**2*t3**2+3._ki*t2**2*t4*t3&
+ &**2*t6**2+6._ki*t4*t5**2*t6**2*t1**2)/t3**2/t2**5*q(4,(t2*t3-t1*&
+ &t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp5=-(-8._ki*t6*t1**2*t2**4*t5*t3-56._ki*t6*t1*t2**4*t3*t4**2*t5&
+ &+28._ki*t6*t1*t2**5*t3*t4*t5-48._ki*t6*t1*t4*t3**2*t2**4-360._ki*t&
+ &6**3*t1**2*t3*t4*t5*t2+44._ki*t6**3*t1*t3*t2**3*t5*t4+96._ki*t6**&
+ &3*t3**2*t4**5-352._ki*t6**3*t1*t3*t4**4*t5-396._ki*t6**3*t1*t2**2&
+ &*t4*t3**2+480._ki*t6**3*t1**2*t3*t5*t4**2+60._ki*t6**3*t1**2*t3*t&
+ &2**2*t5+6._ki*t6**3*t4*t3**2*t2**4+44._ki*t6**3*t1*t3**2*t2**3+14&
+ &4._ki*t6**3*t3**2*t2**2*t4**3+18._ki*t6**2*t1**2*t3*t2**4+16._ki*t&
+ &1*t2**5*t3**2*t5-48._ki*t6**3*t3**2*t2**3*t4**2-192._ki*t6**3*t3*&
+ &*2*t4**4*t2+14._ki*t1*t2**5*t3*t4*t5**2+528._ki*t6**3*t1*t3*t4**3&
+ &*t5*t2+108._ki*t6**2*t1*t3*t2**3*t4**3-108._ki*t6**2*t1*t3*t2**4*&
+ &t4**2-54._ki*t6**2*t1**2*t3*t2**3*t4+27._ki*t6**2*t1*t3*t2**5*t4-&
+ &12._ki*t6*t1**2*t2**4*t4*t5**2+1056._ki*t6**3*t1*t2*t4**2*t3**2-2&
+ &64._ki*t6**3*t1*t3*t2**2*t5*t4**2+16._ki*t6*t1*t2**5*t3**2-24._ki*&
+ &t6**3*t3*t5*t1**3+300._ki*t6**3*t1**2*t4*t3**2-120._ki*t6**3*t1**&
+ &2*t2*t3**2-880._ki*t6**3*t1*t4**3*t3**2)/t1/t2**8/t3/72._ki
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3_glob)
+ !
+ case(3)
+ !
+ select case(par4_glob)
+ !
+ case(3)
+ !
+ stemp6=-3._ki/4._ki*t4**2*t2**10+t4**3*t2**9/4._ki-132._ki*t6**3*t4**&
+ &2*t3*t2**5+36._ki*t6**3*t4**5*t3*t2**2+180._ki*t6**3*t4**5*t5**3*&
+ &t2-330._ki*t6**3*t4**4*t5**3*t2**2+66._ki*t6**3*t4**4*t5*t2**4-13&
+ &2._ki*t6**3*t4**4*t3*t2**3+189._ki*t6**3*t4**3*t3*t2**4-540._ki*t6&
+ &**3*t4**5*t3*t5**2-36._ki*t6**3*t4**5*t5*t2**3-135._ki*t6**3*t1**&
+ &2*t4**2*t5**3+240._ki*t6**3*t1*t4**4*t5**3-3._ki/4._ki*t6**2*t1**2&
+ &*t4*t2**5-9._ki*t6**2*t1*t4**2*t2**6+7._ki/2._ki*t6**2*t1*t4**3*t2&
+ &**5+105._ki*t6**2*t4*t3**2*t2**5-285._ki/2._ki*t6**2*t4**2*t3**2*t&
+ &2**4+57._ki/2._ki*t6**2*t4**2*t3*t2**6-25._ki*t6**2*t4**3*t3*t2**5&
+ &-250._ki*t6**2*t4**3*t5**4*t2**3+160._ki*t6**2*t4**4*t5**4*t2**2-&
+ &40._ki*t6**2*t4**5*t5**4*t2+125._ki/2._ki*t6**2*t4**3*t3**2*t2**3+&
+ &8._ki*t6**2*t4**4*t3*t2**4-250._ki*t6**2*t4**3*t5**3*t2**4+160._ki&
+ &*t6**2*t4**4*t5**3*t2**3-40._ki*t6**2*t4**5*t5**3*t2**2+25._ki/2.&
+ &_ki*t6**2*t4**3*t5*t2**6-8._ki*t6**2*t4**4*t5*t2**5+2._ki*t6**2*t4&
+ &**5*t5*t2**4+10._ki*t6**2*t4**5*t5**2*t2**3-40._ki*t6**2*t4**4*t5&
+ &**2*t2**4+125._ki/2._ki*t6**2*t4**3*t5**2*t2**5+70._ki*t6*t4**3*t5&
+ &**4*t2**4-20._ki*t6*t4**4*t5**4*t2**3
+ !
+ stemp5=7._ki*t6*t4**3*t5*t2**7-2._ki*t6*t4**4*t5*t2**6+35._ki*t6*t4*&
+ &*3*t5**5*t2**3-10._ki*t6*t4**4*t5**5*t2**2-8._ki*t6*t4**4*t5**3*t&
+ &2**4+18._ki*t6*t4**2*t3*t2**7+28._ki*t6*t4**3*t5**3*t2**5-7._ki*t6&
+ &*t4**3*t3*t2**6-15._ki*t6*t4*t3**2*t2**6+9._ki*t6*t4**2*t3**2*t2*&
+ &*5-7._ki*t6*t4**3*t5**2*t2**6+2._ki*t6*t4**4*t5**2*t2**5-9._ki*t6*&
+ &*3*t4*t5*t2**7+45._ki*t6**3*t4*t5**3*t2**5+90._ki*t6**3*t3*t5**2*&
+ &t2**5+75._ki*t6**3*t1*t5**3*t2**4-15._ki*t6**3*t1*t5*t2**6-70._ki*&
+ &t6**2*t4*t5**3*t2**6+35._ki/2._ki*t6**2*t4*t5**2*t2**7+25._ki*t6**&
+ &2*t5*t2**7*t3-70._ki*t6**2*t4*t5**4*t2**5-150._ki*t6**2*t3*t5**2*&
+ &t2**6-200._ki*t6**2*t5**3*t2**5*t3+stemp6+45._ki*t6**3*t4*t3*t2**&
+ &6+600._ki*t6**2*t3**2*t2**4*t5**2+190._ki*t6**2*t4**2*t5**4*t2**4&
+ &-3._ki/2._ki*t6**2*t1**2*t5*t2**5-15._ki/2._ki*t6**2*t1**2*t5**2*t2&
+ &**4+30._ki*t6**2*t1**2*t5**3*t2**3+30._ki*t6**2*t1**2*t5**4*t2**2&
+ &-165._ki*t6**3*t4**2*t5**3*t2**4+33._ki*t6**3*t4**2*t5*t2**6-t6*t&
+ &1*t2**5*t3**2+280._ki*t3**3*t2**3*t6**2*t4+160._ki*t3**3*t2**4*t6&
+ &*t5-190._ki*t3**3*t2**2*t6**2*t4**2-12._ki*t3*t2**3*t6**3*t1**2
+ !
+ stemp6=stemp5+20._ki*t3**2*t2**4*t1*t6**2-20._ki*t3**3*t2**4*t6*t4-&
+ &25._ki*t6*t5*t2**2*t3**4+660._ki*t2*t3**3*t6**3*t4**2-450._ki*t2**&
+ &2*t3**3*t6**3*t4+105._ki*t3**3*t6**3*t1*t4-6._ki*t6**2*t2**6*t1*t&
+ &3-3._ki*t6*t1*t3*t2**7-t2**2*t1**3*t6**3*t5-45._ki*t6**3*t5*t1**2&
+ &*t3**2+200._ki*t2**3*t3**3*t6*t5**2-400._ki*t2**3*t3**3*t6**2*t5-&
+ &9._ki*t6*t4**2*t2**8*t5-360._ki*t6*t3**2*t2**5*t5**2+9._ki*t6*t4**&
+ &2*t5**2*t2**7-300._ki*t6*t3**2*t5**3*t2**4-15._ki*t6*t4*t3*t2**8-&
+ &90._ki*t6*t4**2*t5**4*t2**5+190._ki*t6**2*t4**2*t5**3*t2**5-19._ki&
+ &/2._ki*t6**2*t4**2*t5*t2**7-14._ki*t6**2*t4*t3*t2**7+300._ki*t6**2&
+ &*t2**5*t3**2*t5+15._ki/2._ki*t6**2*t1*t4*t2**7-225._ki*t6**3*t3**2&
+ &*t2**4*t5-90._ki*t6**3*t1**2*t5**3*t2**2+18._ki*t6**3*t1**2*t5*t2&
+ &**4+30._ki*t6**3*t1*t3*t2**5+t6**2*t1**2*t3*t2**4/2._ki-75._ki*t3*&
+ &*3*t2*t6**3*t1-70._ki*t3**4*t2*t6**2*t4+20._ki*t6**2*t2**2*t1*t3*&
+ &*3-72._ki*t6*t5*t3**2*t2**6-36._ki*t6*t4**2*t5**3*t2**6-95._ki/2._k&
+ &i*t6**2*t4**2*t5**2*t2**6+1120._ki*t2**2*t3**3*t6**2*t5*t4-760._k&
+ &i*t2*t3**3*t6**2*t5*t4**2
+ !
+ stemp7=stemp6-375._ki*t6*t4*t5**4*t2**4*t3+30._ki*t6*t4*t3*t2**7*t5&
+ &-600._ki*t6*t4*t5**3*t2**5*t3-250._ki*t2**2*t3**3*t6*t4*t5**2-420&
+ &._ki*t6**3*t1*t4*t5**3*t2**3-450._ki*t6**3*t1*t3*t5**2*t2**3-180.&
+ &_ki*t6*t4*t5**2*t2**6*t3-75._ki*t6*t1*t5**4*t3*t2**3+1350._ki*t6**&
+ &3*t3**2*t2**3*t4*t5+1890._ki*t6**3*t1*t4*t3*t5**2*t2**2-2565._ki*&
+ &t6**3*t1*t4**2*t3*t5**2*t2+1125._ki*t6**3*t1*t4**3*t3*t5**2-126.&
+ &_ki*t6**3*t1*t2**4*t3*t4+855._ki*t6**3*t1*t4**2*t5**3*t2**2+171._k&
+ &i*t6**3*t1*t2**3*t3*t4**2-750._ki*t6**3*t1*t4**3*t5**3*t2+150._ki&
+ &*t6**3*t1*t4**3*t5*t2**3-171._ki*t6**3*t1*t4**2*t5*t2**4
+ !
+ stemp4=stemp7+36._ki*t6*t1*t4*t3*t2**4*t5**2+750._ki*t6*t4*t5**3*t3&
+ &**2*t2**3+720._ki*t6*t4**2*t3*t5**3*t2**4+450._ki*t6*t4**2*t5**4*&
+ &t3*t2**3+180._ki*t6*t4*t5*t2**5*t3**2-108._ki*t6*t4**2*t3**2*t5*t&
+ &2**4+216._ki*t6*t4**2*t5**2*t2**5*t3-84._ki*t6*t4**3*t5**2*t2**4*&
+ &t3-540._ki*t6*t4**2*t3**2*t5**2*t2**3-175._ki*t6*t4**3*t3*t5**4*t&
+ &2**2-280._ki*t6*t4**3*t3*t5**3*t2**3+120._ki*t6*t1*t4*t5**3*t3*t2&
+ &**3-45._ki*t6*t4**2*t5**5*t2**4+14._ki*t6*t4**3*t5*t3*t2**5-36._ki&
+ &*t6*t4**2*t5*t3*t2**6+900._ki*t6*t4*t3**2*t5**2*t2**4-450._ki*t6*&
+ &t4**2*t5**3*t3**2*t2**2+12._ki*t6*t1*t4**2*t5**3*t2**4-3._ki*t6*t&
+ &1*t4**2*t5**2*t2**5
+ !
+ stemp7=15._ki*t6*t1*t4**2*t5**5*t2**2+30._ki*t6*t1*t4**2*t5**4*t2**&
+ &3+3._ki*t6*t1*t4**2*t2**6*t5+300._ki*t6**2*t1*t4*t5**3*t2**4+1120&
+ &._ki*t6**2*t4*t5**3*t2**4*t3+1980._ki*t6**3*t4**2*t3*t5**2*t2**3-&
+ &2835._ki*t6**3*t4**3*t3*t5**2*t2**2+1980._ki*t6**3*t4**4*t3*t5**2&
+ &*t2+3._ki/4._ki*t4*t2**11+2835._ki*t6**3*t4**3*t3**2*t5*t2-2970._ki&
+ &*t6**3*t4**2*t3**2*t5*t2**2-30._ki*t6**2*t1**2*t4*t5**4*t2+15._ki&
+ &/2._ki*t6**2*t1**2*t4*t5**2*t2**3-30._ki*t6**2*t1**2*t4*t5**3*t2*&
+ &*2-35._ki*t6**2*t1*t4**3*t5**2*t2**3-360._ki*t6**2*t1*t4**2*t5**4&
+ &*t2**2-7._ki*t6**2*t1*t4**3*t5*t2**4+140._ki*t6**2*t1*t4**3*t5**4&
+ &*t2
+ !
+ stemp6=stemp7+18._ki*t6**2*t1*t4**2*t5*t2**5+3._ki*t6*t1*t5*t2**8+1&
+ &60._ki*t6*t3*t5**3*t2**6+100._ki*t6*t5**4*t2**5*t3-8._ki*t6*t5*t3*&
+ &t2**8+7._ki/2._ki*t6**2*t4*t2**8*t5+20._ki*t6**2*t1*t5**2*t2**6+4.&
+ &_ki*t6**2*t1*t5*t2**7-80._ki*t6**2*t1*t5**4*t2**4-80._ki*t6**2*t1*&
+ &t5**3*t2**5+50._ki*t6*t4*t5**4*t2**6+5._ki*t6*t4*t2**9*t5+20._ki*t&
+ &6*t4*t5**3*t2**7-5._ki*t6*t2**8*t4*t5**2+25._ki*t6*t4*t5**5*t2**5&
+ &+48._ki*t6*t3*t5**2*t2**7+30._ki*t6*t1*t5**4*t2**5+15._ki*t6*t1*t5&
+ &**5*t2**4+12._ki*t6*t1*t5**3*t2**6
+ !
+ stemp5=stemp6-3._ki*t6*t1*t5**2*t2**7-990._ki*t6**3*t4**4*t3**2*t5-&
+ &63._ki*t6**3*t4**3*t5*t2**5+8._ki*t6**3*t4**6*t5*t2**2+315._ki*t6*&
+ &*3*t4**3*t5**3*t2**3-10._ki*t6*t2**3*t3**4+90._ki*t6**2*t1*t4**2*&
+ &t5**2*t2**4-360._ki*t6**2*t1*t4**2*t5**3*t2**3+140._ki*t6**2*t1*t&
+ &4**3*t5**3*t2**2+3._ki/2._ki*t6**2*t1**2*t4*t5*t2**4-90._ki*t6**2*&
+ &t1*t4**2*t5*t2**3*t3-900._ki*t6**2*t1*t4*t3*t5**2*t2**3+150._ki*t&
+ &6**2*t1*t4*t5*t2**4*t3+540._ki*t6**2*t1*t4**2*t3*t5**2*t2**2+720&
+ &._ki*t6**2*t1*t4**2*t5**3*t2*t3-t2**12/4._ki-6._ki*t6**3*t3*t2**7+&
+ &4._ki*t6**2*t4**4*t2**6-10._ki*t6*t5**4*t2**7+50._ki*t3**4*t2**2*t&
+ &6**2-25._ki*t6**2*t3**2*t2**6+10._ki*t6**2*t5**4*t2**6+4._ki*t6*t3&
+ &*t2**9+3._ki/4._ki*t6**2*t1**2*t2**6-t6**2*t4**5*t2**5+16._ki*t3**&
+ &3*t6*t2**5-5._ki*t6*t5**5*t2**6-t6*t2**10*t5+5._ki/2._ki*t6**2*t3*&
+ &t2**8-25._ki/4._ki*t6**2*t4**3*t2**7+19._ki/4._ki*t6**2*t4**2*t2**8&
+ &-7._ki/4._ki*t6**2*t4*t2**9-100._ki*t3**3*t2**4*t6**2-4._ki*t6*t5**&
+ &3*t2**8+100._ki*t2**3*t3**3*t6**3-2._ki*t6**2*t1*t2**8-315._ki*t3*&
+ &*3*t6**3*t4**3
+ !
+ stemp7=stemp5+10._ki*t6**2*t5**3*t2**7-5._ki/2._ki*t6**2*t5**2*t2**8&
+ &-40._ki*t6**3*t4**6*t5**3+t6*t5**2*t2**9+t6**3*t5*t2**8-5._ki*t6*&
+ &*3*t5**3*t2**6+5._ki*t1**3*t6**3*t5**3-t6**2*t2**9*t5/2._ki+6._ki*&
+ &t6*t3**2*t2**7+360._ki*t6**2*t1*t3*t5**2*t2**4-9._ki*t6**2*t1*t3*&
+ &t2**4*t4**2+15._ki*t6**2*t1*t3*t2**5*t4-30._ki*t3*t5**2*t2**2*t1*&
+ &*2*t6**2+60._ki*t3**2*t5**2*t2**3*t1*t6-240._ki*t3**2*t2**3*t6**2&
+ &*t5*t1+300._ki*t3**2*t2**2*t6**2*t4*t5*t1-200._ki*t3**3*t2**3*t6*&
+ &t4*t5
+ !
+ stemp6=stemp7+15._ki*t3*t2**2*t6**3*t4*t1**2-25._ki*t3**2*t2**3*t1*&
+ &t6**2*t4+5._ki*t3*t2**3*t1**2*t6**2*t5-6._ki*t6*t1*t2**5*t3*t4*t5&
+ &-1200._ki*t6**2*t1*t4*t5**3*t3*t2**2-2520._ki*t6**2*t4*t3**2*t5**&
+ &2*t2**3-1500._ki*t6**2*t4**3*t3**2*t5**2*t2-1260._ki*t6**2*t4*t3*&
+ &*2*t5*t2**4+1710._ki*t6**2*t4**2*t3**2*t5*t2**3+2000._ki*t6**2*t4&
+ &**3*t3*t5**3*t2**2+3420._ki*t6**2*t4**2*t3**2*t5**2*t2**2-750._ki&
+ &*t6**2*t4**3*t3**2*t5*t2**2-640._ki*t6**2*t4**4*t3*t5**3*t2+285.&
+ &_ki*t6**2*t4**2*t5*t2**5*t3-2280._ki*t6**2*t4**2*t5**3*t3*t2**3+1&
+ &500._ki*t6**2*t4**3*t3*t5**2*t2**3-480._ki*t6**2*t4**4*t3*t5**2*t&
+ &2**2+80._ki*t6**2*t4**4*t5*t2**3*t3-1710._ki*t6**2*t4**2*t3*t5**2&
+ &*t2**4
+ !
+ stemp7=stemp6+75._ki*t6*t1*t4*t5**4*t2**2*t3-15._ki*t6**2*t1*t2**6*&
+ &t4*t5+3._ki*t6*t1*t2**6*t4*t3+12._ki*t3**2*t2**4*t1*t6*t5+80._ki*t&
+ &6**2*t5*t2*t1*t3**3+180._ki*t2*t3*t1**2*t6**3*t5**2-480._ki*t2**2&
+ &*t3**2*t1*t6**2*t5**2+855._ki*t3**2*t1*t6**3*t5*t4**2+50._ki*t2**&
+ &2*t3**2*t1*t6*t5**3-40._ki*t2*t3*t1**2*t6**2*t5**3-225._ki*t3*t1*&
+ &*2*t6**3*t4*t5**2+450._ki*t2**2*t3**2*t1*t6**3*t5-1260._ki*t2*t3*&
+ &*2*t1*t6**3*t5*t4+600._ki*t2*t3**2*t1*t6**2*t4*t5**2-120._ki*t6*t&
+ &1*t5**3*t3*t2**4+840._ki*t6**2*t4*t3*t5**2*t2**5-75._ki*t6**2*t1*&
+ &t4*t5**2*t2**5+300._ki*t6**2*t1*t4*t5**4*t2**3
+ !
+ stemp3=stemp7-45._ki*t6**3*t1**2*t4*t5*t2**3+27._ki*t6**3*t1**2*t4*&
+ &*2*t5*t2**2+225._ki*t6**3*t1**2*t4*t5**3*t2-75._ki*t6**3*t1*t2**2&
+ &*t3*t4**3-48._ki*t6**3*t1*t4**4*t5*t2**2-140._ki*t6**2*t4*t5*t2**&
+ &6*t3+t6**2*t2**10/4._ki+stemp4-250._ki*t6**2*t4**3*t5*t2**4*t3-6.&
+ &_ki*t6*t1*t4*t5*t2**7-36._ki*t6*t1*t3*t5**2*t2**5+6._ki*t6*t1*t4*t&
+ &5**2*t2**6-675._ki*t6**3*t4*t3*t5**2*t2**4+84._ki*t6**3*t1*t4*t5*&
+ &t2**5+480._ki*t6**2*t1*t3*t5**3*t2**3-60._ki*t6**2*t1*t3*t5*t2**5&
+ &+6._ki*t6*t1*t2**6*t3*t5-24._ki*t6*t1*t4*t5**3*t2**5-60._ki*t6*t1*&
+ &t4*t5**4*t2**4-30._ki*t6*t1*t4*t5**5*t2**3
+ !
+ stemp4=1._ki/t2**12*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=(-t4+t2)**3/t2**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/4._ki
+ !
+ stemp11=-300._ki*t6*t1**4*t2**5*t3**3*t4+110._ki*t6*t1**4*t4**4*t3*&
+ &*2*t2**4+660._ki*t6*t1**4*t2**4*t3**3*t4**2+300._ki*t6*t1**4*t3**&
+ &4*t2**3*t4-600._ki*t6*t1**6*t4*t5**3*t3*t2**2-450._ki*t6*t1**6*t4&
+ &*t3*t5**2*t2**3+300._ki*t6*t1**6*t4*t3**2*t5**2*t2-1890._ki*t6*t1&
+ &**5*t4*t3**2*t5*t2**4-3780._ki*t6*t1**5*t4*t3**2*t5**2*t2**3+256&
+ &5._ki*t6*t1**5*t4**2*t3**2*t5*t2**3+1680._ki*t6*t1**5*t3**3*t5*t2&
+ &**2*t4-375._ki*t6*t1**5*t4**3*t5*t2**4*t3-3420._ki*t6*t1**5*t4**2&
+ &*t5**3*t3*t2**3-32._ki*t6**2*t1**2*t4**8*t3**3*t2+121._ki*t6**2*t&
+ &1**2*t4**5*t3**3*t2**4-414._ki*t6**2*t1**3*t4**5*t3**2*t5*t2**3+&
+ &5._ki*t6**2*t1**7*t2**2*t3*t4+9._ki*t6**2*t1**7*t4**2*t5*t2**2+12&
+ &5._ki*t6**2*t1**6*t4**3*t5*t2**3+1425._ki/2._ki*t6**2*t1**6*t4**2*&
+ &t3**2*t5
+ !
+ stemp10=stemp11+285._ki/2._ki*t6**2*t1**6*t2**3*t3*t4**2+1875._ki/2.&
+ &_ki*t6**2*t1**6*t4**3*t3*t5**2-285._ki/2._ki*t6**2*t1**6*t4**2*t5*&
+ &t2**4-55._ki*t6*t4**2*t2**7*t1**4*t3*t5-840._ki*t6*t1**4*t4**3*t5&
+ &**3*t3*t2**4-1050._ki*t6**2*t1**6*t3**2*t5*t2*t4-600._ki*t1**5*t4&
+ &*t5**3*t2**5*t3-180._ki*t1**5*t4*t5**2*t2**6*t3-840._ki*t1**4*t4*&
+ &t3**2*t5**2*t2**6+70._ki*t6*t1**6*t4**3*t5**3*t2**2-285._ki*t6*t1&
+ &**5*t3**3*t2**2*t4**2-105._ki*t6*t1**5*t3**4*t2*t4+315._ki/2._ki*t&
+ &6*t1**5*t4*t3**2*t2**5-855._ki/4._ki*t6*t1**5*t4**2*t3**2*t2**4+1&
+ &50._ki*t6*t1**6*t4*t5*t3**2*t2**2+2160._ki*t6**2*t1**4*t4**4*t3**&
+ &2*t5*t2**2-4._ki*t6**2*t1**4*t4**7*t3*t2**2+240._ki*t6*t1**5*t4**&
+ &4*t5**4*t2**2+420._ki*t6*t1**5*t4*t3**3*t2**3-440._ki*t6*t1**4*t3&
+ &**4*t2**2*t4**2
+ !
+ stemp11=-30._ki*t6*t1**4*t4**5*t3**2*t2**3-315._ki/2._ki*t6*t1**4*t4&
+ &**3*t3**2*t2**5+110._ki*t6*t1**4*t4**2*t3**2*t2**6+165._ki*t6**2*&
+ &t3*t5**2*t2**5*t1**5-33._ki/2._ki*t6**2*t4*t5*t2**7*t1**5+900._ki*&
+ &t6*t1**5*t3**2*t2**4*t5**2+285._ki*t6*t1**5*t4**2*t5**4*t2**4+20&
+ &0._ki*t6*t5*t2**5*t3**3*t1**4-55._ki*t6*t4*t3**3*t2**7*t1**3-15._k&
+ &i/2._ki*t6*t1**6*t2**6*t4*t5+180._ki*t6*t1**6*t3*t5**2*t2**4-75._k&
+ &i/2._ki*t6*t1**6*t4*t5**2*t2**5+150._ki*t6*t1**6*t4*t5**4*t2**3+2&
+ &40._ki*t6*t1**6*t3*t5**3*t2**3-30._ki*t6*t1**6*t3*t5*t2**5+150._ki&
+ &*t6*t1**6*t4*t5**3*t2**4+900._ki*t6*t4*t3**2*t2**5*t1**4*t5**2+3&
+ &30._ki*t6*t4**2*t3*t2**6*t1**4*t5**2+stemp10-1720._ki*t6*t1**3*t4&
+ &**3*t3**3*t5*t2**4-64._ki*t1**2*t4**4*t3**3*t2**7
+ !
+ stemp9=stemp11+425._ki/2._ki*t1**2*t4**2*t3**4*t2**7-430._ki*t1**2*t&
+ &4**3*t3**4*t2**6+200._ki/3._ki*t1**2*t4**6*t3**4*t2**3+43._ki*t1**&
+ &2*t4**3*t3**3*t2**8+16._ki/3._ki*t1**2*t4**7*t3**3*t2**4-80._ki/3.&
+ &_ki*t1**2*t4**6*t3**3*t2**5+56._ki*t1**2*t4**5*t3**3*t2**6+480._ki&
+ &*t1**2*t4**4*t3**4*t2**5-280._ki*t1**2*t4**5*t3**4*t2**4+70._ki*t&
+ &1**2*t2**2*t3**5*t4**5-425._ki/2._ki*t1**2*t2**5*t3**5*t4**2-240.&
+ &_ki*t1**2*t2**3*t3**5*t4**4+275._ki/4._ki*t1**2*t4*t3**5*t2**6+645&
+ &._ki/2._ki*t1**2*t2**4*t3**5*t4**3+1155._ki/4._ki*t1*t2**6*t3**5*t4&
+ &**3+73._ki/2._ki*t4**2*t3**4*t2**9*t1+200._ki*t1**5*t3**3*t5**2*t2&
+ &**3+18._ki*t1**5*t4**2*t3*t2**7-15._ki*t1**5*t4*t3**2*t2**6+70._ki&
+ &*t1**5*t4**3*t5**4*t2**4-7._ki*t1**5*t4**3*t5**2*t2**6
+ !
+ stemp11=stemp9+15._ki*t6*t1**5*t4**5*t5**2*t2**3-1140._ki*t6*t1**5*&
+ &t4**2*t3**3*t5*t2+120._ki*t6*t1**5*t4**4*t5*t2**3*t3-1125._ki*t6*&
+ &t1**5*t4**3*t3**2*t5*t2**2+855._ki/2._ki*t6*t1**5*t4**2*t5*t2**5*&
+ &t3+3000._ki*t6*t1**5*t4**3*t3*t5**3*t2**2-12._ki*t6*t1**5*t4**4*t&
+ &5*t2**5-60._ki*t6*t1**5*t4**5*t5**3*t2**2+240._ki*t6*t1**5*t4**4*&
+ &t5**3*t2**3+3._ki*t6*t1**5*t4**5*t5*t2**4+12._ki*t6*t1**5*t4**4*t&
+ &3*t2**4+171._ki/4._ki*t6*t1**5*t4**2*t3*t2**6+110._ki/3._ki*t4*t5*t&
+ &3**3*t2**9*t1**2+720._ki*t1**5*t4**2*t3*t5**3*t2**4-690._ki*t1*t4&
+ &**5*t3**4*t5*t2**5+40._ki*t1*t4**8*t3**4*t5*t2**2-1155._ki/4._ki*t&
+ &1*t4**3*t5*t2**7*t3**4+1125._ki/2._ki*t1*t4**4*t5*t2**6*t3**4-4._k&
+ &i*t3**3*t2**9*t1**3
+ !
+ stemp10=stemp11-5._ki/2._ki*t6*t3**2*t5*t2**9*t1**3+73._ki/3._ki*t6*t&
+ &4**2*t3**3*t2**8*t1**2+160._ki*t1**5*t3**3*t5*t2**4-20._ki*t1**5*&
+ &t4**4*t5**4*t2**3-2._ki*t1**5*t4**4*t5*t2**6-25._ki*t1**5*t3**4*t&
+ &5*t2**2+35._ki*t1**5*t4**3*t5**5*t2**3-10._ki*t1**5*t4**4*t5**5*t&
+ &2**2+30._ki*t1**4*t3**2*t2**8*t5+125._ki*t1**4*t5**3*t2**6*t3**2+&
+ &7._ki/2._ki*t1**4*t3*t4*t2**10+150._ki*t1**4*t3**2*t2**7*t5**2-50.&
+ &_ki/3._ki*t1**3*t3**5*t2**5-18._ki*t4*t3**2*t2**9*t1**3*t5+32._ki/3&
+ &._ki*t6*t1**2*t4**8*t3**3*t2**2-39._ki/4._ki*t6**2*t3**2*t4*t2**7*&
+ &t1**3*t5+165._ki/4._ki*t6**2*t3*t4*t2**6*t1**4*t5**2+44._ki/3._ki*t&
+ &6**2*t1**5*t4**6*t5*t2**2-33._ki/4._ki*t6**2*t4**2*t3**3*t2**7*t1&
+ &**2-90._ki*t6*t5**2*t4*t2**7*t1**4*t3-120._ki*t6*t4*t5**3*t2**6*t&
+ &1**4*t3
+ !
+ stemp11=stemp10+15._ki*t6*t4*t5*t3*t2**8*t1**4-13._ki/3._ki*t6*t4*t3&
+ &**3*t2**9*t1**2-55._ki/24._ki*t6*t4*t2**9*t1**3*t3**2-120._ki*t6*t&
+ &3**2*t5**2*t2**6*t1**4-5._ki*t1**5*t5**5*t2**6+5._ki/2._ki*t6*t3**&
+ &4*t4*t2**9*t1+5._ki/4._ki*t6**2*t3**3*t4*t2**8*t1**2+3._ki/4._ki*t6&
+ &**2*t3**2*t5*t2**8*t1**3+275._ki*t4**2*t5**3*t2**6*t1**3*t3**2+5&
+ &00._ki/3._ki*t1**2*t4**6*t3**4*t5*t2**2+160._ki/3._ki*t1**2*t4**7*t&
+ &3**3*t5*t2**3-7._ki/2._ki*t6*t1**6*t4**3*t5*t2**4+t3**4*t2**11*t1&
+ &/2._ki+430._ki*t1**2*t4**3*t5*t3**3*t2**7+2125._ki/4._ki*t1**2*t4**&
+ &2*t3**4*t5*t2**6+1200._ki*t1**2*t4**4*t3**4*t5*t2**4+1075._ki/2._k&
+ &i*t1**2*t4**3*t5**2*t2**6*t3**3-1120._ki*t6*t1**3*t4**5*t3**3*t5&
+ &*t2**2+800._ki/3._ki*t6*t1**3*t4**6*t3**3*t5*t2-168._ki*t1**4*t3**&
+ &2*t5*t4*t2**7
+ !
+ stemp8=stemp11-t3**5*t2**11/6._ki+60._ki*t6**2*t1**7*t3*t5**2*t2-13&
+ &2._ki*t6**2*t1**3*t4**7*t3**2*t5*t2-15._ki/4._ki*t6**2*t5**2*t2**7&
+ &*t1**4*t3+375._ki/4._ki*t6*t1**5*t4**3*t5**2*t2**5+55._ki/2._ki*t6*&
+ &t4*t5*t3**2*t2**8*t1**3+55._ki*t6*t3**2*t4*t2**7*t1**3*t5**2-52.&
+ &_ki/3._ki*t6*t3**3*t4*t2**8*t1**2*t5-105._ki*t6*t1**5*t4*t5**4*t2*&
+ &*5-225._ki*t6*t1**5*t3*t5**2*t2**6-495._ki/2._ki*t6**2*t4*t5*t2**5&
+ &*t3**2*t1**4-300._ki*t6*t1**5*t5**3*t2**5*t3-60._ki*t6*t5*t3**2*t&
+ &2**7*t1**4-75._ki/2._ki*t6*t4*t2**7*t3**2*t1**4-210._ki*t6*t1**5*t&
+ &4*t5*t2**6*t3+285._ki*t6*t1**5*t4**2*t5**3*t2**5+320._ki/3._ki*t6*&
+ &t1**4*t4**6*t5**3*t3*t2+24._ki*t6**2*t1**3*t4**8*t3**2*t5+880._ki&
+ &*t6*t1**4*t4**4*t5**3*t3*t2**3-2640._ki*t6*t1**4*t4**2*t3**2*t5*&
+ &*2*t2**4-960._ki*t6*t1**5*t4**4*t3*t5**3*t2
+ !
+ stemp11=stemp8+80._ki*t6*t1**4*t4**6*t3*t5**2*t2**2-630._ki*t6*t1**&
+ &4*t4**3*t3*t5**2*t2**5-630._ki*t6*t1**4*t2**3*t3**3*t4**3+2640._k&
+ &i*t6*t1**4*t4**2*t3**3*t2**3*t5-2640._ki*t6*t1**4*t4**4*t3**2*t5&
+ &**2*t2**2+720._ki*t6*t1**4*t4**5*t3**2*t5**2*t2+60._ki*t6*t1**4*t&
+ &4**5*t3*t2**4*t5-110._ki*t6*t1**4*t4**4*t3*t2**5*t5+3780._ki*t6*t&
+ &1**4*t4**3*t3**2*t5**2*t2**3+6._ki*t6*t1**4*t4**5*t3*t2**5+19._ki&
+ &*t1**4*t4**2*t3*t2**8*t5+375._ki*t4*t3**3*t2**6*t1**3*t5**2-736.&
+ &_ki*t6*t1**2*t4**5*t3**3*t5*t2**4+600._ki*t6*t1**2*t4**4*t5*t2**5&
+ &*t3**3+242._ki*t6*t1*t4**5*t3**4*t2**5-275._ki/2._ki*t4*t5*t2**7*t&
+ &3**4*t1**2+1920._ki*t6*t1**3*t4**4*t3**3*t5*t2**3+385._ki*t6*t1**&
+ &2*t3**4*t4**3*t2**5+21._ki/2._ki*t6*t1**4*t4**3*t3*t2**7
+ !
+ stemp10=stemp11+220._ki*t6*t1**4*t4**4*t3**3*t2**2-4._ki/3._ki*t6*t1&
+ &**4*t4**6*t3*t2**4-180._ki*t6*t1**6*t4**2*t5**4*t2**2+1425._ki*t1&
+ &**4*t4**2*t3**2*t5**3*t2**4-240._ki*t6*t1**6*t3**2*t5**2*t2**2-1&
+ &20._ki*t6*t1**6*t2**3*t3**2*t5-25._ki/2._ki*t6*t1**6*t2**3*t4*t3**&
+ &2-9._ki/2._ki*t6*t1**6*t4**2*t3*t2**4+45._ki*t6*t1**6*t4**2*t5**2*&
+ &t2**4+15._ki/2._ki*t6*t1**6*t4*t3*t2**5+1890._ki*t6*t1**4*t4**3*t3&
+ &**2*t5*t2**4-1320._ki*t6*t1**4*t4**4*t3**2*t5*t2**3+360._ki*t6*t1&
+ &**4*t4**5*t3**2*t5*t2**2+3._ki/8._ki*t6*t1**5*t2**10-90._ki*t4*t3*&
+ &*2*t5**2*t2**8*t1**3+175._ki/2._ki*t1**4*t4*t5**4*t3*t2**6+140._ki&
+ &*t1**4*t4*t5**3*t3*t2**7+42._ki*t1**4*t3*t5**2*t4*t2**8-7._ki*t1*&
+ &*4*t2**9*t4*t5*t3+3630._ki*t6**2*t1**5*t4**2*t3*t5**2*t2**3-5445&
+ &._ki*t6**2*t1**5*t4**2*t3**2*t5*t2**2
+ !
+ stemp11=stemp10+3825._ki/4._ki*t6**2*t1**4*t4**2*t3**2*t5*t2**4+105&
+ &._ki*t6*t1**4*t4**3*t3*t2**6*t5+300._ki*t4*t3**3*t2**7*t1**3*t5+8&
+ &0._ki*t1**3*t4**6*t3**2*t5**2*t2**3-146._ki*t6*t1**2*t4**2*t3**4*&
+ &t2**6-600._ki*t6*t1**2*t2**4*t4**4*t3**4-77._ki*t6*t1**2*t4**3*t3&
+ &**3*t2**7+150._ki*t6*t1**2*t4**4*t3**3*t2**6-176._ki/3._ki*t6*t1**&
+ &2*t4**7*t3**3*t2**3-704._ki/3._ki*t6*t1**2*t4**7*t3**3*t5*t2**2+1&
+ &28._ki/3._ki*t6*t1**2*t4**8*t3**3*t5*t2-64._ki*t6*t1*t2**2*t3**4*t&
+ &4**8-308._ki*t6*t1**2*t4**3*t5*t2**6*t3**3-33._ki/2._ki*t6*t4**2*t&
+ &3**4*t2**8*t1+645._ki*t6*t1**3*t4**3*t5**2*t2**5*t3**2+10395._ki/&
+ &2._ki*t6**2*t1**5*t4**3*t3**2*t5*t2+425._ki/2._ki*t6*t1**3*t4**2*t&
+ &3**3*t2**6-425._ki*t6*t1**3*t4**2*t3**4*t2**4-35._ki*t6*t1**3*t4*&
+ &*5*t3**2*t2**5+40._ki*t6*t1**3*t4**4*t3**2*t2**6
+ !
+ stemp9=stemp11-215._ki/8._ki*t6*t1**3*t4**3*t3**2*t2**7+630._ki*t6**&
+ &2*t1**4*t4**5*t3*t5**2*t2**2-300._ki*t6**2*t1**4*t4**6*t3*t5**2*&
+ &t2+675._ki/2._ki*t6**2*t1**3*t4**4*t5*t2**4*t3**2+312._ki*t6**2*t1&
+ &**3*t4**6*t3**2*t5*t2**2-693._ki/4._ki*t6**2*t1**3*t4**3*t5*t2**5&
+ &*t3**2+414._ki*t6**2*t1**3*t4**5*t3**3*t2**2+84._ki*t6**2*t1**2*t&
+ &4**7*t3**3*t2**2-76._ki*t6**2*t1**2*t4**4*t3**3*t2**5-380._ki/3._k&
+ &i*t6**2*t1**2*t4**6*t3**3*t2**3-25._ki/2._ki*t1**4*t3**5*t2**3+4.&
+ &_ki*t1**5*t3*t2**9+40._ki*t6*t1**6*t3**3*t5*t2+9._ki*t6*t1**6*t4**&
+ &2*t5*t2**5-180._ki*t6*t1**6*t4**2*t5**3*t2**3+70._ki*t6*t1**6*t4*&
+ &*3*t5**4*t2-35._ki/2._ki*t6*t1**6*t4**3*t5**2*t2**3+330._ki*t4**2*&
+ &t3**2*t2**7*t1**3*t5**2+275._ki/6._ki*t3**3*t4*t2**8*t1**2*t5**2-&
+ &65._ki/4._ki*t3**4*t4*t2**9*t1*t5-375._ki*t1**5*t4*t5**4*t2**4*t3
+ !
+ stemp11=stemp9+30._ki*t1**5*t4*t3*t2**7*t5+625._ki*t1**4*t4**3*t3**&
+ &3*t5**2*t2**2-200._ki*t1**4*t4**4*t5**4*t3*t2**3-960._ki*t6*t1**3&
+ &*t4**4*t3**2*t5**2*t2**4+400._ki*t1**4*t4**4*t3**2*t5**3*t2**2+3&
+ &42._ki*t1**4*t4**2*t5*t2**6*t3**2+480._ki*t1**4*t4**4*t3**2*t5**2&
+ &*t2**3+1664._ki/3._ki*t6*t1**2*t4**6*t3**3*t5*t2**3+3._ki/2._ki*t1*&
+ &*3*t3**2*t4*t2**10-8._ki*t1**4*t4**4*t3**2*t2**5-57._ki/2._ki*t1**&
+ &4*t4**2*t3**2*t2**7+84._ki*t1**4*t4*t3**3*t2**6+7._ki*t1**5*t4**3&
+ &*t5*t2**7+414._ki*t1*t2**4*t3**5*t4**5-450._ki*t1*t2**5*t3**5*t4*&
+ &*4-88._ki*t1*t4**7*t3**4*t2**4+225._ki*t1*t4**4*t3**4*t2**7-276._k&
+ &i*t1*t4**5*t3**4*t2**6-231._ki/2._ki*t1*t4**3*t3**4*t2**8
+ !
+ stemp10=stemp11-208._ki*t1*t2**3*t3**5*t4**6-8._ki*t1**4*t4**4*t3*t&
+ &2**7+25._ki/2._ki*t1**4*t4**3*t3*t2**8+35._ki/2._ki*t1**4*t3**5*t2*&
+ &*2*t4+2._ki*t1**4*t4**5*t3*t2**6+25._ki*t1**4*t4**3*t3**2*t2**6-1&
+ &1._ki*t1**3*t4**4*t3**2*t2**7-150._ki*t1**3*t4*t3**4*t2**6+75._ki*&
+ &t1**3*t3**5*t2**4*t4+5._ki/4._ki*t3**4*t5*t2**10*t1-25._ki/6._ki*t3&
+ &**3*t5**2*t2**9*t1**2+t1**5*t5**2*t2**9-220._ki*t6*t4*t5*t2**6*t&
+ &3**3*t1**3+51._ki/4._ki*t6**2*t4**2*t3*t2**7*t1**4-10._ki*t1**5*t2&
+ &**3*t3**4-2._ki*t2**9*t3**5*t1-t1**5*t2**10*t5-20._ki*t1**4*t3**3&
+ &*t2**7+32._ki/3._ki*t2**2*t3**5*t4**9+6._ki*t1**5*t3**2*t2**7-152.&
+ &_ki*t4**4*t3**5*t2**7
+ !
+ stemp11=stemp10-10._ki*t1**5*t5**4*t2**7+25._ki*t3**4*t2**7*t1**3+1&
+ &68._ki*t2**4*t3**5*t4**7-35._ki/4._ki*t3**5*t2**7*t1**2-t1**3*t3**&
+ &2*t2**11/6._ki-5._ki/2._ki*t1**4*t3**2*t2**9-4._ki*t1**5*t5**3*t2**&
+ &8+50._ki*t1**4*t3**4*t2**5+35._ki/6._ki*t3**4*t2**9*t1**2+16._ki*t1&
+ &**5*t3**3*t2**5-64._ki*t2**3*t3**5*t4**8-t2**11*t1**2*t3**3/3._ki&
+ &-760._ki/3._ki*t2**5*t3**5*t4**6+5._ki/2._ki*t3**5*t4*t2**10-t1**4*&
+ &t3*t2**11/2._ki+242._ki*t4**5*t3**5*t2**6-33._ki/2._ki*t4**2*t3**5*&
+ &t2**9-152._ki*t6*t1*t4**4*t3**4*t2**6-760._ki/3._ki*t6*t1*t2**4*t3&
+ &**4*t4**6+377._ki/6._ki*t6*t1*t4**3*t3**4*t2**7
+ !
+ stemp7=stemp11+121._ki/2._ki*t6**2*t4**2*t2**6*t1**5*t5-605._ki/2._ki&
+ &*t6**2*t4**2*t5**3*t2**4*t1**5+165._ki/2._ki*t6**2*t4*t2**6*t3*t1&
+ &**5-765._ki/4._ki*t6**2*t4**2*t5**2*t2**5*t1**4*t3+219._ki/4._ki*t6&
+ &**2*t4**2*t5*t2**6*t1**3*t3**2-605._ki*t6**2*t1**5*t4**4*t5**3*t&
+ &2**2-400._ki*t6*t1**3*t4**6*t3**2*t5**2*t2**2+80._ki*t6*t1**3*t4*&
+ &*7*t3**2*t5**2*t2+825._ki/4._ki*t6**2*t1**4*t3**3*t2**4*t4+20._ki*&
+ &t6**2*t1**4*t4**6*t3*t2**3+48._ki*t6**2*t1**4*t4**4*t3*t2**5+60.&
+ &_ki*t6**2*t1**4*t4**7*t3*t5**2-720._ki*t6**2*t1**4*t4**4*t3**3*t2&
+ &-219._ki/2._ki*t6**2*t1**3*t4**2*t3**3*t2**5-208._ki*t6**2*t1**3*t&
+ &4**6*t3**3*t2+1155._ki/4._ki*t6**2*t1**3*t3**3*t4**3*t2**4-1935._k&
+ &i*t6**2*t1**4*t4**3*t5*t3**2*t2**3+1935._ki/4._ki*t6**2*t1**4*t4*&
+ &*3*t5**2*t2**4*t3-720._ki*t6**2*t1**4*t4**4*t5**2*t2**3*t3+275._k&
+ &i*t1**3*t4**4*t3**4*t2**2*t5-1100._ki*t1**3*t4**4*t3**3*t5**2*t2&
+ &**3+300._ki*t1**3*t4**5*t3**3*t5**2*t2**2
+ !
+ stemp11=stemp7-525._ki*t1**3*t4**3*t3**2*t5**3*t2**5+440._ki*t6*t4*&
+ &*2*t5**3*t2**5*t1**4*t3-255._ki/2._ki*t6*t4**2*t5*t3**2*t2**7*t1*&
+ &*3-1100._ki*t1**3*t4**2*t3**3*t5**2*t2**5+377._ki/6._ki*t4**3*t3**&
+ &5*t2**8-630._ki*t1**3*t4**3*t3**2*t5**2*t2**6+1260._ki*t1**3*t4**&
+ &3*t3**3*t2**5*t5-880._ki*t1**3*t4**2*t3**3*t2**6*t5+660._ki*t1**3&
+ &*t4**4*t3**2*t5**2*t2**5-360._ki*t1**3*t4**5*t3**2*t5**2*t2**4-1&
+ &26._ki*t1**3*t3**2*t4**3*t5*t2**7+16._ki*t1**3*t3**2*t4**6*t5*t2*&
+ &*4-1260._ki*t6**2*t1**4*t4**5*t3**2*t5*t2-42._ki*t6**2*t1**4*t4**&
+ &5*t3*t2**4-66._ki*t6**2*t1**5*t4**5*t5*t2**3+66._ki*t6**2*t1**5*t&
+ &4**5*t3*t2**2+300._ki*t6**2*t1**4*t4**6*t3**2*t5-129._ki/4._ki*t6*&
+ &*2*t1**4*t4**3*t3*t2**6+1935._ki/2._ki*t6**2*t1**4*t4**3*t3**3*t2&
+ &**2
+ !
+ stemp10=stemp11-5._ki*t6*t3**2*t5**2*t2**8*t1**3+4._ki/3._ki*t6*t3**&
+ &3*t5*t2**9*t1**2+40._ki/3._ki*t6*t3*t5**3*t2**7*t1**4+10._ki*t6*t3&
+ &*t2**8*t1**4*t5**2-10395._ki/2._ki*t6**2*t1**5*t4**3*t3*t5**2*t2*&
+ &*2+3630._ki*t6**2*t1**5*t4**4*t3*t5**2*t2-105._ki*t6**2*t1**6*t2*&
+ &*4*t3*t4-40._ki*t6**2*t1**6*t4**4*t5*t2**2+1575._ki*t6**2*t1**6*t&
+ &4*t3*t5**2*t2**2+1425._ki/2._ki*t6**2*t1**6*t4**2*t5**3*t2**2-625&
+ &._ki*t6**2*t1**6*t4**3*t5**3*t2-125._ki/2._ki*t6**2*t1**6*t2**2*t3&
+ &*t4**3+121._ki*t6**2*t1**5*t4**4*t5*t2**4+330._ki*t6**2*t1**5*t4*&
+ &*5*t5**3*t2-75._ki*t6**2*t1**7*t4*t3*t5**2-800._ki/3._ki*t1**2*t4*&
+ &*6*t3**3*t5*t2**4-700._ki*t1**2*t4**5*t3**4*t5*t2**3-640._ki*t1**&
+ &2*t4**4*t3**3*t5*t2**6-1075._ki*t1**2*t4**3*t3**4*t5*t2**5-1000.&
+ &_ki/3._ki*t1**2*t4**6*t3**3*t5**2*t2**3
+ !
+ stemp11=stemp10+365._ki/4._ki*t4**2*t5*t2**8*t1*t3**4-170._ki*t4**2*&
+ &t5*t3**3*t2**8*t1**2-1425._ki*t1**4*t4**2*t3**3*t2**3*t5**2+16._k&
+ &i*t1**4*t4**4*t3*t2**6*t5-350._ki*t1**4*t3**4*t5*t2**3*t4+1050._k&
+ &i*t1**4*t4*t3**3*t2**4*t5**2-25._ki*t1**4*t4**3*t3*t2**7*t5-4._ki&
+ &*t1**4*t4**5*t3*t2**5*t5+500._ki*t1**4*t4**3*t3**3*t5*t2**3-1575&
+ &._ki/2._ki*t1**3*t4**3*t3**4*t2**3*t5-375._ki*t1**3*t4*t3**4*t2**5&
+ &*t5-72._ki*t1**3*t3**2*t4**5*t5*t2**5+1575._ki*t1**3*t4**3*t3**3*&
+ &t5**2*t2**4-540._ki*t1**5*t4**2*t3**2*t5**2*t2**3-2475._ki/2._ki*t&
+ &6**2*t4*t3*t2**4*t1**5*t5**2-832._ki/3._ki*t6*t1**2*t4**6*t3**4*t&
+ &2**2-2565._ki*t6*t1**5*t4**2*t3*t5**2*t2**4+475._ki/2._ki*t1**4*t4&
+ &**2*t3**4*t5*t2**2+1710._ki*t1**4*t4**2*t3**2*t5**2*t2**5+500._ki&
+ &*t1**4*t4**3*t5**3*t3*t2**5
+ !
+ stemp9=stemp11-320._ki*t1**4*t4**4*t5**3*t3*t2**4+150._ki*t1**4*t4*&
+ &*3*t3*t2**6*t5**2+24._ki*t1**4*t4**5*t3*t2**4*t5**2+420._ki*t6*t1&
+ &**3*t4**5*t3**2*t5*t2**4+840._ki*t1**4*t4*t3**3*t5*t2**5+75._ki/4&
+ &._ki*t6*t1**5*t4**3*t5*t2**6+14._ki*t1**5*t4**3*t5*t3*t2**5-36._ki&
+ &*t1**5*t4**2*t5*t3*t2**6+840._ki*t6*t1**3*t4**5*t3**2*t5**2*t2**&
+ &3+645._ki/2._ki*t6*t1**3*t4**3*t5*t3**2*t2**6-75._ki/2._ki*t6*t1**5&
+ &*t4**3*t3*t2**5-375._ki*t6*t1**5*t4**3*t5**4*t2**3-60._ki*t6*t1**&
+ &5*t4**5*t5**4*t2+2475._ki*t6**2*t1**5*t3**2*t2**3*t4*t5+693._ki/2&
+ &._ki*t6**2*t1**5*t4**3*t3*t2**4-1815._ki*t6**2*t1**5*t4**4*t3**2*&
+ &t5-242._ki*t6**2*t1**5*t4**2*t3*t2**5+1210._ki*t6**2*t1**5*t3**3*&
+ &t4**2*t2-800._ki*t1**2*t4**4*t3**3*t5**2*t2**5-1200._ki*t6*t1**4*&
+ &t4*t3**3*t5*t2**4+208._ki*t1*t4**6*t3**4*t2**5
+ !
+ stemp11=stemp9+216._ki*t1**5*t4**2*t5**2*t2**5*t3+180._ki*t1**5*t4*&
+ &t5*t2**5*t3**2+450._ki*t1**5*t4**2*t5**4*t3*t2**3-280._ki*t1**5*t&
+ &4**3*t3*t5**3*t2**3-300._ki*t1**3*t4**5*t3**2*t5**3*t2**3+200._ki&
+ &/3._ki*t1**3*t4**6*t3**2*t5**3*t2**2+550._ki*t1**3*t4**4*t3**2*t5&
+ &**3*t2**4+176._ki/3._ki*t6*t1**2*t4**7*t3**4*t2+520._ki*t1*t4**6*t&
+ &3**4*t5*t2**4+44._ki*t1*t2**2*t3**5*t4**7-219._ki/2._ki*t1*t2**7*t&
+ &3**5*t4**2+16._ki*t1*t4**8*t3**4*t2**3-7._ki*t1**5*t4**3*t3*t2**6&
+ &-20._ki*t1**5*t3**3*t2**4*t4-55._ki*t4*t3**4*t2**8*t1**2+28._ki*t1&
+ &**5*t4**3*t5**3*t2**5-140._ki*t1**4*t4*t3**4*t2**4+125._ki*t1**4*&
+ &t3**4*t5*t2**4+9._ki*t1**5*t4**2*t3**2*t2**5
+ !
+ stemp10=stemp11-114._ki*t1**4*t4**2*t3**3*t2**5+50._ki*t1**4*t3**3*&
+ &t4**3*t2**4+2._ki*t1**5*t4**4*t5**2*t2**5-110._ki*t1**3*t3**5*t2*&
+ &*3*t4**2-10._ki/3._ki*t3**3*t5*t2**10*t1**2+25._ki/3._ki*t3**2*t5**&
+ &3*t2**8*t1**3-315._ki*t1**3*t4**3*t3**4*t2**4-4._ki/3._ki*t1**3*t4&
+ &**6*t3**2*t2**5+110._ki*t1**3*t4**4*t3**4*t2**3-88._ki*t1**3*t4**&
+ &2*t3**3*t2**7+105._ki/2._ki*t1**3*t3**5*t2**2*t4**3+21._ki/2._ki*t1&
+ &**3*t4**3*t3**2*t2**8+6._ki*t1**3*t4**5*t3**2*t2**6+330._ki*t1**3&
+ &*t4**2*t3**4*t2**5+126._ki*t1**3*t4**3*t3**3*t2**6-88._ki*t1**3*t&
+ &4**4*t3**3*t2**5+24._ki*t1**3*t4**5*t3**3*t2**4+11._ki/6._ki*t6**2&
+ &*t2**8*t1**5*t5-55._ki/6._ki*t6**2*t5**3*t2**6*t1**5-25._ki/2._ki*t&
+ &6**2*t1**6*t5*t2**6-8._ki/3._ki*t6*t2**8*t1**2*t3**4
+ !
+ stemp11=stemp10+5._ki*t6*t2**8*t3**2*t1**4+10._ki*t6*t1**6*t5**2*t2&
+ &**6+2._ki*t6*t1**6*t5*t2**7-40._ki*t6*t1**6*t5**4*t2**4-40._ki*t6*&
+ &t1**6*t5**3*t2**5-21._ki/8._ki*t6*t1**5*t4*t2**9+15._ki/4._ki*t6*t2&
+ &**8*t3*t1**5+35._ki/6._ki*t6*t3**3*t2**8*t1**3-30._ki*t6**2*t1**7*&
+ &t5**3*t2**2+6._ki*t6**2*t1**7*t5*t2**4+25._ki*t6**2*t1**6*t3*t2**&
+ &5-105._ki/4._ki*t6**2*t3**3*t2**5*t1**4-3._ki*t6*t1**6*t3*t2**6+15&
+ &._ki/4._ki*t6*t1**6*t4*t2**7-2._ki*t6**2*t2**7*t3**3*t1**3-t6**2*t&
+ &3**3*t2**9*t1**2/12._ki-11._ki*t6**2*t2**7*t3*t1**5+125._ki/2._ki*t&
+ &6**2*t1**6*t5**3*t2**4-50._ki*t3**3*t5**2*t2**7*t1**3+11._ki/3._ki&
+ &*t4*t2**10*t1**2*t3**3
+ !
+ stemp8=stemp11-8._ki*t1**5*t4**4*t5**3*t2**4+30._ki*t4*t2**8*t3**3*&
+ &t1**3-13._ki/2._ki*t4*t3**4*t2**10*t1-25._ki/2._ki*t1**4*t5**4*t2**&
+ &7*t3-6._ki*t1**4*t3*t2**9*t5**2-20._ki*t1**4*t5**3*t3*t2**8+95._ki&
+ &*t1**4*t4**2*t3**4*t2**3-9._ki/2._ki*t6*t1**6*t4**2*t2**6-200._ki/&
+ &3._ki*t6*t1**4*t3**4*t2**4+10._ki*t6*t1**6*t3**2*t2**4-4._ki*t6**2&
+ &*t1**7*t3*t2**3-45._ki*t6**2*t1**7*t4**2*t5**3+175._ki/2._ki*t6**2&
+ &*t1**6*t3**3*t4-1155._ki/2._ki*t6**2*t1**5*t4**3*t3**3-125._ki/2._k&
+ &i*t6**2*t1**6*t3**3*t2+550._ki/3._ki*t6**2*t1**5*t2**3*t3**3-220.&
+ &_ki/3._ki*t6**2*t1**5*t4**6*t5**3+210._ki*t6**2*t1**4*t4**5*t3**3+&
+ &44._ki*t6**2*t1**3*t4**7*t3**3+16._ki/3._ki*t6**2*t1**2*t4**9*t3**&
+ &3+132._ki*t1**3*t3**2*t4**4*t5*t2**6-600._ki*t6*t1**5*t3**3*t5*t2&
+ &**3
+ !
+ stemp11=stemp8+375._ki/4._ki*t6*t1**5*t4**3*t3**2*t2**3+40._ki*t6*t1&
+ &**3*t4**7*t3**2*t5*t2**2-480._ki*t6*t1**3*t4**4*t3**2*t5*t2**5-2&
+ &00._ki*t6*t1**3*t4**6*t3**2*t5*t2**3-430._ki*t6*t1**3*t4**3*t3**3&
+ &*t2**5-11._ki*t6*t1**4*t4**4*t3*t2**6+210._ki*t6*t1**4*t4**3*t3**&
+ &4*t2+50._ki/3._ki*t6*t1**3*t4**6*t3**2*t2**4+200._ki/3._ki*t6*t1**3&
+ &*t4**6*t3**3*t2**2-40._ki/3._ki*t6*t1**4*t4**6*t3*t2**3*t5-480._ki&
+ &*t6*t1**4*t4**5*t5**3*t3*t2**2+880._ki*t6*t1**4*t4**4*t3**3*t5*t&
+ &2-480._ki*t6*t1**3*t4**4*t3**4*t2**2+416._ki/3._ki*t6*t1**2*t4**6*&
+ &t3**3*t2**4+377._ki/12._ki*t6**2*t1**2*t4**3*t3**3*t2**6+66._ki*t4&
+ &**2*t3**2*t2**8*t1**3*t5+96._ki*t1**4*t4**4*t5*t2**4*t3**2-300._k&
+ &i*t1**4*t4**3*t5*t2**5*t3**2+270._ki*t6*t1**6*t4**2*t3*t5**2*t2*&
+ &*2
+ !
+ stemp10=stemp11+75._ki*t6*t1**6*t4*t5*t2**4*t3+5130._ki*t6*t1**5*t4&
+ &**2*t3**2*t5**2*t2**2-2250._ki*t6*t1**5*t4**3*t3**2*t5**2*t2+225&
+ &0._ki*t6*t1**5*t4**3*t3*t5**2*t2**3-720._ki*t6*t1**5*t4**4*t3*t5*&
+ &*2*t2**2-375._ki*t6*t1**5*t4**3*t5**3*t2**4+21._ki/4._ki*t6*t1**5*&
+ &t4*t2**8*t5+3._ki/2._ki*t6*t1**4*t4*t3*t2**9-60._ki*t6*t1**5*t4**4&
+ &*t5**2*t2**4+292._ki/3._ki*t6*t4**2*t5*t2**7*t1**2*t3**3+552._ki*t&
+ &6*t1**2*t4**5*t3**4*t2**3+660._ki*t6*t1**4*t4**4*t3*t5**2*t2**4-&
+ &15._ki*t6**2*t1**7*t4*t5*t2**3+75._ki*t6**2*t1**7*t4*t5**3*t2-427&
+ &5._ki/2._ki*t6**2*t1**6*t4**2*t3*t5**2*t2-990._ki*t6**2*t1**5*t4**&
+ &5*t3*t5**2-825._ki*t6**2*t1**5*t3**3*t2**2*t4-242._ki*t6**2*t1**5&
+ &*t4**4*t3*t2**3-231._ki/2._ki*t6**2*t1**5*t4**3*t5*t2**5+450._ki*t&
+ &6*t4*t3**2*t2**6*t1**4*t5-255._ki*t6*t4**2*t5**2*t2**6*t1**3*t3*&
+ &*2
+ !
+ stemp11=stemp10-700._ki*t1**4*t4*t5**3*t2**5*t3**2-380._ki*t1**4*t4&
+ &**2*t3*t5**3*t2**6-114._ki*t1**4*t4**2*t5**2*t2**7*t3-475._ki/2._k&
+ &i*t1**4*t4**2*t3*t5**4*t2**5-175._ki*t1**5*t4**3*t3*t5**4*t2**2+&
+ &900._ki*t1**5*t4*t3**2*t5**2*t2**4-1140._ki*t1**4*t4**2*t3**3*t5*&
+ &t2**4+1155._ki/2._ki*t6**2*t1**5*t4**3*t5**3*t2**3+165._ki/2._ki*t6&
+ &**2*t4*t5**3*t2**5*t1**5-11._ki/4._ki*t6**2*t4*t2**8*t1**4*t3+850&
+ &._ki*t6*t1**3*t4**2*t3**3*t5*t2**5-220._ki*t1*t4**7*t3**4*t5*t2**&
+ &3+200._ki/3._ki*t1**2*t4**7*t3**3*t5**2*t2**2+560._ki*t1**2*t4**5*&
+ &t3**3*t5*t2**5+700._ki*t1**2*t4**5*t3**3*t5**2*t2**4-75._ki*t4*t5&
+ &**3*t2**7*t1**3*t3**2-425._ki/2._ki*t4**2*t5**2*t2**7*t1**2*t3**3&
+ &+375._ki*t6**2*t1**6*t3**2*t5*t2**2-108._ki*t1**5*t4**2*t3**2*t5*&
+ &t2**4-450._ki*t6**2*t1**3*t4**4*t3**3*t2**3
+ !
+ stemp9=stemp11-84._ki*t1**5*t4**3*t5**2*t2**4*t3-250._ki*t1**5*t4*t&
+ &3**3*t5**2*t2**2-450._ki*t1**5*t4**2*t5**3*t3**2*t2**2-200._ki*t1&
+ &**5*t4*t5*t3**3*t2**3+750._ki*t1**5*t4*t5**3*t3**2*t2**3+825._ki*&
+ &t1**3*t4**2*t3**4*t2**4*t5-1275._ki/2._ki*t6**2*t1**4*t4**2*t3**3&
+ &*t2**3-t6*t1**6*t2**8-880._ki*t1**3*t4**4*t3**3*t2**4*t5+240._ki*&
+ &t1**3*t4**5*t3**3*t2**3*t5+70._ki/3._ki*t6*t2**7*t3**3*t1**3*t5-1&
+ &1._ki/2._ki*t6*t1**4*t4**2*t3*t2**8+91._ki/3._ki*t6*t4*t3**4*t2**7*&
+ &t1**2+1680._ki*t6*t1**5*t4*t5**3*t2**4*t3+85._ki/8._ki*t6*t4**2*t3&
+ &**2*t2**8*t1**3+1260._ki*t6*t1**5*t4*t3*t5**2*t2**5-57._ki/4._ki*t&
+ &6*t1**5*t4**2*t5*t2**7-21._ki*t6*t1**5*t4*t3*t2**7+450._ki*t6*t1*&
+ &*5*t2**5*t3**2*t5-285._ki/4._ki*t6*t1**5*t4**2*t5**2*t2**6-5._ki/3&
+ &._ki*t6*t2**9*t1**4*t3*t5
+ !
+ stemp11=stemp9-184._ki*t6*t1**2*t4**5*t3**3*t2**5-1250._ki*t1**4*t4&
+ &**3*t3**2*t5**3*t2**3+80._ki*t1**4*t4**5*t5**3*t3*t2**3+50._ki*t1&
+ &**4*t4**5*t5**4*t3*t2**2+625._ki/2._ki*t1**4*t4**3*t5**4*t3*t2**4&
+ &-1500._ki*t1**4*t4**3*t3**2*t5**2*t2**4-96._ki*t1**4*t4**4*t3*t2*&
+ &*5*t5**2+10._ki*t6*t1**6*t3**3*t2**2-3._ki/2._ki*t6*t1**5*t4**5*t2&
+ &**5+6._ki*t6*t1**5*t4**4*t2**6-75._ki/8._ki*t6*t1**5*t4**3*t2**7+7&
+ &5._ki*t6*t1**5*t3**4*t2**2-150._ki*t6*t1**5*t3**3*t2**4+7._ki/4._ki&
+ &*t6*t1**6*t4**3*t2**5-15._ki*t6**2*t1**7*t3**2*t5+200._ki*t6**2*t&
+ &1**6*t4**4*t5**3-t6*t3**4*t2**10*t1/6._ki+57._ki/8._ki*t6*t1**5*t4&
+ &**2*t2**8-75._ki/2._ki*t6*t1**5*t3**2*t2**6
+ !
+ stemp10=stemp11-35._ki/2._ki*t6*t3**4*t2**6*t1**3+50._ki*t6*t3**3*t2&
+ &**6*t1**4-15._ki/4._ki*t6*t1**5*t5**2*t2**8+15._ki*t6*t1**5*t5**4*&
+ &t2**6+15._ki*t6*t1**5*t5**3*t2**7-3._ki/4._ki*t6*t1**5*t2**9*t5-t6&
+ &*t1**4*t3*t2**10/6._ki+5._ki/24._ki*t6*t2**10*t1**3*t3**2+t6*t3**3&
+ &*t2**10*t1**2/3._ki+t6**2*t2**9*t1**4*t3/4._ki-300._ki*t1**5*t3**2&
+ &*t5**3*t2**4-15._ki*t1**5*t4*t3*t2**8-90._ki*t1**5*t4**2*t5**4*t2&
+ &**5-72._ki*t1**5*t5*t3**2*t2**6-36._ki*t1**5*t4**2*t5**3*t2**6-25&
+ &0._ki*t1**4*t3**3*t5**2*t2**5+2._ki*t2**10*t1**3*t3**2*t5+10._ki*t&
+ &5**2*t3**2*t2**9*t1**3-17._ki*t4**2*t3**3*t2**9*t1**2-200._ki*t1*&
+ &*4*t3**3*t5*t2**6+14._ki*t1**4*t4*t3**2*t2**8
+ !
+ stemp11=stemp10-19._ki/2._ki*t1**4*t4**2*t3*t2**9-11._ki/2._ki*t1**3*&
+ &t4**2*t3**2*t2**9-40._ki*t5*t3**3*t2**8*t1**3+50._ki*t1**5*t4*t5*&
+ &*4*t2**6+5._ki*t1**5*t4*t2**9*t5+20._ki*t1**5*t4*t5**3*t2**7-5._ki&
+ &*t1**5*t2**8*t4*t5**2+25._ki*t1**5*t4*t5**5*t2**5+48._ki*t1**5*t3&
+ &*t5**2*t2**7+160._ki*t1**5*t3*t5**3*t2**6+100._ki*t1**5*t5**4*t2*&
+ &*5*t3-8._ki*t1**5*t5*t3*t2**8+175._ki/12._ki*t2**8*t3**4*t1**2*t5+&
+ &91._ki/4._ki*t4*t3**5*t2**8*t1+125._ki/2._ki*t5*t2**6*t3**4*t1**3-4&
+ &5._ki*t1**5*t4**2*t5**5*t2**4-9._ki*t1**5*t4**2*t2**8*t5-360._ki*t&
+ &1**5*t3**2*t2**5*t5**2+9._ki*t1**5*t4**2*t5**2*t2**7+t1**4*t3*t2&
+ &**10*t5
+ !
+ stemp6=stemp11+645._ki*t6*t1**3*t4**3*t3**4*t2**3+140._ki*t6*t1**3*&
+ &t4**5*t3**4*t2+275._ki/2._ki*t6*t1**3*t3**4*t4*t2**5-10._ki/3._ki*t&
+ &6*t1**3*t4**7*t3**2*t2**3-280._ki*t6*t1**3*t4**5*t3**3*t2**3+480&
+ &._ki*t6*t1**3*t4**4*t3**3*t2**4+168._ki*t6*t1*t2**3*t3**4*t4**7+3&
+ &2._ki/3._ki*t6*t1*t2*t3**4*t4**9-2520._ki*t6*t1**4*t4**3*t3**3*t2*&
+ &*2*t5-1320._ki*t6*t1**4*t4**2*t3**2*t5*t2**5-360._ki*t6*t1**4*t4*&
+ &*5*t3*t5**2*t2**3+360._ki*t6*t1**6*t4**2*t5**3*t2*t3-45._ki*t6*t1&
+ &**6*t4**2*t5*t2**3*t3-105._ki*t6*t1**5*t4*t5**3*t2**6+105._ki/4._k&
+ &i*t6*t1**5*t4*t5**2*t2**7+75._ki/2._ki*t6*t1**5*t5*t2**7*t3+105._k&
+ &i/4._ki*t6**2*t2**6*t3**2*t1**4*t5-375._ki*t6**2*t1**6*t3*t5**2*t&
+ &2**3-350._ki*t6**2*t1**6*t4*t5**3*t2**3+70._ki*t6**2*t1**6*t4*t5*&
+ &t2**5-825._ki/2._ki*t6**2*t5*t2**4*t3**2*t1**5+91._ki/4._ki*t6**2*t&
+ &4*t3**3*t2**6*t1**3
+ !
+ stemp7=t6/t1**5/t2**12
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp5=-t4*t2**8*t5/6._ki+t4**2*t5*t2**7/12._ki+25._ki/4._ki*t6**3*t4&
+ &**2*t2**5+t4*t3*t2**7/6._ki-13._ki/2._ki*t6**2*t4**2*t2**6-95._ki/3&
+ &._ki*t6**3*t3**2*t4**3+7._ki/12._ki*t6**2*t5*t2**7-2._ki*t6**3*t4*t&
+ &2**6-t6*t4**3*t2**6/2._ki-2._ki/3._ki*t6**3*t5*t2**6+25._ki/3._ki*t6&
+ &**3*t2**3*t3**2+10._ki/3._ki*t6**3*t2**5*t3+6._ki*t6**2*t4**3*t2**&
+ &5-24._ki*t6**3*t1*t4**3*t5*t2-26._ki*t6**3*t1*t2*t3*t4**2+8._ki*t6&
+ &**3*t1**2*t5*t2*t4-35._ki/6._ki*t6**2*t1*t4**2*t5*t2**3+28._ki/3._k&
+ &i*t6**2*t1*t4*t5*t2**4+65._ki*t6**2*t4**2*t5**2*t3*t2**2-30._ki*t&
+ &6**2*t4**3*t5**2*t3*t2+7._ki/12._ki*t6**2*t1**2*t5*t2**3-5._ki/6._k&
+ &i*t6**2*t1**2*t2*t5**3+7._ki/2._ki*t6**2*t1*t2**4*t3-5._ki*t6**2*t&
+ &2*t3**3*t4-15._ki*t6**2*t2**3*t3**2*t5-10._ki*t6**3*t1*t3**2*t2+1&
+ &5._ki*t6**3*t3**2*t1*t4+125._ki/2._ki*t6**3*t3**2*t2*t4**2-40._ki*t&
+ &6**3*t2**2*t3**2*t4
+ !
+ stemp4=stemp5-39._ki/2._ki*t6**3*t1*t4**2*t2**3+27._ki/2._ki*t6**3*t1&
+ &*t4*t2**4+30._ki*t6**3*t1*t4**3*t5**2-12._ki*t6**3*t1*t2**3*t3+7.&
+ &_ki*t6**2*t4**3*t3*t2**3+21._ki/2._ki*t6**2*t4*t3*t2**5+8._ki*t6**3&
+ &*t1*t5*t2**4-10._ki*t6**3*t1*t5**2*t2**3-7._ki/2._ki*t6**2*t2**6*t&
+ &4*t5+5._ki*t6**2*t4*t5**3*t2**4-7._ki/2._ki*t6**2*t1*t5*t2**5+5._ki&
+ &*t6**2*t1*t5**3*t2**3+10._ki*t6**2*t3*t5**2*t2**4+10._ki*t6**2*t4&
+ &**3*t5**3*t2**2-10._ki/3._ki*t6**2*t4**4*t5**3*t2-65._ki/6._ki*t6**&
+ &2*t4**2*t5**3*t2**3+16._ki/3._ki*t6**3*t4*t5*t2**5+5._ki*t6**2*t1*&
+ &t4**2*t2**4-8._ki*t6**2*t1*t4*t2**5+t6*t4*t2**6*t1/2._ki+10._ki/3.&
+ &_ki*t6**2*t2**2*t3**3-t6*t4*t2**8-20._ki/3._ki*t6**3*t4**5*t5**2-1&
+ &9._ki/2._ki*t6**3*t4**3*t2**4+9._ki/4._ki*t6**3*t1**2*t2**3-2._ki*t6&
+ &**3*t4**5*t2**2-2._ki*t6**2*t4**4*t2**4+7._ki*t6**3*t4**4*t2**3-t&
+ &1**2*t2**4*t6**2/2._ki
+ !
+ stemp5=stemp4+5._ki/4._ki*t6*t4**2*t2**7-7._ki/3._ki*t6**2*t3*t2**6+3&
+ &._ki*t6**2*t4*t2**7+3._ki*t6**2*t1*t2**6-t6*t1*t2**7/2._ki-3._ki*t6&
+ &**3*t1*t2**5+5._ki/6._ki*t6**3*t5**2*t2**5-5._ki/6._ki*t6**2*t5**3*&
+ &t2**5+20._ki*t6**2*t1*t2*t3*t4*t5**2+5._ki*t6**2*t1*t2*t5*t3**2-1&
+ &4._ki/3._ki*t6**2*t1*t2**3*t3*t4-15._ki*t6**2*t1*t5**2*t3*t2**2-65&
+ &._ki/2._ki*t6**2*t2*t3**2*t4**2*t5+45._ki*t6**2*t3**2*t4*t5*t2**2+&
+ &160._ki/3._ki*t6**3*t4*t3*t5*t2**3+30._ki*t6**3*t1*t3*t5*t2**2+65.&
+ &_ki*t6**3*t1*t4**2*t3*t5-t3*t2**8/6._ki+t2**9*t5/12._ki-t6**2*t2**&
+ &8/2._ki+t6*t2**9/4._ki+t6**3*t2**7/4._ki-45._ki*t6**2*t4*t5**2*t3*t&
+ &2**3-40._ki/3._ki*t6**2*t1*t4*t5**3*t2**2+25._ki/3._ki*t6**2*t1*t4*&
+ &*2*t5**3*t2-65._ki*t6**3*t1*t4**2*t5**2*t2+36._ki*t6**3*t1*t2**2*&
+ &t3*t4+52._ki*t6**3*t1*t4**2*t5*t2**2
+ !
+ stemp3=stemp5-36._ki*t6**3*t1*t4*t5*t2**3-125._ki*t6**3*t4**2*t3*t5&
+ &*t2**2+380._ki/3._ki*t6**3*t4**3*t3*t5*t2-90._ki*t6**3*t1*t3*t5*t2&
+ &*t4+45._ki*t6**3*t1*t4*t5**2*t2**2-5._ki*t6**3*t1**2*t3*t5-3._ki*t&
+ &6**3*t1**2*t2**2*t4+56._ki/3._ki*t6**3*t4**4*t3*t2+50._ki*t6**3*t4&
+ &**2*t3*t2**3+70._ki/3._ki*t6**3*t4**4*t5**2*t2-152._ki/3._ki*t6**3*&
+ &t4**3*t3*t2**2-64._ki/3._ki*t6**3*t4*t3*t2**4-95._ki/3._ki*t6**3*t4&
+ &**3*t5**2*t2**2+9._ki*t6**3*t1*t4**3*t2**2+16._ki/3._ki*t6**3*t4**&
+ &5*t5*t2+125._ki/6._ki*t6**3*t4**2*t5**2*t2**3+76._ki/3._ki*t6**3*t4&
+ &**3*t5*t2**3-56._ki/3._ki*t6**3*t4**4*t5*t2**2-50._ki/3._ki*t6**3*t&
+ &4**2*t5*t2**4-140._ki/3._ki*t6**3*t4**4*t3*t5-10._ki*t6**3*t1**2*t&
+ &5**2*t4+15._ki/2._ki*t6**3*t1**2*t5**2*t2+2._ki*t6**3*t1**2*t2*t3-&
+ &25._ki/3._ki*t6**3*t3*t2**4*t5-20._ki/3._ki*t6**3*t4*t5**2*t2**4-6.&
+ &_ki*t6**3*t1**2*t5*t2**2-91._ki/6._ki*t6**2*t4**2*t3*t2**4+91._ki/1&
+ &2._ki*t6**2*t4**2*t5*t2**5-7._ki*t6**2*t4**3*t5*t2**4+7._ki/3._ki*t&
+ &6**2*t4**4*t5*t2**3
+ !
+ stemp4=1._ki/t2**10*z_log(t1*t6/t2**2,1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(-t4+t2)*(t3*t5*t2**2+3._ki*t3*t6*t2**2-t3*t5*t2*t4-4._ki*t&
+ &5*t2*t1*t6-9._ki*t6*t4*t2*t3-2._ki*t3**2*t2+6._ki*t4**2*t3*t6+4._ki&
+ &*t4*t1*t6*t5+2._ki*t3*t1*t6)/t3/t2**4*q(4,(t2*t3-t1*t6)/t2/t3,si&
+ &gn_arg)/12._ki
+ !
+ stemp9=-125._ki/6._ki*t6**2*t1**2*t3**3*t4**2*t2**2-40._ki/3._ki*t6**&
+ &2*t1*t4**5*t3**2*t5*t2**2+10._ki/3._ki*t6**2*t1*t4**6*t3**2*t5*t2&
+ &+65._ki/3._ki*t6**2*t1*t4**4*t3**2*t5*t2**3+55._ki/3._ki*t6**2*t1*t&
+ &2**3*t3**3*t4**3+195._ki/2._ki*t6**2*t1**3*t4**2*t5**2*t3*t2**2-4&
+ &5._ki*t6**2*t1**3*t4**3*t5**2*t3*t2-195._ki/4._ki*t6**2*t1**3*t3**&
+ &2*t5*t2*t4**2+135._ki/2._ki*t6**2*t1**3*t3**2*t5*t2**2*t4+21._ki/2&
+ &._ki*t6**2*t1**3*t4**3*t3*t2**3-35._ki/12._ki*t6**2*t1**4*t4**2*t5&
+ &*t2**3-20._ki/3._ki*t6**2*t1**4*t4*t5**3*t2**2-7._ki/3._ki*t6**2*t1&
+ &**4*t2**3*t3*t4+10._ki*t6**2*t1**4*t5**2*t3*t2*t4+5._ki/2._ki*t6**&
+ &2*t1**4*t3**2*t5*t2-15._ki/2._ki*t6**2*t1**4*t5**2*t3*t2**2-25._ki&
+ &/12._ki*t6**2*t1*t4*t3**2*t2**6*t5-14._ki/9._ki*t6**2*t1**2*t4*t3*&
+ &t2**7+25._ki/6._ki*t6**2*t1**2*t2**5*t3**2*t5+125._ki/12._ki*t6**3*&
+ &t1**2*t4*t3**2*t2**4-21._ki/4._ki*t6**2*t1**3*t2**6*t4*t5+205._ki/&
+ &12._ki*t6**3*t1**2*t4**2*t5*t2**4*t3
+ !
+ stemp8=stemp9-25._ki/3._ki*t6**3*t1**4*t5**2*t2**3-7._ki/2._ki*t6**2*&
+ &t1**3*t3*t2**6+5._ki/2._ki*t6**2*t1**4*t5**3*t2**3-7._ki/4._ki*t6**&
+ &2*t1**4*t5*t2**5+9._ki/2._ki*t6**2*t1**3*t4*t2**7-t6*t1**3*t4*t2*&
+ &*8-61._ki/36._ki*t6**2*t2**6*t3**3*t4**2-5._ki/12._ki*t6**2*t1*t2**&
+ &6*t3**3+85._ki/18._ki*t6**2*t2**5*t3**3*t4**3+55._ki/36._ki*t6**3*t&
+ &1**3*t5**2*t2**5-11._ki/9._ki*t6**3*t1**3*t5*t2**6+55._ki/9._ki*t6*&
+ &*3*t1**3*t2**5*t3-11._ki/3._ki*t6**3*t1**3*t4*t2**6-t6**3*t1**2*t&
+ &2**7*t3/6._ki-5._ki/4._ki*t6**2*t1**3*t5**3*t2**5+7._ki/8._ki*t6**2*&
+ &t1**3*t5*t2**7+63._ki/4._ki*t6**2*t1**3*t4*t3*t2**5-15._ki/2._ki*t6&
+ &**2*t1**3*t3**3*t2*t4+95._ki/3._ki*t6**2*t1**2*t4**3*t3*t5**2*t2*&
+ &*3-125._ki/6._ki*t6**2*t1**2*t4**2*t3*t5**2*t2**4-80._ki/3._ki*t6**&
+ &2*t1**2*t4*t3**2*t5*t2**4+40._ki/3._ki*t6**2*t1**2*t4*t3**3*t2**3&
+ &+175._ki/36._ki*t6**2*t1**2*t4**2*t3*t2**6
+ !
+ stemp9=stemp8+49._ki/9._ki*t6**2*t1**2*t4**4*t3*t2**4+3._ki/2._ki*t6*&
+ &*2*t1**4*t2**6+3._ki/4._ki*t6**3*t1**5*t2**3-t1**3*t3*t2**8/18._ki&
+ &+t6*t1**3*t2**9/4._ki-5._ki/2._ki*t6**3*t1**4*t2**5-t6**2*t2**8*t3&
+ &**3/36._ki+t1**3*t2**9*t5/9._ki+11._ki/24._ki*t6**3*t1**3*t2**7+275&
+ &._ki/18._ki*t6**3*t1**3*t3**2*t2**3-110._ki/9._ki*t6**3*t1**3*t4**5&
+ &*t5**2-1045._ki/18._ki*t6**3*t1**3*t3**2*t4**3+275._ki/24._ki*t6**3&
+ &*t1**3*t4**2*t2**5+77._ki/6._ki*t6**3*t1**3*t4**4*t2**3+5._ki*t6**&
+ &2*t1**3*t3**3*t2**2+5._ki/2._ki*t6**2*t1**4*t4**2*t2**4+7._ki/4._ki&
+ &*t6**2*t1**4*t2**4*t3-5._ki/4._ki*t6**3*t1**2*t3**2*t2**5+t6**2*t&
+ &2**7*t3**3*t4/3._ki+20._ki/3._ki*t6**3*t1**4*t5*t2**4-25._ki/9._ki*t&
+ &6**2*t1**2*t3**3*t2**4-t6**3*t1*t3**2*t2**7/24._ki
+ !
+ stemp7=stemp9-70._ki/9._ki*t6**2*t4**4*t3**3*t2**4+68._ki/9._ki*t6**2&
+ &*t4**5*t3**3*t2**3-4._ki*t6**2*t4**6*t3**3*t2**2+8._ki/9._ki*t6**2&
+ &*t4**7*t3**3*t2-4._ki*t6**2*t1**4*t4*t2**5-39._ki/4._ki*t6**2*t1**&
+ &3*t4**2*t2**6-3._ki*t6**2*t1**3*t4**4*t2**4+9._ki*t6**2*t1**3*t4*&
+ &*3*t2**5-t6*t1**3*t4**3*t2**6/2._ki+5._ki/4._ki*t6*t1**3*t4**2*t2*&
+ &*7+2090._ki/9._ki*t6**3*t1**3*t4**3*t3*t5*t2+1375._ki/12._ki*t6**3*&
+ &t1**3*t3**2*t4**2*t2+1375._ki/36._ki*t6**3*t1**3*t4**2*t5**2*t2**&
+ &3+275._ki/3._ki*t6**3*t1**3*t4**2*t3*t2**3-836._ki/9._ki*t6**3*t1**&
+ &3*t4**3*t3*t2**2+308._ki/9._ki*t6**3*t1**3*t4**4*t3*t2-45._ki/2._ki&
+ &*t6**2*t1**3*t2**3*t3**2*t5-20._ki*t6**3*t1**4*t4**3*t5*t2-65._ki&
+ &/3._ki*t6**3*t1**4*t2*t3*t4**2+418._ki/9._ki*t6**3*t1**3*t4**3*t5*&
+ &t2**3+75._ki/2._ki*t6**3*t1**4*t4*t5**2*t2**2-308._ki/9._ki*t6**3*t&
+ &1**3*t4**4*t5*t2**2-220._ki/3._ki*t6**3*t1**3*t4*t3**2*t2**2
+ !
+ stemp9=stemp7-352._ki/9._ki*t6**3*t1**3*t4*t3*t2**4-770._ki/9._ki*t6*&
+ &*3*t1**3*t4**4*t3*t5-275._ki/9._ki*t6**3*t1**3*t4**2*t5*t2**4+5._k&
+ &i/24._ki*t6**2*t1*t2**7*t3**2*t5+20._ki/3._ki*t6**2*t1**2*t3*t5**2&
+ &*t2**5*t4-25._ki/6._ki*t6**3*t1**2*t4*t5*t2**5*t3+5._ki/3._ki*t6**3&
+ &*t1**2*t4*t3*t2**6+t6**3*t1*t4*t3**2*t2**6/2._ki+88._ki/9._ki*t6**&
+ &3*t1**3*t4**5*t5*t2+385._ki/9._ki*t6**3*t1**3*t4**4*t5**2*t2-1045&
+ &._ki/18._ki*t6**3*t1**3*t4**3*t5**2*t2**2-1375._ki/6._ki*t6**3*t1**&
+ &3*t4**2*t3*t5*t2**2-80._ki/3._ki*t6**3*t1**2*t4**5*t3*t5*t2+130._k&
+ &i/3._ki*t6**3*t1**2*t4**4*t3*t5*t2**2-110._ki/3._ki*t6**3*t1**2*t4&
+ &**3*t3*t5*t2**3-130._ki/3._ki*t6**3*t1**2*t4**4*t3**2*t2+880._ki/9&
+ &._ki*t6**3*t1**3*t4*t3*t5*t2**3+55._ki*t6**3*t1**2*t4**3*t3**2*t2&
+ &**2-133._ki/18._ki*t6**2*t1**2*t4**3*t3*t2**5+85._ki/12._ki*t6**3*t&
+ &1*t4**3*t3**2*t2**4+20._ki/3._ki*t6**2*t1**2*t4**5*t3*t5**2*t2+70&
+ &._ki/3._ki*t6**2*t1**2*t3**2*t4**4*t5*t2
+ !
+ stemp8=stemp9-14._ki/9._ki*t6**2*t1**2*t4**5*t3*t2**3-190._ki/3._ki*t&
+ &6**2*t1**2*t3**2*t4**3*t5*t2**2+125._ki/2._ki*t6**2*t1**2*t3**2*t&
+ &4**2*t5*t2**3+t1**3*t4*t3*t2**7/18._ki-2._ki/9._ki*t1**3*t4*t2**8*&
+ &t5+t1**3*t4**2*t5*t2**7/9._ki+7._ki/36._ki*t6**2*t1**2*t3*t2**8+40&
+ &._ki/3._ki*t6**3*t1**2*t4**5*t3**2+4._ki/3._ki*t6**3*t1*t4**7*t3**2&
+ &-5._ki/3._ki*t6**3*t1**5*t3*t5-t6**3*t1**5*t2**2*t4-10._ki/3._ki*t6&
+ &**3*t1**5*t5**2*t4+5._ki/2._ki*t6**3*t1**5*t5**2*t2-2._ki*t6**3*t1&
+ &**5*t5*t2**2+2._ki/3._ki*t6**3*t1**5*t2*t3+15._ki/2._ki*t6**3*t1**4&
+ &*t4**3*t2**2-65._ki/4._ki*t6**3*t1**4*t4**2*t2**3+45._ki/4._ki*t6**&
+ &3*t1**4*t4*t2**4+25._ki/2._ki*t6**3*t1**4*t3**2*t4+25._ki*t6**3*t1&
+ &**4*t4**3*t5**2-10._ki*t6**3*t1**4*t2**3*t3-25._ki/3._ki*t6**3*t1*&
+ &*4*t3**2*t2-209._ki/12._ki*t6**3*t1**3*t4**3*t2**4
+ !
+ stemp9=stemp8-11._ki/3._ki*t6**3*t1**3*t4**5*t2**2+32._ki/3._ki*t6**3&
+ &*t1**2*t4**5*t3*t2**2-3._ki/4._ki*t6**2*t1**3*t2**8-70._ki/3._ki*t6&
+ &**2*t1**2*t4**4*t3*t5**2*t2**2+40._ki/9._ki*t6**2*t1*t4**5*t3**3*&
+ &t2-130._ki/9._ki*t6**2*t1*t4**4*t3**3*t2**2+88._ki/9._ki*t6**3*t1**&
+ &3*t4*t5*t2**5-110._ki/9._ki*t6**3*t1**3*t4*t5**2*t2**4-205._ki/18.&
+ &_ki*t6**2*t1*t2**4*t3**3*t4**2+14._ki/3._ki*t6**2*t1**4*t4*t5*t2**&
+ &4+25._ki/6._ki*t6**2*t1**4*t4**2*t5**3*t2+15._ki/2._ki*t6**2*t1**3*&
+ &t4*t5**3*t2**4+15._ki*t6**2*t1**3*t3*t5**2*t2**4+125._ki/36._ki*t6&
+ &**2*t1*t2**5*t3**3*t4+205._ki/24._ki*t6**2*t1*t4**2*t3**2*t2**5*t&
+ &5+5._ki/12._ki*t6**3*t1**2*t2**6*t3*t5-5._ki/6._ki*t6**2*t1**2*t3*t&
+ &5**2*t2**6-91._ki/4._ki*t6**2*t1**3*t4**2*t3*t2**4+91._ki/8._ki*t6*&
+ &*2*t1**3*t4**2*t5*t2**5-21._ki/2._ki*t6**2*t1**3*t4**3*t5*t2**4+7&
+ &._ki/2._ki*t6**2*t1**3*t4**4*t5*t2**3-55._ki/3._ki*t6**2*t1*t4**3*t&
+ &3**2*t5*t2**4
+ !
+ stemp6=stemp9+15._ki*t6**2*t1**3*t4**3*t5**3*t2**2-5._ki*t6**2*t1**&
+ &3*t4**4*t5**3*t2-65._ki/4._ki*t6**2*t1**3*t4**2*t5**3*t2**3-135._k&
+ &i/2._ki*t6**2*t1**3*t4*t5**2*t3*t2**3+95._ki/9._ki*t6**2*t1**2*t3*&
+ &*3*t4**3*t2-41._ki/6._ki*t6**3*t1**2*t4**2*t3*t2**5-325._ki/6._ki*t&
+ &6**3*t1**4*t4**2*t5**2*t2+30._ki*t6**3*t1**4*t2**2*t3*t4+130._ki/&
+ &3._ki*t6**3*t1**4*t4**2*t5*t2**2+325._ki/6._ki*t6**3*t1**4*t4**2*t&
+ &3*t5-75._ki*t6**3*t1**4*t3*t5*t2*t4-61._ki/24._ki*t6**3*t1*t4**2*t&
+ &3**2*t2**5-275._ki/18._ki*t6**3*t1**3*t3*t2**4*t5-30._ki*t6**3*t1*&
+ &*4*t4*t5*t2**3+44._ki/3._ki*t6**3*t1**2*t4**3*t3*t2**4-205._ki/6._k&
+ &i*t6**3*t1**2*t4**2*t3**2*t2**3+20._ki/3._ki*t6**3*t1**2*t4**6*t3&
+ &*t5-8._ki/3._ki*t6**3*t1**2*t4**6*t3*t2-52._ki/3._ki*t6**3*t1**2*t4&
+ &**4*t3*t2**3+34._ki/3._ki*t6**3*t1*t4**5*t3**2*t2**2+8._ki/3._ki*t6&
+ &**3*t1**5*t5*t2*t4-6._ki*t6**3*t1*t4**6*t3**2*t2-35._ki/3._ki*t6**&
+ &3*t1*t4**4*t3**2*t2**3+25._ki*t6**3*t1**4*t3*t5*t2**2
+ !
+ stemp7=1._ki/t1**3/t2**10
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ stemp2=-(-6._ki*t6*t2**5*t4*t5+4._ki*t6*t2**4*t4**2*t5+6._ki*t3*t4*t&
+ &6*t2**4+18._ki*t6**2*t1*t2**3*t4-96._ki*t6**3*t1*t5*t4**2-36._ki*t&
+ &1*t6**3*t2**2*t5+36._ki*t6**3*t3*t2*t1-60._ki*t6**3*t4*t1*t3-144.&
+ &_ki*t6**3*t3*t2*t4**2+84._ki*t6**3*t3*t2**2*t4-12._ki*t6**2*t1*t2*&
+ &*4+72._ki*t6**3*t2**2*t5*t4**2-80._ki*t6**3*t4**3*t5*t2-28._ki*t6*&
+ &*3*t2**3*t5*t4+12._ki*t6**3*t1**2*t5+4._ki*t6**3*t5*t2**4+2._ki*t6&
+ &*t2**6*t5+32._ki*t6**3*t4**4*t5-t4*t5**2*t2**5+120._ki*t1*t6**3*t&
+ &4*t5*t2-2._ki*t6*t1*t2**4*t5-12._ki*t6**2*t2**3*t4**3+80._ki*t6**3&
+ &*t3*t4**3-16._ki*t6**3*t3*t2**3+3._ki*t6**2*t2**6-4._ki*t6*t2**5*t&
+ &3-15._ki*t6**2*t2**5*t4+24._ki*t6**2*t2**4*t4**2-2._ki*t3*t5*t2**5&
+ &+t5**2*t2**6)/t2**8*z_log(t1*t6/t2**2,1._ki)/12._ki
+ !
+ stemp4=(-16._ki*t3*t4**2*t5*t6**2*t1+4._ki*t3**2*t4**2*t5*t2*t6-12.&
+ &_ki*t4**3*t3**2*t6**2+24._ki*t3*t4*t5*t2*t6**2*t1+4._ki*t2*t1*t6**&
+ &2*t3**2+4._ki*t3*t4*t5**2*t2*t1*t6-t3**2*t4*t5**2*t2**2+6._ki*t2*&
+ &t6*t3**3*t4-6._ki*t4*t5*t3**2*t6*t2**2-15._ki*t2**2*t4*t3**2*t6**&
+ &2+24._ki*t2*t4**2*t3**2*t6**2-8._ki*t3*t2**2*t6**2*t5*t1-6._ki*t1*&
+ &t6**2*t3**2*t4-4._ki*t6*t3**3*t2**2+6._ki*t2*t5*t1*t6*t3**2-2._ki*&
+ &t2**2*t5*t3**3-6._ki*t4*t5**2*t6**2*t1**2-4._ki*t5*t1**2*t6**2*t3&
+ &+3._ki*t3**2*t2**3*t6**2+2._ki*t5*t3**2*t6*t2**3+6._ki*t2*t5**2*t1&
+ &**2*t6**2-4._ki*t3*t2**2*t5**2*t1*t6+t3**2*t5**2*t2**3)/t3**2/t2&
+ &**5*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp7=-44._ki/9._ki*t6**3*t1*t3*t4**4*t5-t6*t1**2*t2**4*t5*t3/9._ki&
+ &-7._ki/9._ki*t6*t1*t2**4*t3*t4**2*t5+7._ki/6._ki*t6*t1*t2**5*t3*t4*&
+ &t5-11._ki/18._ki*t6**3*t1*t3*t5*t2**4-5._ki/2._ki*t6**3*t1**2*t2*t3&
+ &**2+4._ki/9._ki*t6*t1*t2**5*t3**2-3._ki/8._ki*t6**2*t2**6*t1*t3+t6*&
+ &t1**2*t2**5*t5**2/6._ki-t6**3*t3*t5*t1**3/3._ki+25._ki/6._ki*t6**3*&
+ &t1**2*t4*t3**2-77._ki/6._ki*t6**3*t1*t2**2*t4*t3**2-t6*t1**2*t2**&
+ &4*t4*t5**2/6._ki+5._ki/2._ki*t6**3*t1**2*t3*t2**2*t5+20._ki/3._ki*t6&
+ &**3*t1**2*t3*t5*t4**2-2._ki/3._ki*t6*t1*t4*t3**2*t2**4-25._ki/3._ki&
+ &*t6**3*t1**2*t3*t4*t5*t2+110._ki/9._ki*t6**3*t1*t3*t4**3*t5*t2+77&
+ &._ki/18._ki*t6**3*t1*t3*t2**3*t5*t4
+ !
+ stemp6=stemp7+22._ki*t6**3*t1*t2*t4**2*t3**2-110._ki/9._ki*t6**3*t1*&
+ &t4**3*t3**2+3._ki/4._ki*t6**3*t4*t3**2*t2**4+22._ki/9._ki*t6**3*t1*&
+ &t3**2*t2**3+t6**2*t1**2*t3*t2**4/2._ki-8._ki/3._ki*t6**3*t3**2*t2*&
+ &*3*t4**2+14._ki/3._ki*t6**3*t3**2*t2**2*t4**3-t6**3*t3**2*t2**5/1&
+ &2._ki-11._ki*t6**3*t1*t3*t2**2*t5*t4**2+4._ki/3._ki*t6**3*t3**2*t4*&
+ &*5+3._ki/2._ki*t6**2*t1*t3*t2**3*t4**3-7._ki/18._ki*t6*t1*t2**6*t3*&
+ &t5+15._ki/8._ki*t6**2*t1*t3*t2**5*t4+7._ki/36._ki*t1*t2**5*t3*t4*t5&
+ &**2-3._ki/4._ki*t6**2*t1**2*t3*t2**3*t4-3._ki*t6**2*t1*t3*t2**4*t4&
+ &**2-4._ki*t6**3*t3**2*t4**4*t2+2._ki/9._ki*t1*t2**5*t3**2*t5-7._ki/&
+ &36._ki*t1*t2**6*t3*t5**2
+ !
+ stemp7=1._ki/t1/t2**8/t3
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par3_glob)
+ !
+ case(4)
+ !
+ select case(par4_glob)
+ !
+ case(4)
+ !
+ stemp2=(-6._ki*t6**3*t1*t2+12._ki*t6**3*t1*t4+t6**3*t2**3-8._ki*t6**&
+ &3*t4**3+12._ki*t6**3*t4**2*t2-6._ki*t6**3*t2**2*t4-2._ki*t6**2*t1*&
+ &t5*t2+4._ki*t6**2*t5*t2*t4**2+4._ki*t6**2*t2*t3*t4+t6**2*t5*t2**3&
+ &-4._ki*t6**2*t5*t2**2*t4-2._ki*t6**2*t2**2*t3+t6*t2**3*t5**2-2._ki&
+ &*t6*t4*t5**2*t2**2-2._ki*t6*t2**2*t3*t5+t5**3*t2**3)/t2**6*z_log&
+ &(t1*t6/t2**2,1._ki)/4._ki
+ !
+ stemp3=-(-2._ki*t1*t6*t5+t3*t6*t2+t3*t2*t5-2._ki*t6*t3*t4)*(t3**2*t&
+ &6**2*t2**2-4._ki*t3**2*t6**2*t4*t2-2._ki*t3*t1*t6**2*t5*t2+2._ki*t&
+ &3**2*t1*t6**2+4._ki*t3**2*t6**2*t4**2+4._ki*t3*t6**2*t4*t1*t5+2._k&
+ &i*t6**2*t1**2*t5**2-2._ki*t2*t3**3*t6-2._ki*t6*t1*t3*t5**2*t2+t3*&
+ &*2*t5**2*t2**2)/t2**6/t3**3*q(4,(t2*t3-t1*t6)/t2/t3,sign_arg)/4&
+ &._ki+(60._ki*t6**3*t3**2*t1*t4-30._ki*t6**3*t1*t3**2*t2+11._ki*t6**&
+ &3*t2**3*t3**2-88._ki*t6**3*t3**2*t4**3-66._ki*t6**3*t2**2*t3**2*t&
+ &4+132._ki*t6**3*t3**2*t2*t4**2+8._ki*t6**2*t1**2*t2*t5**3-12._ki*t&
+ &6**2*t1*t5**2*t3*t2**2+24._ki*t6**2*t1*t2*t3*t4*t5**2+2._ki*t6**2&
+ &*t1*t2*t5*t3**2-68._ki*t6**2*t3**2*t4*t5*t2**2+44._ki*t6**2*t2*t3&
+ &**3*t4+68._ki*t6**2*t2*t3**2*t4**2*t5-22._ki*t6**2*t2**2*t3**3+17&
+ &._ki*t6**2*t2**3*t3**2*t5-16._ki*t6*t1*t3*t2**2*t5**3-40._ki*t6*t3&
+ &**2*t2**2*t4*t5**2+20._ki*t6*t3**2*t2**3*t5**2-28._ki*t6*t3**3*t2&
+ &**2*t5+22._ki*t3**2*t2**3*t5**3)/t3**2/t2**6/24._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ end if
+ !
+ else if (dim_glob == "n+4") then
+ if (nb_par == 0) then
+ !
+ temp0=(-1._ki/6._ki*(-4._ki*t6**2*t1*t3+4._ki*t6**2*t1*t5*t2-8._ki*t5*&
+ &t4*t6**2*t1-2._ki*t6**2*t1*t2**2+4._ki*t6**2*t1*t2*t4+2._ki*t6**2*&
+ &t3*t2**2-8._ki*t6**2*t3*t2*t4+8._ki*t6**2*t3*t4**2+2._ki*t2**3*t1*&
+ &t6+t2**4*t3)/t2**5*z_log(-t1*t6/t2**2,-1._ki)+1._ki/6._ki*t3/t2*q(&
+ &2,(t2*t3-t1*t6)/t2/t3,sign_arg)-1._ki/6._ki*(-2._ki*t1*t3+2._ki*t1*&
+ &t2*t4+2._ki*t1*t5*t2-4._ki*t1*t5*t4-t1*t2**2+12._ki*t3*t4**2-12._ki&
+ &*t3*t2*t4+3._ki*t3*t2**2)*t6**2/t2**5)/t2
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4_glob)
+ !
+ case(1)
+ !
+ stemp2=(9._ki*t1**2*t5*t6**3-3._ki*t1**2*t6**3*t2+3._ki*t1*t6**3*t2*&
+ &*3-36._ki*t1*t5*t6**3*t4**2+12._ki*t1*t6**3*t2*t4**2-12._ki*t1*t6*&
+ &*3*t2**2*t4+36._ki*t1*t5*t6**3*t2*t4+18._ki*t1*t3*t6**3*t2-36._ki*&
+ &t1*t3*t6**3*t4-9._ki*t1*t5*t6**3*t2**2-3._ki*t1*t2**4*t6**2+6._ki*&
+ &t1*t2**3*t6**2*t4-t1*t5*t2**4*t6-t1*t2**5*t6-3._ki*t3*t6**3*t2**&
+ &3+24._ki*t3*t6**3*t4**3+18._ki*t3*t6**3*t2**2*t4-36._ki*t3*t6**3*t&
+ &2*t4**2-t3*t2**5*t6+2._ki*t3*t2**4*t6*t4-t3*t2**6-t3*t5*t2**5)/t&
+ &2**7*z_log(-t1*t6/t2**2,-1._ki)/12._ki
+ !
+ stemp3=-(2._ki*t5*t1*t6-t3*t5*t2+2._ki*t2*t1*t6-t3*t2*t6+2._ki*t3*t6&
+ &*t4-t3*t2**2)/t2**3*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki+(-2&
+ &._ki*t1**2*t6**3*t2+6._ki*t1**2*t5*t6**3-15._ki*t1*t5*t6**3*t2**2-&
+ &20._ki*t1*t6**3*t2**2*t4+60._ki*t1*t5*t6**3*t2*t4-60._ki*t1*t5*t6*&
+ &*3*t4**2+30._ki*t1*t3*t6**3*t2-60._ki*t1*t3*t6**3*t4+20._ki*t1*t6*&
+ &*3*t2*t4**2+5._ki*t1*t6**3*t2**3-3._ki*t1*t2**4*t6**2+6._ki*t1*t2*&
+ &*3*t6**2*t4-132._ki*t3*t6**3*t2*t4**2+66._ki*t3*t6**3*t2**2*t4+88&
+ &._ki*t3*t6**3*t4**3-11._ki*t3*t6**3*t2**3-2._ki*t3*t2**5*t6+4._ki*t&
+ &3*t2**4*t6*t4-2._ki*t3*t2**6-2._ki*t3*t5*t2**5)/t2**7/24._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(2)
+ !
+ stemp4=-6._ki*t6**2*t4**2*t5**2*t3*t2**2-9._ki*t6**2*t4*t3**2*t2**2&
+ &*t5-9._ki/2._ki*t1**2*t6**3*t4*t5*t2+6._ki*t6**3*t4**2*t2**2*t3*t5&
+ &+12._ki*t1*t3*t6**3*t2*t4**2-5._ki/6._ki*t1*t6**2*t4*t2**4*t5+3._ki&
+ &/2._ki*t1*t6**3*t4*t5*t2**3+12._ki*t6**2*t4**2*t3**2*t5*t2+6._ki*t&
+ &6**2*t4**3*t5**2*t3*t2+3._ki/2._ki*t6**2*t4*t5**2*t3*t2**3-3._ki/2&
+ &._ki*t1*t6**3*t5**2*t2**2*t4-24._ki*t1*t6**3*t3*t5*t4**2-2._ki*t1*&
+ &t6**2*t4**2*t5**3*t2+10._ki*t6**3*t4**3*t3**2+t1**2*t6**2*t2**4/&
+ &2._ki-t6**2*t3**3*t2**2-3._ki/4._ki*t1**2*t2**3*t6**3+3._ki*t1*t6**&
+ &2*t5**2*t2**2*t3-3._ki*t1*t6**2*t3**2*t5*t2+6._ki*t1*t6**3*t4**2*&
+ &t5**2*t2-3._ki*t1*t6**3*t3*t5*t2**2+6._ki*t1*t6**3*t4**3*t5*t2-6.&
+ &_ki*t1*t6**3*t4**2*t5*t2**2+18._ki*t1*t6**3*t3*t5*t2*t4+9._ki/2._ki&
+ &*t1**2*t6**3*t5**2*t4+9._ki/4._ki*t1**2*t6**3*t2**2*t4+3._ki*t1**2&
+ &*t6**3*t5*t3-3._ki/2._ki*t1**2*t2*t6**3*t5**2-5._ki/12._ki*t1**2*t2&
+ &**3*t6**2*t5+t1**2*t6**2*t5**3*t2/2._ki-3._ki/4._ki*t1*t6**3*t4*t2&
+ &**4-5._ki/6._ki*t1*t6**2*t3*t2**4
+ !
+ stemp3=stemp4+3._ki*t1*t6**3*t3**2*t2-6._ki*t1*t6**3*t4**3*t5**2-15&
+ &._ki/2._ki*t1*t6**3*t4*t3**2-3._ki*t1*t6**3*t4**3*t2**2+9._ki/2._ki*&
+ &t6**3*t2**2*t3**2*t4+3._ki/2._ki*t1**2*t5*t6**3*t2**2-3._ki/2._ki*t&
+ &1**2*t6**3*t2*t3+t1*t6**2*t2**5*t4-2._ki*t1*t6**2*t4**2*t2**4+8.&
+ &_ki*t6**3*t4**4*t5*t3+t6**3*t4*t2**4*t3/2._ki-12._ki*t6**3*t4**2*t&
+ &3**2*t2-3._ki*t6**3*t4**2*t2**3*t3+6._ki*t6**3*t4**3*t3*t2**2-4._k&
+ &i*t6**3*t4**4*t3*t2+3._ki/2._ki*t6**2*t2**3*t3**2*t5+5._ki/2._ki*t6&
+ &**2*t4*t3**3*t2-5._ki/3._ki*t6**2*t4**3*t2**3*t3+5._ki/3._ki*t6**2*&
+ &t4**2*t2**4*t3-5._ki/12._ki*t6**2*t4*t2**5*t3+3._ki/2._ki*t1*t6**3*&
+ &t3*t2**3+3._ki*t1*t6**3*t4**2*t2**3-t1*t6*t4*t2**6/4._ki-9._ki*t1*&
+ &t6**2*t5**2*t2*t3*t4+5._ki/3._ki*t1*t6**2*t4**2*t2**3*t5+5._ki/2._k&
+ &i*t1*t6**2*t4*t3*t2**3-12._ki*t6**3*t4**3*t5*t3*t2-t6**3*t4*t2**&
+ &3*t3*t5-9._ki*t4*t1*t6**3*t3*t2**2+t1*t6**2*t4*t5**3*t2**2-t4*t3&
+ &*t2**7/12._ki-t3**2*t6**3*t2**3/2._ki
+ !
+ stemp4=1._ki/t2**9*z_log(-t1*t6/t2**2,-1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=t4*t3/t2**2*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ stemp8=11._ki*t1**2*t6*t4**2*t2**2*t3*t5-t1**3*t4**2*t5**3*t2+5._ki&
+ &*t1**3*t6*t4**3*t5*t2-5._ki*t1**3*t6*t4**2*t5*t2**2+5._ki*t1**3*t&
+ &6*t4**2*t5**2*t2-20._ki*t1**3*t6*t3*t5*t4**2-5._ki/2._ki*t1**3*t6*&
+ &t3*t5*t2**2-11._ki/2._ki*t1**2*t6*t4**2*t2**3*t3-22._ki/3._ki*t1**2&
+ &*t6*t4**4*t3*t2+4._ki*t1*t6*t4**4*t3**2*t2-3._ki/2._ki*t1**2*t3**3&
+ &*t2**2-2._ki/3._ki*t4**5*t3**3*t2-t4**3*t3**3*t2**3+4._ki/3._ki*t4*&
+ &*4*t3**3*t2**2-t4*t3**3*t2**5/24._ki+10._ki*t1**3*t6*t4**2*t3*t2-&
+ &2._ki*t1*t6*t4**5*t3**2+3._ki/2._ki*t1**4*t6*t5**2*t4-t1**4*t3*t2*&
+ &t6/2._ki
+ !
+ stemp7=stemp8+t1**4*t5*t6*t2**2/2._ki-3._ki/2._ki*t1*t2**3*t3**3*t4-&
+ &5._ki/12._ki*t1**3*t4*t5*t2**4+5._ki/6._ki*t1**3*t4**2*t5*t2**3+33.&
+ &_ki/4._ki*t1**2*t6*t4*t3**2*t2**2-22._ki*t1**2*t6*t4**3*t5*t3*t2-2&
+ &2._ki*t1**2*t6*t4**2*t3**2*t2-11._ki/6._ki*t1**2*t6*t4*t2**3*t3*t5&
+ &+11._ki/12._ki*t1**2*t3*t2**4*t6*t4+44._ki/3._ki*t1**2*t6*t4**4*t5*&
+ &t3-3._ki/2._ki*t1**4*t6*t4*t5*t2+15._ki*t1**3*t6*t3*t5*t2*t4+11._ki&
+ &*t1**2*t6*t4**3*t3*t2**2-t1*t3**2*t2**4*t6*t4/8._ki-9._ki/2._ki*t1&
+ &**3*t5**2*t2*t3*t4-9._ki*t1**2*t4**2*t5**2*t3*t2**2+9._ki*t1**2*t&
+ &4**3*t5**2*t3*t2+18._ki*t1**2*t4**2*t3**2*t5*t2+9._ki/4._ki*t1**2*&
+ &t4*t5**2*t3*t2**3
+ !
+ stemp8=stemp7-27._ki/2._ki*t1**2*t4*t3**2*t2**2*t5-3._ki*t1*t4**2*t5&
+ &*t3**2*t2**3-4._ki*t1*t4**4*t5*t3**2*t2+6._ki*t1*t4**3*t5*t3**2*t&
+ &2**2+t1*t4*t5*t3**2*t2**4/2._ki-5._ki/4._ki*t1**3*t6*t4*t5**2*t2**&
+ &2+5._ki/4._ki*t1**3*t6*t4*t5*t2**3-t1**4*t2**3*t6/4._ki+t4**2*t3**&
+ &3*t2**4/3._ki+t1**3*t4*t2**5/2._ki-t1**3*t4**2*t2**4-5._ki/12._ki*t&
+ &1**3*t2**4*t3-11._ki/12._ki*t1**2*t2**3*t3**2*t6+t1**4*t6*t5*t3-t&
+ &1**4*t2*t6*t5**2/2._ki+3._ki/4._ki*t1**4*t4*t6*t2**2-5._ki/2._ki*t1*&
+ &*3*t6*t4**3*t2**2-25._ki/4._ki*t1**3*t6*t4*t3**2+5._ki/2._ki*t1**3*&
+ &t6*t4**2*t2**3
+ !
+ stemp6=stemp8-5._ki/8._ki*t1**3*t6*t4*t2**4+5._ki/4._ki*t1**3*t6*t3*t&
+ &2**3+5._ki/2._ki*t1**3*t6*t3**2*t2-5._ki*t1**3*t6*t4**3*t5**2+55._k&
+ &i/3._ki*t1**2*t6*t4**3*t3**2+5._ki/4._ki*t1**3*t4*t3*t2**3+3._ki/2.&
+ &_ki*t1**3*t5**2*t2**2*t3-3._ki/2._ki*t1**3*t3**2*t5*t2+t1**3*t4*t5&
+ &**3*t2**2/2._ki-5._ki/8._ki*t1**2*t4*t2**5*t3+5._ki/2._ki*t1**2*t4**&
+ &2*t2**4*t3-5._ki/2._ki*t1**2*t4**3*t2**3*t3+9._ki/4._ki*t1**2*t2**3&
+ &*t3**2*t5+15._ki/4._ki*t1**2*t4*t3**3*t2-10._ki/3._ki*t1*t4**3*t3**&
+ &3*t2+4._ki*t1*t4**2*t3**3*t2**2-3._ki*t1*t6*t4**3*t2**2*t3**2+t1*&
+ &t3**2*t2**3*t6*t4**2-15._ki/2._ki*t1**3*t6*t4*t3*t2**2+t1*t2**4*t&
+ &3**3/6._ki
+ !
+ stemp7=t6**2/t2**9/t1**2
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(3)
+ !
+ stemp5=5._ki/2._ki*t1*t6**2*t4*t2**4*t5+15._ki/2._ki*t1*t6**3*t5**2*t&
+ &2**2*t4+t4*t3*t2**7/12._ki-15._ki/2._ki*t1*t6**3*t4*t5*t2**3-18._ki&
+ &*t6**3*t4**2*t2**2*t3*t5+24._ki*t1*t6**3*t3*t5*t4**2-3._ki*t1*t6*&
+ &*2*t4*t5**3*t2**2-5._ki/6._ki*t1*t6**2*t2**5*t5+3._ki/2._ki*t1*t6**&
+ &3*t5*t2**4-3._ki/2._ki*t1*t6**3*t5**2*t2**3+3._ki/2._ki*t6**2*t5**2&
+ &*t2**4*t3+25._ki/12._ki*t6**2*t4*t2**5*t3+5._ki/3._ki*t6**2*t4**3*t&
+ &2**3*t3-10._ki/3._ki*t6**2*t4**2*t2**4*t3+3._ki/2._ki*t1**2*t2**3*t&
+ &6**3+t6**3*t3*t2**5/2._ki-5._ki/12._ki*t6**2*t3*t2**6-10._ki*t6**3*&
+ &t4**3*t3**2+12._ki*t6**2*t4**2*t5**2*t3*t2**2
+ !
+ stemp4=stemp5+2._ki*t1*t6**2*t4**2*t5**3*t2-6._ki*t1*t6**2*t5**2*t2&
+ &**2*t3+3._ki*t1*t6**2*t3**2*t5*t2+3._ki/2._ki*t6**2*t3**3*t2**2-t1&
+ &**2*t6**2*t2**4/2._ki-3._ki/4._ki*t1*t6**3*t2**5+2._ki*t3**2*t6**3*&
+ &t2**3-t1*t6*t2**7/4._ki-12._ki*t1*t6**3*t4**2*t5**2*t2+9._ki*t1*t6&
+ &**3*t3*t5*t2**2-12._ki*t6**2*t4**2*t3**2*t5*t2-6._ki*t6**2*t4**3*&
+ &t5**2*t3*t2+9._ki/2._ki*t1**2*t6**3*t4*t5*t2-6._ki*t1*t6**3*t4**3*&
+ &t5*t2-9._ki/2._ki*t1**2*t6**3*t5**2*t4-9._ki/4._ki*t1**2*t6**3*t2**&
+ &2*t4-3._ki*t1**2*t6**3*t5*t3+3._ki*t1**2*t2*t6**3*t5**2+5._ki/12._k&
+ &i*t1**2*t2**3*t6**2*t5
+ !
+ stemp5=stemp4-t1**2*t6**2*t5**3*t2/2._ki-15._ki/2._ki*t6**2*t4*t5**2&
+ &*t3*t2**3+15._ki*t4*t1*t6**3*t3*t2**2+15._ki/4._ki*t1*t6**3*t4*t2*&
+ &*4+5._ki/3._ki*t1*t6**2*t3*t2**4-9._ki/2._ki*t1*t6**3*t3**2*t2+6._ki&
+ &*t1*t6**3*t4**3*t5**2+15._ki/2._ki*t1*t6**3*t4*t3**2-6._ki*t1*t6**&
+ &3*t4**2*t2**3+20._ki*t6**3*t4**3*t5*t3*t2-30._ki*t1*t6**3*t3*t5*t&
+ &2*t4+12._ki*t1*t6**3*t4**2*t5*t2**2+9._ki*t1*t6**2*t5**2*t2*t3*t4&
+ &+15._ki*t6**2*t4*t3**2*t2**2*t5+3._ki*t1*t6**3*t4**3*t2**2-21._ki/&
+ &2._ki*t6**3*t2**2*t3**2*t4-3._ki*t1**2*t5*t6**3*t2**2+3._ki/2._ki*t&
+ &1**2*t6**3*t2*t3
+ !
+ stemp3=stemp5-3._ki*t1*t6**2*t2**5*t4+2._ki*t1*t6**2*t4**2*t2**4-t6&
+ &**3*t5*t3*t2**4+t1*t6*t4*t2**6/4._ki+7._ki*t6**3*t4*t2**3*t3*t5-t&
+ &3*t2**8/12._ki-5._ki/3._ki*t1*t6**2*t4**2*t2**3*t5+t1*t6**2*t5**3*&
+ &t2**3-9._ki/2._ki*t1*t6**3*t3*t2**3-8._ki*t6**3*t4**4*t5*t3-7._ki/2&
+ &._ki*t6**3*t4*t2**4*t3+18._ki*t6**3*t4**2*t3**2*t2+9._ki*t6**3*t4*&
+ &*2*t2**3*t3-10._ki*t6**3*t4**3*t3*t2**2+4._ki*t6**3*t4**4*t3*t2-9&
+ &._ki/2._ki*t6**2*t2**3*t3**2*t5-5._ki/2._ki*t6**2*t4*t3**3*t2+t1*t6&
+ &**2*t2**6-12._ki*t1*t3*t6**3*t2*t4**2-5._ki/2._ki*t1*t6**2*t4*t3*t&
+ &2**3
+ !
+ stemp4=1._ki/t2**9*z_log(-t1*t6/t2**2,-1._ki)
+ !
+ stemp2=stemp3*stemp4
+ !
+ stemp4=-(-t2+t4)*t3/t2**2*q(3,(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki
+ !
+ !
+ stemp8=33._ki/2._ki*t1**2*t6*t4**2*t2**3*t3-44._ki/3._ki*t1**2*t6*t4*&
+ &*4*t5*t3-2._ki*t4**4*t3**3*t2**2+9._ki/2._ki*t1**3*t5**2*t2*t3*t4+&
+ &18._ki*t1**2*t4**2*t5**2*t3*t2**2-9._ki*t1**2*t4**3*t5**2*t3*t2+5&
+ &._ki/4._ki*t1**3*t6*t5*t2**4-2._ki/3._ki*t1*t2**4*t3**3-5._ki/8._ki*t&
+ &1**2*t3*t2**6+3._ki/8._ki*t4*t3**3*t2**5+9._ki/8._ki*t1*t3**2*t2**4&
+ &*t6*t4+9._ki/4._ki*t1**2*t3**3*t2**2+7._ki/3._ki*t4**3*t3**3*t2**3+&
+ &2._ki/3._ki*t4**5*t3**3*t2-18._ki*t1**2*t4**2*t3**2*t5*t2-45._ki/4.&
+ &_ki*t1**2*t4*t5**2*t3*t2**3+11._ki/12._ki*t1**2*t3*t2**5*t6-t1*t6*&
+ &t3**2*t2**5/8._ki-t1**4*t6*t5*t3+t1**4*t2*t6*t5**2-3._ki/4._ki*t1*&
+ &*4*t4*t6*t2**2+5._ki/2._ki*t1**3*t6*t4**3*t2**2
+ !
+ stemp7=stemp8+11._ki/3._ki*t1**2*t2**3*t3**2*t6-4._ki*t1*t3**2*t2**3&
+ &*t6*t4**2-11._ki/6._ki*t1**2*t6*t5*t3*t2**4-55._ki/3._ki*t1**2*t6*t&
+ &4**3*t3*t2**2-33._ki*t1**2*t6*t4**2*t2**2*t3*t5+25._ki/4._ki*t1**3&
+ &*t6*t4*t5**2*t2**2+25._ki/2._ki*t1**3*t6*t4*t3*t2**2-5._ki*t1**3*t&
+ &6*t4**3*t5*t2-25._ki/4._ki*t1**3*t6*t4*t5*t2**3+9._ki*t1*t4**2*t5*&
+ &t3**2*t2**3+t1**3*t4**2*t5**3*t2-3._ki/2._ki*t1**3*t4*t5**3*t2**2&
+ &+25._ki/8._ki*t1**2*t4*t2**5*t3-5._ki*t1**2*t4**2*t2**4*t3+5._ki/2.&
+ &_ki*t1**2*t4**3*t2**3*t3-27._ki/4._ki*t1**2*t2**3*t3**2*t5-15._ki/4&
+ &._ki*t1**2*t4*t3**3*t2+10._ki/3._ki*t1*t4**3*t3**3*t2-6._ki*t1*t4**&
+ &2*t3**3*t2**2+10._ki*t1**3*t6*t4**2*t5*t2**2+45._ki/2._ki*t1**2*t4&
+ &*t3**2*t2**2*t5+t1**3*t5**3*t2**3/2._ki+4._ki*t1*t4**4*t5*t3**2*t&
+ &2
+ !
+ stemp8=stemp7+3._ki/2._ki*t1**4*t6*t4*t5*t2-10._ki*t1**3*t6*t4**2*t3&
+ &*t2-10._ki*t1**3*t6*t4**2*t5**2*t2-3._ki/2._ki*t1**3*t4*t2**5+t1**&
+ &3*t4**2*t2**4-5._ki/8._ki*t1**3*t6*t2**5+t1**4*t2**3*t6/2._ki+20._k&
+ &i*t1**3*t6*t3*t5*t4**2+5._ki/6._ki*t1**3*t2**4*t3+22._ki/3._ki*t1**&
+ &2*t6*t4**4*t3*t2+7._ki*t1*t6*t4**3*t2**2*t3**2+15._ki/2._ki*t1**3*&
+ &t6*t3*t5*t2**2-77._ki/4._ki*t1**2*t6*t4*t3**2*t2**2-25._ki*t1**3*t&
+ &6*t3*t5*t2*t4-5._ki/12._ki*t1**3*t2**5*t5-5._ki/4._ki*t1**3*t6*t5**&
+ &2*t2**3+25._ki/4._ki*t1**3*t6*t4*t3**2+25._ki/8._ki*t1**3*t6*t4*t2*&
+ &*4-15._ki/4._ki*t1**3*t6*t3*t2**3+110._ki/3._ki*t1**2*t6*t4**3*t5*t&
+ &3*t2+33._ki*t1**2*t6*t4**2*t3**2*t2-6._ki*t1*t6*t4**4*t3**2*t2
+ !
+ stemp6=stemp8-10._ki*t1*t4**3*t5*t3**2*t2**2-7._ki/2._ki*t1*t4*t5*t3&
+ &**2*t2**4+77._ki/6._ki*t1**2*t6*t4*t2**3*t3*t5-3._ki/2._ki*t1**4*t6&
+ &*t5**2*t4-15._ki/4._ki*t1**3*t6*t3**2*t2+5._ki*t1**3*t6*t4**3*t5**&
+ &2-55._ki/3._ki*t1**2*t6*t4**3*t3**2+2._ki*t1*t6*t4**5*t3**2-5._ki*t&
+ &1**3*t6*t4**2*t2**3+9._ki/4._ki*t1**2*t5**2*t2**4*t3+t1*t3**2*t5*&
+ &t2**5/2._ki-t3**3*t2**6/24._ki+7._ki/2._ki*t1*t2**3*t3**3*t4+5._ki/4&
+ &._ki*t1**3*t4*t5*t2**4-5._ki/6._ki*t1**3*t4**2*t5*t2**3+t1**4*t3*t&
+ &2*t6/2._ki-t1**4*t5*t6*t2**2-5._ki/4._ki*t1**3*t4*t3*t2**3-3._ki*t1&
+ &**3*t5**2*t2**2*t3+3._ki/2._ki*t1**3*t3**2*t5*t2-4._ki/3._ki*t4**2*&
+ &t3**3*t2**4-77._ki/12._ki*t1**2*t3*t2**4*t6*t4+t1**3*t2**6/2._ki
+ !
+ stemp7=t6**2/t2**9/t1**2
+ !
+ stemp5=stemp6*stemp7
+ !
+ stemp3=stemp4+stemp5
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ case(4)
+ !
+ stemp2=-(-3._ki*t1**2*t6**3*t2+9._ki*t1**2*t5*t6**3+36._ki*t1*t5*t6*&
+ &*3*t2*t4+18._ki*t1*t3*t6**3*t2+3._ki*t1*t6**3*t2**3-9._ki*t1*t5*t6&
+ &**3*t2**2-36._ki*t1*t3*t6**3*t4+12._ki*t1*t6**3*t2*t4**2-36._ki*t1&
+ &*t5*t6**3*t4**2-12._ki*t1*t6**3*t2**2*t4-6._ki*t1*t2**4*t6**2+12.&
+ &_ki*t1*t2**3*t6**2*t4-2._ki*t1*t5*t2**4*t6+24._ki*t3*t6**3*t4**3-3&
+ &._ki*t3*t6**3*t2**3+18._ki*t3*t6**3*t2**2*t4-36._ki*t3*t6**3*t2*t4&
+ &**2+4._ki*t3*t2**4*t6*t4-2._ki*t3*t2**5*t6-2._ki*t3*t5*t2**5)/t2**&
+ &7*z_log(-t1*t6/t2**2,-1._ki)/24._ki
+ !
+ stemp3=(2._ki*t5*t1*t6-t3*t2*t6-t3*t5*t2+2._ki*t3*t6*t4)/t2**3*q(3,&
+ &(t2*t3-t1*t6)/t2/t3,sign_arg)/12._ki-(6._ki*t1**2*t5*t6**3-2._ki*t&
+ &1**2*t6**3*t2+30._ki*t1*t3*t6**3*t2-15._ki*t1*t5*t6**3*t2**2-60._k&
+ &i*t1*t5*t6**3*t4**2+20._ki*t1*t6**3*t2*t4**2-20._ki*t1*t6**3*t2**&
+ &2*t4+60._ki*t1*t5*t6**3*t2*t4-60._ki*t1*t3*t6**3*t4+5._ki*t1*t6**3&
+ &*t2**3-6._ki*t1*t2**4*t6**2+12._ki*t1*t2**3*t6**2*t4+88._ki*t3*t6*&
+ &*3*t4**3-132._ki*t3*t6**3*t2*t4**2+66._ki*t3*t6**3*t2**2*t4-11._ki&
+ &*t3*t6**3*t2**3+8._ki*t3*t2**4*t6*t4-4._ki*t3*t2**5*t6-4._ki*t3*t5&
+ &*t2**5)/t2**7/48._ki
+ !
+ stemp1=stemp2+stemp3
+ !
+ stemp2=1._ki/t2
+ !
+ temp0=stemp1*stemp2
+ !
+ end select
+ !
+ end if
+ !
+ end if
+ !
+ compute_residue = temp0
+ !
+ end function compute_residue
+ !
+ !****if* src/integrals/four_point/function_4p3m/fg
+ ! NAME
+ !
+ ! function fg
+ !
+ ! USAGE
+ !
+ ! complex = fg(z,s24,s13,s12,s23,s34,par1,par2,par3,par4,flag,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function contains the one dimensional integral representation of
+ ! the six/eight dimensional three mass four point function
+ !
+ !
+ ! INPUTS
+ !
+ ! * z -- a real (type ki), integration variable
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! three mass four point function, dim="n+4" eight dimensional
+ ! three mass four point function
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki) corresponding to the
+ ! one dimensional integral representation of the six/eight dimensional
+ ! three mass four point function
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fg(z,s24,s13,s12,s23,s34,par1,par2,par3,par4,flag,dim)
+ !
+ complex(ki), intent (in) :: z
+ real(ki), intent (in) :: s24,s13,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4,flag
+ character (len=3) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(4) :: par
+ integer :: nb_par
+ complex(ki) :: c_var,d_var,e_var,f_var,g_var,h_var
+ !
+ par = (/par1,par2,par3,par4/)
+ nb_par = count(mask=par/=0)
+ !
+ c_var = z*s12+(1._ki-z)*s13
+ !
+ f_var = z*(s24-s12)+(1._ki-z)*(s34-s13)
+ !
+ g_var = z*(1._ki-z)*s23-z*s24-(1._ki-z)*s34
+ !
+ d_var = z*(1._ki-z)*s23-z*s12-(1._ki-z)*s13
+ !
+ e_var = z*s24+(1._ki-z)*s34
+ !
+ h_var = z*(1._ki-z)*s23
+ !
+ if (dim == "n+2") then
+ if (nb_par == 0) then
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(-(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var+log(e_var)&
+ &*e_var)/f_var/g_var
+ !
+ case(2)
+ !
+ fg=((log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var-c_var*log(c&
+ &_var))/f_var/d_var
+ !
+ end select
+ else if (nb_par == 1) then
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*(-(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var*&
+ &*2+log(e_var)*e_var**2)/f_var**2/g_var
+ !
+ case(2)
+ !
+ fg=-(1._ki/2._ki*c_var**2/f_var*log(c_var)-1._ki/2._ki*(log(z)&
+ &+log(1._ki-z)+z_log(s23,1._ki))*h_var**2/f_var)/d_var**2-(&
+ &1._ki/2._ki*c_var/f_var**2*log(c_var)*(2._ki*f_var+c_var)+1&
+ &._ki/2._ki*(c_var*f_var-(log(z)+log(1._ki-z)+z_log(s23,1._ki&
+ &))*h_var**2)/f_var**2)/d_var
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-(-1._ki/2._ki*z*(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_v&
+ &ar**2/f_var**2*d_var+1._ki/2._ki*z*log(e_var)/f_var*e_var*&
+ &*2)/g_var**2-(-1._ki/2._ki*z*(log(z)+log(1._ki-z)+z_log(s23&
+ &,1._ki))*h_var/f_var**2*(c_var-d_var)+z*(log(z)+log(1._ki-&
+ &z)+z_log(s23,1._ki))*h_var**2/f_var**3*d_var+1._ki/2._ki*z*&
+ &(c_var+f_var)/f_var)/g_var-z*(log(z)+log(1._ki-z)+z_log(s&
+ &23,1._ki))*h_var*(-d_var-h_var+g_var+c_var)/f_var**3
+ !
+ case(2)
+ !
+ fg=-(-1._ki/2._ki*z*(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_v&
+ &ar/f_var**2*c_var*g_var-1._ki/2._ki*z*c_var**2/f_var*log(c&
+ &_var))/d_var**2-(-1._ki/2._ki*z*(log(z)+log(1._ki-z)+z_log(&
+ &s23,1._ki))*h_var/f_var**2*(h_var-g_var)-z*(log(z)+log(1.&
+ &_ki-z)+z_log(s23,1._ki))*h_var/f_var**3*c_var*g_var-1._ki/2&
+ &._ki*z*c_var/f_var)/d_var
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-(1._ki/2._ki*(-1._ki+z)*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))*h_var**2/f_var**2*d_var-1._ki/2._ki*(-1._ki+z)*log(e_va&
+ &r)/f_var*e_var**2)/g_var**2-(1._ki/2._ki*(-1._ki+z)*(log(z)&
+ &+log(1._ki-z)+z_log(s23,1._ki))*h_var/f_var**2*(c_var-d_va&
+ &r)-(-1._ki+z)*(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var*&
+ &*2/f_var**3*d_var-1._ki/2._ki*(-c_var+z*c_var-f_var+z*f_va&
+ &r)/f_var)/g_var+(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_v&
+ &ar*(-d_var-h_var+g_var+c_var)*(-1._ki+z)/f_var**3
+ !
+ case(2)
+ !
+ fg=-(1._ki/2._ki*(-1._ki+z)*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))*h_var/f_var**2*c_var*g_var+1._ki/2._ki*c_var**2*(-1._ki&
+ &+z)/f_var*log(c_var))/d_var**2-(1._ki/2._ki*(-1._ki+z)*(log&
+ &(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var/f_var**2*(h_var-g&
+ &_var)+(-1._ki+z)*(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_v&
+ &ar/f_var**3*c_var*g_var+1._ki/2._ki*(-1._ki+z)*c_var/f_var)&
+ &/d_var
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-(-1._ki/2._ki*log(e_var)/f_var*e_var**2+1._ki/2._ki*(log(z&
+ &)+log(1._ki-z)+z_log(s23,1._ki))*h_var**2/f_var)/g_var**2-&
+ &(-1._ki/2._ki*log(e_var)/f_var**2*e_var*(-c_var+f_var)-1._k&
+ &i/2._ki*h_var*((log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var&
+ &+f_var)/f_var**2)/g_var-1._ki/2._ki/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*(-(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var*&
+ &*2+c_var**2*log(c_var))/f_var**2/d_var
+ !
+ end select
+ !
+ end select
+ else if (nb_par == 2) then
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*h_var**3/f_var**3/g_var*(log(z)+log(1._ki-z)+&
+ &z_log(s23,1._ki))+1._ki/3._ki/g_var*log(e_var)/f_var**3*e_v&
+ &ar**3-5._ki/6._ki*c_var/f_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki/f_var**3*log(c_var)*c_var/d_var**3*(3._ki*d_v&
+ &ar*f_var**2*h_var+3._ki*c_var*d_var**2*f_var+c_var**2*d_v&
+ &ar**2+c_var**2*d_var*f_var+c_var**2*f_var**2)+1._ki/3._ki*&
+ &h_var**3*(d_var**2+d_var*f_var+f_var**2)/d_var**3/f_var*&
+ &*3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/6._ki*c_var*&
+ &(2._ki*c_var*d_var+2._ki*c_var*f_var-5._ki*d_var**2+5._ki*d_&
+ &var*f_var)/d_var**2/f_var**2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/6._ki*z*h_var**2*(-2._ki*f_var*h_var*g_var+f_var**2*&
+ &h_var+2._ki*c_var*f_var*g_var-g_var**2*f_var-f_var**2*g_v&
+ &ar-3._ki*h_var*g_var**2)/f_var**4/g_var**2*(log(z)+log(1.&
+ &_ki-z)+z_log(s23,1._ki))-1._ki/6._ki*z/g_var**2*log(e_var)/f&
+ &_var**2*e_var**3-1._ki/6._ki*z*(g_var*f_var+f_var**2+c_var&
+ &**2+2._ki*c_var*f_var)/f_var**2/g_var-1._ki/2._ki*z*h_var**&
+ &2*(-d_var-h_var+g_var+2._ki*c_var)/f_var**4*(log(z)+log(1&
+ &._ki-z)+z_log(s23,1._ki))+1._ki/6._ki*z/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var**2*z*(3._ki*d_var*f_var+c_var*d_var+2._ki&
+ &*c_var*f_var)/d_var**3/f_var**2*log(c_var)+1._ki/6._ki*z*h&
+ &_var**2*(-2._ki*c_var*d_var*f_var**2-2._ki*c_var*f_var**3+&
+ &d_var*f_var**2*h_var+d_var**2*f_var**2+d_var*f_var**3-2.&
+ &_ki*c_var*d_var**2*f_var+2._ki*d_var**2*f_var*h_var-2._ki*f&
+ &_var*d_var**3+6._ki*c_var*d_var**3)/d_var**3/f_var**4*(lo&
+ &g(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/6._ki*c_var*z*(2._k&
+ &i*c_var*f_var+c_var*d_var+2._ki*d_var*f_var)/d_var**2/f_v&
+ &ar**2
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*(z-1)*h_var**2*(-2._ki*f_var*h_var*g_var+f_va&
+ &r**2*h_var+2._ki*c_var*f_var*g_var-g_var**2*f_var-f_var**&
+ &2*g_var-3._ki*h_var*g_var**2)/f_var**4/g_var**2*(log(z)+l&
+ &og(1._ki-z)+z_log(s23,1._ki))+1._ki/6._ki*(z-1)/g_var**2*log&
+ &(e_var)/f_var**2*e_var**3+1._ki/6._ki*(z-1)*(g_var*f_var+f&
+ &_var**2+c_var**2+2._ki*c_var*f_var)/f_var**2/g_var+1._ki/2&
+ &._ki*(z-1)*h_var**2*(-d_var-h_var+g_var+2._ki*c_var)/f_var&
+ &**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/6._ki*(z-1)&
+ &/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/6._ki*c_var**2*(z-1)*(3._ki*d_var*f_var+c_var*d_var&
+ &+2._ki*c_var*f_var)/d_var**3/f_var**2*log(c_var)-1._ki/6._k&
+ &i*(z-1)*h_var**2*(-2._ki*c_var*d_var*f_var**2-2._ki*c_var*&
+ &f_var**3+d_var*f_var**2*h_var+d_var**2*f_var**2+d_var*f_&
+ &var**3-2._ki*c_var*d_var**2*f_var+2._ki*d_var**2*f_var*h_v&
+ &ar-2._ki*f_var*d_var**3+6._ki*c_var*d_var**3)/d_var**3/f_v&
+ &ar**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/6._ki*(z-&
+ &1)*c_var*(2._ki*c_var*f_var+c_var*d_var+2._ki*d_var*f_var)&
+ &/d_var**2/f_var**2
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*h_var**3*(-2._ki*g_var+f_var)/g_var**2/f_var*&
+ &*3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/6._ki*e_var*&
+ &*2*(-f_var*e_var+2._ki*c_var*g_var-g_var*f_var)/g_var**2/&
+ &f_var**3*log(e_var)+1._ki/6._ki*(g_var+f_var+c_var)**2/f_v&
+ &ar**2/g_var+1._ki/6._ki/f_var**2*(g_var-2._ki*h_var)
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var**2*(2._ki*c_var*d_var+c_var*f_var+3._ki*d&
+ &_var*f_var)/d_var**2/f_var**3*log(c_var)-1._ki/6._ki*h_var&
+ &**3*(2._ki*d_var+f_var)/d_var**2/f_var**3*(log(z)+log(1._k&
+ &i-z)+z_log(s23,1._ki))+1._ki/6._ki/d_var/f_var**2*c_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*z**2*h_var*(f_var**6+27._ki*g_var**5*f_var+f_&
+ &var**4*c_var**2-f_var**5*g_var+f_var**4*g_var**2+24._ki*f&
+ &_var**3*g_var**3+42._ki*f_var**2*g_var**4+2._ki*f_var**5*c&
+ &_var+24._ki*f_var**2*g_var**3*c_var-f_var**4*c_var*g_var+&
+ &33._ki*g_var**4*f_var*c_var+6._ki*g_var**3*f_var*c_var**2+&
+ &6._ki*g_var**6+6._ki*g_var**4*c_var**2+12._ki*g_var**5*c_va&
+ &r)/f_var**5/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki)&
+ &)+1._ki/3._ki*z**2/g_var**3*log(e_var)/f_var*e_var**3+1._ki&
+ &/6._ki*z**2*(c_var+f_var)*(2._ki*c_var+2._ki*f_var-g_var)/g&
+ &_var**2/f_var+1._ki/3._ki*z**2*(log(z)+log(1._ki-z)+z_log(s&
+ &23,1._ki))*h_var*(18._ki*c_var*d_var**2+6._ki*d_var**2*f_va&
+ &r+6._ki*f_var*c_var**2+3._ki*c_var*d_var*f_var+18._ki*d_var&
+ &**3-18._ki*g_var*d_var**2+6._ki*g_var**2*d_var-6._ki*c_var*&
+ &g_var**2-6._ki*g_var*d_var*f_var+3._ki*g_var**2*f_var+d_va&
+ &r*f_var**2-2._ki*f_var**2*g_var-3._ki*c_var*f_var*g_var+2.&
+ &_ki*c_var*f_var**2)/f_var**5
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki*c_var**3*z**2/d_var**3/f_var*log(c_var)+1._ki&
+ &/3._ki*z**2*h_var*(f_var**4*c_var**2+4._ki*c_var*d_var**3*&
+ &f_var**2-6._ki*c_var**2*d_var**3*f_var-c_var*f_var**4*d_v&
+ &ar+d_var**4*f_var**2-2._ki*d_var**3*f_var**3+f_var**4*d_v&
+ &ar**2-3._ki*d_var**4*c_var*f_var+6._ki*d_var**4*c_var**2)/&
+ &d_var**3/f_var**5*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1&
+ &._ki/6._ki*c_var*z**2*(2._ki*c_var-d_var)/d_var**2/f_var
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/3._ki*z*(z-1)*h_var*(f_var**6+27._ki*g_var**5*f_var+&
+ &f_var**4*c_var**2-f_var**5*g_var+f_var**4*g_var**2+24._ki&
+ &*f_var**3*g_var**3+42._ki*f_var**2*g_var**4+2._ki*f_var**5&
+ &*c_var+24._ki*f_var**2*g_var**3*c_var-f_var**4*c_var*g_va&
+ &r+33._ki*g_var**4*f_var*c_var+6._ki*g_var**3*f_var*c_var**&
+ &2+6._ki*g_var**6+6._ki*g_var**4*c_var**2+12._ki*g_var**5*c_&
+ &var)/f_var**5/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))-1._ki/3._ki*z*(z-1)/g_var**3*log(e_var)/f_var*e_var**3&
+ &-1._ki/6._ki*z*(z-1)*(c_var+f_var)*(2._ki*c_var+2._ki*f_var-&
+ &g_var)/g_var**2/f_var-1._ki/3._ki*z*(log(z)+log(1._ki-z)+z_&
+ &log(s23,1._ki))*h_var*(18._ki*c_var*d_var**2+6._ki*d_var**2&
+ &*f_var+6._ki*f_var*c_var**2+3._ki*c_var*d_var*f_var+18._ki*&
+ &d_var**3-18._ki*g_var*d_var**2+6._ki*g_var**2*d_var-6._ki*c&
+ &_var*g_var**2-6._ki*g_var*d_var*f_var+3._ki*g_var**2*f_var&
+ &+d_var*f_var**2-2._ki*f_var**2*g_var-3._ki*c_var*f_var*g_v&
+ &ar+2._ki*c_var*f_var**2)*(z-1)/f_var**5
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*z*c_var**3*(z-1)/d_var**3/f_var*log(c_var)-1.&
+ &_ki/3._ki*z*(z-1)*h_var*(f_var**4*c_var**2+4._ki*c_var*d_va&
+ &r**3*f_var**2-6._ki*c_var**2*d_var**3*f_var-c_var*f_var**&
+ &4*d_var+d_var**4*f_var**2-2._ki*d_var**3*f_var**3+f_var**&
+ &4*d_var**2-3._ki*d_var**4*c_var*f_var+6._ki*d_var**4*c_var&
+ &**2)/d_var**3/f_var**5*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))+1._ki/6._ki*z*(z-1)*c_var*(2._ki*c_var-d_var)/d_var**2/&
+ &f_var
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/6._ki*z*h_var**2*(-2._ki*f_var**2*h_var*g_var+2._ki*f&
+ &_var**3*h_var+c_var*g_var*f_var**2+2._ki*f_var**2*g_var**&
+ &2-2._ki*f_var**3*g_var+2._ki*g_var**2*f_var*h_var-2._ki*g_v&
+ &ar**2*c_var*f_var+4._ki*g_var**3*f_var+6._ki*g_var**3*h_va&
+ &r)/g_var**3/f_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki)&
+ &)+1._ki/6._ki*z*e_var**2*(-2._ki*f_var*e_var+c_var*g_var-2.&
+ &_ki*g_var*f_var)/g_var**3/f_var**2*log(e_var)-1._ki/6._ki*z&
+ &*(4._ki*c_var*f_var**2+2._ki*f_var*c_var**2-g_var**2*f_var&
+ &+f_var**2*g_var+2._ki*f_var**3-c_var**2*g_var)/f_var**2/g&
+ &_var**2+1._ki/2._ki*z*h_var**2*(-2._ki*d_var+c_var-2._ki*h_v&
+ &ar+2._ki*g_var)/f_var**4*(log(z)+log(1._ki-z)+z_log(s23,1.&
+ &_ki))-1._ki/6._ki*z/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/6._ki*z*c_var**3/d_var**2/f_var**2*log(c_var)-1._ki&
+ &/6._ki*z*h_var**2*(-2._ki*c_var*d_var*f_var-c_var*f_var**2&
+ &+2._ki*d_var*f_var*h_var-2._ki*d_var**2*f_var+2._ki*d_var*f&
+ &_var**2+3._ki*c_var*d_var**2)/f_var**4/d_var**2*(log(z)+l&
+ &og(1._ki-z)+z_log(s23,1._ki))-1._ki/6._ki/f_var**2*z*c_var**&
+ &2/d_var
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*(z-1)**2*h_var*(f_var**6+27._ki*g_var**5*f_va&
+ &r+f_var**4*c_var**2-f_var**5*g_var+f_var**4*g_var**2+24.&
+ &_ki*f_var**3*g_var**3+42._ki*f_var**2*g_var**4+2._ki*f_var*&
+ &*5*c_var+24._ki*f_var**2*g_var**3*c_var-f_var**4*c_var*g_&
+ &var+33._ki*g_var**4*f_var*c_var+6._ki*g_var**3*f_var*c_var&
+ &**2+6._ki*g_var**6+6._ki*g_var**4*c_var**2+12._ki*g_var**5*&
+ &c_var)/f_var**5/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1&
+ &._ki))+1._ki/3._ki*(z-1)**2/g_var**3*log(e_var)/f_var*e_var&
+ &**3+1._ki/6._ki*(z-1)**2*(c_var+f_var)*(2._ki*c_var+2._ki*f_&
+ &var-g_var)/g_var**2/f_var+1._ki/3._ki*(log(z)+log(1._ki-z)+&
+ &z_log(s23,1._ki))*h_var*(z-1)**2*(18._ki*c_var*d_var**2+6.&
+ &_ki*d_var**2*f_var+6._ki*f_var*c_var**2+3._ki*c_var*d_var*f&
+ &_var+18._ki*d_var**3-18._ki*g_var*d_var**2+6._ki*g_var**2*d&
+ &_var-6._ki*c_var*g_var**2-6._ki*g_var*d_var*f_var+3._ki*g_v&
+ &ar**2*f_var+d_var*f_var**2-2._ki*f_var**2*g_var-3._ki*c_va&
+ &r*f_var*g_var+2._ki*c_var*f_var**2)/f_var**5
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki*c_var**3*(z-1)**2/f_var/d_var**3*log(c_var)+&
+ &1._ki/3._ki*(z-1)**2*h_var*(f_var**4*c_var**2+4._ki*c_var*d&
+ &_var**3*f_var**2-6._ki*c_var**2*d_var**3*f_var-c_var*f_va&
+ &r**4*d_var+d_var**4*f_var**2-2._ki*d_var**3*f_var**3+f_va&
+ &r**4*d_var**2-3._ki*d_var**4*c_var*f_var+6._ki*d_var**4*c_&
+ &var**2)/d_var**3/f_var**5*(log(z)+log(1._ki-z)+z_log(s23,&
+ &1._ki))-1._ki/6._ki*(z-1)**2*c_var*(2._ki*c_var-d_var)/d_var&
+ &**2/f_var
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*(z-1)*h_var**2*(-2._ki*f_var**2*h_var*g_var+2&
+ &._ki*f_var**3*h_var+c_var*g_var*f_var**2+2._ki*f_var**2*g_&
+ &var**2-2._ki*f_var**3*g_var+2._ki*g_var**2*f_var*h_var-2._k&
+ &i*g_var**2*c_var*f_var+4._ki*g_var**3*f_var+6._ki*g_var**3&
+ &*h_var)/f_var**4/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,&
+ &1._ki))-1._ki/6._ki*(z-1)*e_var**2*(-2._ki*f_var*e_var+c_var&
+ &*g_var-2._ki*g_var*f_var)/f_var**2/g_var**3*log(e_var)+1.&
+ &_ki/6._ki*(z-1)*(4._ki*c_var*f_var**2+2._ki*f_var*c_var**2-g&
+ &_var**2*f_var+f_var**2*g_var+2._ki*f_var**3-c_var**2*g_va&
+ &r)/f_var**2/g_var**2-1._ki/2._ki*(z-1)*h_var**2*(-2._ki*d_v&
+ &ar+c_var-2._ki*h_var+2._ki*g_var)/f_var**4*(log(z)+log(1._k&
+ &i-z)+z_log(s23,1._ki))+1._ki/6._ki*(z-1)/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var**3/d_var**2*(z-1)/f_var**2*log(c_var)+1&
+ &._ki/6._ki*(z-1)*h_var**2*(-2._ki*c_var*d_var*f_var-c_var*f&
+ &_var**2+2._ki*d_var*f_var*h_var-2._ki*d_var**2*f_var+2._ki*&
+ &d_var*f_var**2+3._ki*c_var*d_var**2)/f_var**4/d_var**2*(l&
+ &og(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/6._ki*(z-1)*c_var&
+ &**2/f_var**2/d_var
+ !
+ end select
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*h_var**3*(-g_var*f_var+f_var**2+g_var**2)/f_&
+ &var**3/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._k&
+ &i/3._ki/g_var**3*log(e_var)/f_var**3*e_var*(-c_var**2*g_v&
+ &ar*f_var+c_var**2*f_var**2+c_var**2*g_var**2+2._ki*c_var*&
+ &f_var**3+c_var*g_var*f_var**2-g_var**2*c_var*f_var+2._ki*&
+ &f_var**3*g_var+f_var**4+f_var**2*g_var**2)+1._ki/6._ki*(g_&
+ &var+f_var+c_var)*(2._ki*f_var**2+g_var*f_var+2._ki*c_var*f&
+ &_var-2._ki*c_var*g_var-g_var**2)/f_var**2/g_var**2+1._ki/6&
+ &._ki/f_var**2*(3._ki*c_var+g_var)
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki*c_var**3/d_var/f_var**3*log(c_var)+1._ki/3._ki&
+ &*(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var**3/f_var**3/&
+ &d_var
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*h_var**4/f_var**4/g_var*(log(z)+log(1._ki-z)+&
+ &z_log(s23,1._ki))+1._ki/4._ki/g_var*log(e_var)/f_var**4*e_v&
+ &ar**4-1._ki/12._ki*c_var/f_var**3*(-13._ki*g_var+13._ki*f_va&
+ &r+21._ki*c_var)
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki/f_var**4*log(c_var)*c_var/d_var**4*(2._ki*d_v&
+ &ar*f_var+c_var*d_var+c_var*f_var)*(2._ki*d_var*f_var**2*h&
+ &_var+c_var**2*d_var**2+2._ki*c_var*d_var**2*f_var+c_var**&
+ &2*f_var**2)+1._ki/4._ki*h_var**4*(d_var+f_var)*(d_var**2+f&
+ &_var**2)/f_var**4/d_var**4*(log(z)+log(1._ki-z)+z_log(s23&
+ &,1._ki))-1._ki/24._ki*c_var*(6._ki*c_var**2*d_var**2+6._ki*c_&
+ &var**2*d_var*f_var+6._ki*c_var**2*f_var**2-42._ki*c_var*d_&
+ &var**3+21._ki*c_var*d_var**2*f_var+21._ki*c_var*f_var**2*d&
+ &_var+26._ki*d_var**4-52._ki*d_var**3*f_var+26._ki*f_var**2*&
+ &d_var**2)/f_var**3/d_var**3
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*h_var**3*(-3._ki*h_var*f_var*g_var+f_var**2&
+ &*h_var+3._ki*c_var*f_var*g_var+3._ki*g_var**2*f_var-g_var*&
+ &f_var**2-12._ki*c_var*g_var**2)/f_var**5/g_var**2*(log(z)&
+ &+log(1._ki-z)+z_log(s23,1._ki))-1._ki/12._ki*z/g_var**2*log(&
+ &e_var)/f_var**3*e_var**4-1._ki/12._ki*z/f_var**3*(f_var**3&
+ &+c_var**3+3._ki*c_var*h_var*f_var-6._ki*c_var*f_var*g_var)&
+ &/g_var
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*c_var**2*(4._ki*c_var*d_var**2*f_var+8._ki*c&
+ &_var*f_var**2*d_var+6._ki*f_var**2*d_var**2+c_var**2*d_va&
+ &r**2+2._ki*c_var**2*d_var*f_var+3._ki*c_var**2*f_var**2)/d&
+ &_var**4/f_var**3*log(c_var)+1._ki/12._ki*z*h_var**3*(-3._ki&
+ &*c_var*f_var**3*d_var-3._ki*c_var*f_var**4+f_var**3*d_var&
+ &*h_var+f_var**3*d_var**2+f_var**4*d_var-3._ki*c_var*d_var&
+ &**2*f_var**2+2._ki*d_var**2*f_var**2*h_var+f_var**2*d_var&
+ &**3-3._ki*d_var**3*f_var*c_var+3._ki*f_var*d_var**3*h_var-&
+ &3._ki*f_var*d_var**4+12._ki*c_var*d_var**4)/d_var**4/f_var&
+ &**5*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/24._ki*z*c_&
+ &var*(4._ki*c_var**2*d_var*f_var+6._ki*c_var**2*f_var**2+6.&
+ &_ki*c_var*d_var**2*f_var+13._ki*c_var*f_var**2*d_var+2._ki*&
+ &c_var**2*d_var**2-6._ki*d_var**3*f_var+6._ki*f_var**2*d_va&
+ &r**2)/f_var**3/d_var**3
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)*h_var**3*(-3._ki*h_var*f_var*g_var&
+ &+f_var**2*h_var+3._ki*c_var*f_var*g_var+3._ki*g_var**2*f_v&
+ &ar-g_var*f_var**2-12._ki*c_var*g_var**2)/f_var**5/g_var**&
+ &2*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/12._ki*(-1._ki&
+ &+z)/g_var**2*log(e_var)/f_var**3*e_var**4+1._ki/12._ki*(-1&
+ &._ki+z)/f_var**3*(f_var**3+c_var**3+3._ki*c_var*h_var*f_va&
+ &r-6._ki*c_var*f_var*g_var)/g_var
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var**2*(4._ki*c_var*d_var**2*f_var+8._ki*c_&
+ &var*f_var**2*d_var+6._ki*f_var**2*d_var**2+c_var**2*d_var&
+ &**2+2._ki*c_var**2*d_var*f_var+3._ki*c_var**2*f_var**2)*(-&
+ &1._ki+z)/d_var**4/f_var**3*log(c_var)-1._ki/12._ki*(-1._ki+z&
+ &)*h_var**3*(-3._ki*c_var*f_var**3*d_var-3._ki*c_var*f_var*&
+ &*4+f_var**3*d_var*h_var+f_var**3*d_var**2+f_var**4*d_var&
+ &-3._ki*c_var*d_var**2*f_var**2+2._ki*d_var**2*f_var**2*h_v&
+ &ar+f_var**2*d_var**3-3._ki*d_var**3*f_var*c_var+3._ki*f_va&
+ &r*d_var**3*h_var-3._ki*f_var*d_var**4+12._ki*c_var*d_var**&
+ &4)/d_var**4/f_var**5*(log(z)+log(1._ki-z)+z_log(s23,1._ki)&
+ &)-1._ki/24._ki*(-1._ki+z)*c_var*(4._ki*c_var**2*d_var*f_var+&
+ &6._ki*c_var**2*f_var**2+6._ki*c_var*d_var**2*f_var+13._ki*c&
+ &_var*f_var**2*d_var+2._ki*c_var**2*d_var**2-6._ki*d_var**3&
+ &*f_var+6._ki*f_var**2*d_var**2)/d_var**3/f_var**3
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*h_var**4*(-3._ki*g_var+f_var)/g_var**2/f_var&
+ &**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/12._ki*e_va&
+ &r**3*(-f_var*e_var+3._ki*c_var*g_var-g_var*f_var)/g_var**&
+ &2/f_var**4*log(e_var)+1._ki/24._ki*(-6._ki*g_var**3-6._ki*g_&
+ &var**2*f_var+2._ki*f_var**3+6._ki*c_var*h_var*g_var+6._ki*c&
+ &_var*h_var*f_var+2._ki*c_var**3+c_var**2*g_var-12._ki*c_va&
+ &r*g_var**2-12._ki*c_var*f_var*g_var+6._ki*g_var**2*h_var)/&
+ &f_var**3/g_var
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*c_var**2*(3._ki*c_var**2*d_var**2+2._ki*c_var*&
+ &*2*d_var*f_var+c_var**2*f_var**2+8._ki*c_var*d_var**2*f_v&
+ &ar+4._ki*c_var*f_var**2*d_var+6._ki*f_var**2*d_var**2)/d_v&
+ &ar**3/f_var**4*log(c_var)-1._ki/12._ki*h_var**4*(3._ki*d_va&
+ &r**2+2._ki*d_var*f_var+f_var**2)/d_var**3/f_var**4*(log(z&
+ &)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/24._ki*c_var**2*(4._ki&
+ &*c_var*d_var+2._ki*c_var*f_var-7._ki*d_var**2+7._ki*d_var*f&
+ &_var)/f_var**3/d_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z**2*h_var**2*(-4._ki*f_var**3*g_var**3+f_va&
+ &r**4*c_var**2+2._ki*c_var*f_var**5+6._ki*f_var**2*g_var**3&
+ &*c_var-2._ki*f_var**4*g_var*c_var-12._ki*g_var**4*f_var*c_&
+ &var+f_var**6+3._ki*f_var**2*g_var**4+3._ki*f_var**4*g_var*&
+ &*2-2._ki*f_var**5*g_var+30._ki*g_var**4*c_var**2)/f_var**6&
+ &/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/12._k&
+ &i*z**2/g_var**3*log(e_var)/f_var**2*e_var**4+1._ki/24._ki*&
+ &z**2*(-g_var*f_var**2+2._ki*f_var**3+6._ki*c_var*h_var*f_v&
+ &ar+2._ki*c_var**3-c_var**2*g_var-8._ki*c_var*f_var*g_var)/&
+ &f_var**2/g_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z**2*c_var**3*(c_var*d_var+4._ki*d_var*f_var&
+ &+3._ki*c_var*f_var)/d_var**4/f_var**2*log(c_var)+1._ki/12.&
+ &_ki*z**2*h_var**2*(18._ki*c_var*d_var**4*f_var**2-30._ki*d_&
+ &var**4*c_var**2*f_var-12._ki*d_var**5*c_var*f_var-2._ki*c_&
+ &var*f_var**5*d_var+f_var**5*d_var**2+f_var**4*c_var**2*d&
+ &_var-2._ki*f_var**4*c_var*d_var**2-7._ki*f_var**3*d_var**4&
+ &+3._ki*f_var**4*d_var**3+3._ki*d_var**5*f_var**2+3._ki*c_va&
+ &r**2*f_var**5+30._ki*d_var**5*c_var**2)/f_var**6/d_var**4&
+ &*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/24._ki*c_var*z&
+ &**2*(-2._ki*d_var**2*f_var-c_var*d_var**2+6._ki*f_var*c_va&
+ &r**2+5._ki*d_var*c_var*f_var+2._ki*d_var*c_var**2)/f_var**&
+ &2/d_var**3
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*(-1._ki+z)*h_var**2*(-4._ki*f_var**3*g_var**&
+ &3+f_var**4*c_var**2+2._ki*c_var*f_var**5+6._ki*f_var**2*g_&
+ &var**3*c_var-2._ki*f_var**4*g_var*c_var-12._ki*g_var**4*f_&
+ &var*c_var+f_var**6+3._ki*f_var**2*g_var**4+3._ki*f_var**4*&
+ &g_var**2-2._ki*f_var**5*g_var+30._ki*g_var**4*c_var**2)/f_&
+ &var**6/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._k&
+ &i/12._ki*z*(-1._ki+z)/g_var**3*log(e_var)/f_var**2*e_var**&
+ &4-1._ki/24._ki*z*(-1._ki+z)*(-g_var*f_var**2+2._ki*f_var**3+&
+ &6._ki*c_var*h_var*f_var+2._ki*c_var**3-c_var**2*g_var-8._ki&
+ &*c_var*f_var*g_var)/f_var**2/g_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*c_var**3*(c_var*d_var+4._ki*d_var*f_var+3._k&
+ &i*c_var*f_var)*(-1._ki+z)/d_var**4/f_var**2*log(c_var)-1.&
+ &_ki/12._ki*z*(-1._ki+z)*h_var**2*(18._ki*c_var*d_var**4*f_va&
+ &r**2-30._ki*d_var**4*c_var**2*f_var-12._ki*d_var**5*c_var*&
+ &f_var-2._ki*c_var*f_var**5*d_var+f_var**5*d_var**2+f_var*&
+ &*4*c_var**2*d_var-2._ki*f_var**4*c_var*d_var**2-7._ki*f_va&
+ &r**3*d_var**4+3._ki*f_var**4*d_var**3+3._ki*d_var**5*f_var&
+ &**2+3._ki*c_var**2*f_var**5+30._ki*d_var**5*c_var**2)/f_va&
+ &r**6/d_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/&
+ &24._ki*z*(-1._ki+z)*c_var*(-2._ki*d_var**2*f_var-c_var*d_va&
+ &r**2+6._ki*f_var*c_var**2+5._ki*d_var*c_var*f_var+2._ki*d_v&
+ &ar*c_var**2)/f_var**2/d_var**3
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*h_var**3*(-2._ki*f_var**2*h_var*g_var+f_var&
+ &**3*h_var+g_var*f_var**2*c_var+2._ki*f_var**2*g_var**2-f_&
+ &var**3*g_var+3._ki*g_var**2*f_var*h_var-3._ki*g_var**2*c_v&
+ &ar*f_var-3._ki*g_var**3*f_var+6._ki*g_var**3*c_var)/f_var*&
+ &*5/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/12&
+ &._ki*z*e_var**3*(-f_var*e_var+c_var*g_var-g_var*f_var)/f_&
+ &var**3/g_var**3*log(e_var)-1._ki/24._ki*z/f_var**3*(-6._ki*&
+ &g_var**2*c_var*f_var+6._ki*f_var*c_var*h_var*g_var+6._ki*c&
+ &_var*h_var*f_var**2+2._ki*f_var*c_var**3+f_var**3*g_var+2&
+ &._ki*f_var**4-2._ki*g_var*c_var**3-9._ki*g_var*f_var*c_var*&
+ &*2-12._ki*g_var*f_var**2*c_var)/g_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z*c_var**3*(2._ki*d_var*f_var+c_var*d_var+c_&
+ &var*f_var)/d_var**3/f_var**3*log(c_var)-1._ki/12._ki*z*h_v&
+ &ar**3*(-2._ki*c_var*f_var**2*d_var-c_var*f_var**3+d_var*f&
+ &_var**2*h_var+2._ki*f_var**2*d_var**2+f_var**3*d_var-3._ki&
+ &*c_var*d_var**2*f_var+3._ki*d_var**2*f_var*h_var-3._ki*d_v&
+ &ar**3*f_var+6._ki*c_var*d_var**3)/d_var**3/f_var**5*(log(&
+ &z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/24._ki*z*c_var**2*(2&
+ &._ki*c_var*f_var+2._ki*c_var*d_var+3._ki*d_var*f_var)/f_var&
+ &**3/d_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)**2*h_var**2*(-4._ki*f_var**3*g_var&
+ &**3+f_var**4*c_var**2+2._ki*c_var*f_var**5+6._ki*f_var**2*&
+ &g_var**3*c_var-2._ki*f_var**4*g_var*c_var-12._ki*g_var**4*&
+ &f_var*c_var+f_var**6+3._ki*f_var**2*g_var**4+3._ki*f_var**&
+ &4*g_var**2-2._ki*f_var**5*g_var+30._ki*g_var**4*c_var**2)/&
+ &f_var**6/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1&
+ &._ki/12._ki*(-1._ki+z)**2/g_var**3*log(e_var)/f_var**2*e_va&
+ &r**4+1._ki/24._ki*(-1._ki+z)**2*(-g_var*f_var**2+2._ki*f_var&
+ &**3+6._ki*c_var*h_var*f_var+2._ki*c_var**3-c_var**2*g_var-&
+ &8._ki*c_var*f_var*g_var)/f_var**2/g_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var**3*(-1._ki+z)**2*(c_var*d_var+4._ki*d_v&
+ &ar*f_var+3._ki*c_var*f_var)/f_var**2/d_var**4*log(c_var)+&
+ &1._ki/12._ki*(-1._ki+z)**2*h_var**2*(18._ki*c_var*d_var**4*f&
+ &_var**2-30._ki*d_var**4*c_var**2*f_var-12._ki*d_var**5*c_v&
+ &ar*f_var-2._ki*c_var*f_var**5*d_var+f_var**5*d_var**2+f_v&
+ &ar**4*c_var**2*d_var-2._ki*f_var**4*c_var*d_var**2-7._ki*f&
+ &_var**3*d_var**4+3._ki*f_var**4*d_var**3+3._ki*d_var**5*f_&
+ &var**2+3._ki*c_var**2*f_var**5+30._ki*d_var**5*c_var**2)/f&
+ &_var**6/d_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1.&
+ &_ki/24._ki*(-1._ki+z)**2*c_var*(-2._ki*d_var**2*f_var-c_var*&
+ &d_var**2+6._ki*f_var*c_var**2+5._ki*d_var*c_var*f_var+2._ki&
+ &*d_var*c_var**2)/f_var**2/d_var**3
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)*h_var**3*(-2._ki*f_var**2*h_var*g_&
+ &var+f_var**3*h_var+g_var*f_var**2*c_var+2._ki*f_var**2*g_&
+ &var**2-f_var**3*g_var+3._ki*g_var**2*f_var*h_var-3._ki*g_v&
+ &ar**2*c_var*f_var-3._ki*g_var**3*f_var+6._ki*g_var**3*c_va&
+ &r)/f_var**5/g_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki)&
+ &)-1._ki/12._ki*(-1._ki+z)*e_var**3*(-f_var*e_var+c_var*g_va&
+ &r-g_var*f_var)/f_var**3/g_var**3*log(e_var)+1._ki/24._ki*(&
+ &-1._ki+z)/f_var**3*(-6._ki*g_var**2*c_var*f_var+6._ki*f_var&
+ &*c_var*h_var*g_var+6._ki*c_var*h_var*f_var**2+2._ki*f_var*&
+ &c_var**3+f_var**3*g_var+2._ki*f_var**4-2._ki*g_var*c_var**&
+ &3-9._ki*g_var*f_var*c_var**2-12._ki*g_var*f_var**2*c_var)/&
+ &g_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*c_var**3*(2._ki*d_var*f_var+c_var*d_var+c_var&
+ &*f_var)*(-1._ki+z)/d_var**3/f_var**3*log(c_var)+1._ki/12._k&
+ &i*(-1._ki+z)*h_var**3*(-2._ki*c_var*f_var**2*d_var-c_var*f&
+ &_var**3+d_var*f_var**2*h_var+2._ki*f_var**2*d_var**2+f_va&
+ &r**3*d_var-3._ki*c_var*d_var**2*f_var+3._ki*d_var**2*f_var&
+ &*h_var-3._ki*d_var**3*f_var+6._ki*c_var*d_var**3)/f_var**5&
+ &/d_var**3*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/24._k&
+ &i*(-1._ki+z)*c_var**2*(2._ki*c_var*f_var+2._ki*c_var*d_var+&
+ &3._ki*d_var*f_var)/f_var**3/d_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*h_var**4*(f_var**2-2._ki*g_var*f_var+3._ki*g_&
+ &var**2)/g_var**3/f_var**4*(log(z)+log(1._ki-z)+z_log(s23,&
+ &1._ki))+1._ki/12._ki/g_var**3*log(e_var)/f_var**4*e_var**2*&
+ &(c_var**2*f_var**2-2._ki*g_var*f_var*c_var**2+3._ki*c_var*&
+ &*2*g_var**2-2._ki*g_var**2*c_var*f_var+2._ki*c_var*f_var**&
+ &3+f_var**4+2._ki*f_var**3*g_var+f_var**2*g_var**2)+1._ki/2&
+ &4._ki*(-6._ki*c_var**2*g_var**2-16._ki*g_var*f_var**2*c_var&
+ &+6._ki*c_var*h_var*f_var**2-17._ki*g_var*f_var*c_var**2-18&
+ &._ki*g_var**2*c_var*f_var+2._ki*f_var*c_var**3+12._ki*f_var&
+ &*c_var*h_var*g_var-4._ki*g_var*c_var**3-6._ki*g_var**3*c_v&
+ &ar+6._ki*c_var*h_var*g_var**2+3._ki*f_var**3*g_var+2._ki*f_&
+ &var**4)/f_var**3/g_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var**3*(3._ki*c_var*d_var+c_var*f_var+4._ki&
+ &*d_var*f_var)/f_var**4/d_var**2*log(c_var)+1._ki/12._ki*h_&
+ &var**4*(3._ki*d_var+f_var)/f_var**4/d_var**2*(log(z)+log(&
+ &1._ki-z)+z_log(s23,1._ki))-1._ki/12._ki/d_var/f_var**3*c_var&
+ &**3
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ select case(par4)
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki*z**3*h_var*(2._ki*f_var**7*h_var*c_var+4._ki*f_&
+ &var**4*h_var*g_var**3*c_var+f_var**6*h_var*c_var**2+2._ki&
+ &*g_var**4*f_var**3*h_var**2-2._ki*g_var*f_var**6*h_var**2&
+ &+2._ki*g_var**2*f_var**5*h_var**2-2._ki*g_var**3*f_var**4*&
+ &h_var**2-3._ki*f_var**3*h_var*g_var**5+3._ki*f_var**4*h_va&
+ &r*g_var**4-3._ki*f_var**5*h_var*g_var**3+3._ki*f_var**6*h_&
+ &var*g_var**2+f_var**7*h_var*g_var+f_var**8*h_var-4._ki*f_&
+ &var**3*h_var*g_var**3*c_var**2+2._ki*f_var**4*h_var*c_var&
+ &**2*g_var**2-f_var**5*h_var*g_var*c_var**2-2._ki*f_var**5&
+ &*h_var*c_var*g_var**2+6._ki*g_var**4*f_var**2*h_var*c_var&
+ &**2+8._ki*g_var**5*f_var**2*h_var*c_var-10._ki*g_var**5*f_&
+ &var*h_var*c_var**2-6._ki*f_var**3*h_var*c_var*g_var**4+g_&
+ &var**3*f_var**5*c_var-g_var**2*f_var**5*c_var**2+10._ki*g&
+ &_var**6*c_var**2*f_var+10._ki*g_var**5*c_var**3*f_var-4._k&
+ &i*g_var**6*f_var**2*c_var+3._ki*f_var**3*g_var**5*c_var-8&
+ &._ki*g_var**4*f_var**2*c_var**3-6._ki*g_var**5*f_var**2*c_&
+ &var**2-g_var*f_var**7*c_var-2._ki*g_var**2*f_var**4*c_var&
+ &**3-2._ki*g_var**4*f_var**4*c_var+g_var*f_var**5*c_var**3&
+ &+g_var*f_var**6*c_var**2+2._ki*g_var**4*f_var**3*c_var**2&
+ &+4._ki*g_var**3*f_var**3*c_var**3-g_var**5*f_var**4-g_var&
+ &*f_var**8-20._ki*g_var**6*c_var**3-g_var**3*f_var**6-g_va&
+ &r**2*f_var**7+g_var**4*f_var**5+g_var**6*f_var**3)/f_var&
+ &**7/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/4&
+ &._ki*z**3/g_var**4*log(e_var)/f_var*e_var**4-1._ki/24._ki*z&
+ &**3*(2._ki*g_var**2*f_var-3._ki*g_var*f_var**2+6._ki*f_var*&
+ &*3+6._ki*c_var**3+18._ki*c_var*h_var*f_var-24._ki*c_var*f_v&
+ &ar*g_var-3._ki*c_var**2*g_var+2._ki*c_var*g_var**2)/g_var*&
+ &*3/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*z**3*c_var**4/d_var**4/f_var*log(c_var)+1._ki/&
+ &4._ki*z**3*h_var*(2._ki*d_var**3*f_var**4*h_var**2+3._ki*d_&
+ &var**3*f_var**5*h_var-2._ki*d_var**4*f_var**3*h_var**2-6.&
+ &_ki*d_var**4*f_var**4*h_var+3._ki*f_var**3*d_var**5*h_var-&
+ &4._ki*c_var*d_var**3*f_var**4*h_var+10._ki*d_var**5*c_var*&
+ &*2*f_var*h_var+4._ki*f_var**3*d_var**3*c_var**2*h_var+2._k&
+ &i*f_var**4*d_var**2*c_var**2*h_var-8._ki*d_var**5*f_var**&
+ &2*h_var*c_var-f_var**6*c_var**3+20._ki*d_var**6*c_var**3-&
+ &3._ki*d_var**4*f_var**5+3._ki*d_var**5*f_var**4-d_var**6*f&
+ &_var**3+d_var**3*f_var**6+f_var**5*d_var*c_var**2*h_var-&
+ &2._ki*c_var*d_var**2*f_var**5*h_var-16._ki*c_var**2*d_var*&
+ &*4*f_var**2*h_var+14._ki*c_var*d_var**4*f_var**3*h_var+4.&
+ &_ki*d_var**6*f_var**2*c_var-c_var*d_var**2*f_var**6-50._ki&
+ &*c_var**3*d_var**5*f_var-c_var*d_var**3*f_var**5+9._ki*c_&
+ &var*d_var**4*f_var**4-11._ki*c_var*d_var**5*f_var**3+26._k&
+ &i*c_var**2*d_var**5*f_var**2-10._ki*d_var**6*c_var**2*f_v&
+ &ar-4._ki*f_var**3*c_var**3*d_var**3-2._ki*f_var**4*c_var**&
+ &3*d_var**2-f_var**5*c_var**3*d_var-18._ki*f_var**3*d_var*&
+ &*4*c_var**2+f_var**5*d_var**2*c_var**2+f_var**6*d_var*c_&
+ &var**2+38._ki*f_var**2*d_var**4*c_var**3)/f_var**7/d_var*&
+ &*4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/24._ki*c_var&
+ &*z**3*(6._ki*c_var**2-3._ki*c_var*d_var+2._ki*d_var**2)/d_v&
+ &ar**3/f_var
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*z**2*(-1._ki+z)*h_var*(2._ki*f_var**7*h_var*c_&
+ &var+4._ki*f_var**4*h_var*g_var**3*c_var+f_var**6*h_var*c_&
+ &var**2+2._ki*g_var**4*f_var**3*h_var**2-2._ki*g_var*f_var*&
+ &*6*h_var**2+2._ki*g_var**2*f_var**5*h_var**2-2._ki*g_var**&
+ &3*f_var**4*h_var**2-3._ki*f_var**3*h_var*g_var**5+3._ki*f_&
+ &var**4*h_var*g_var**4-3._ki*f_var**5*h_var*g_var**3+3._ki*&
+ &f_var**6*h_var*g_var**2+f_var**7*h_var*g_var+f_var**8*h_&
+ &var-4._ki*f_var**3*h_var*g_var**3*c_var**2+2._ki*f_var**4*&
+ &h_var*c_var**2*g_var**2-f_var**5*h_var*g_var*c_var**2-2.&
+ &_ki*f_var**5*h_var*c_var*g_var**2+6._ki*g_var**4*f_var**2*&
+ &h_var*c_var**2+8._ki*g_var**5*f_var**2*h_var*c_var-10._ki*&
+ &g_var**5*f_var*h_var*c_var**2-6._ki*f_var**3*h_var*c_var*&
+ &g_var**4+g_var**3*f_var**5*c_var-g_var**2*f_var**5*c_var&
+ &**2+10._ki*g_var**6*c_var**2*f_var+10._ki*g_var**5*c_var**&
+ &3*f_var-4._ki*g_var**6*f_var**2*c_var+3._ki*f_var**3*g_var&
+ &**5*c_var-8._ki*g_var**4*f_var**2*c_var**3-6._ki*g_var**5*&
+ &f_var**2*c_var**2-g_var*f_var**7*c_var-2._ki*g_var**2*f_v&
+ &ar**4*c_var**3-2._ki*g_var**4*f_var**4*c_var+g_var*f_var*&
+ &*5*c_var**3+g_var*f_var**6*c_var**2+2._ki*g_var**4*f_var*&
+ &*3*c_var**2+4._ki*g_var**3*f_var**3*c_var**3-g_var**5*f_v&
+ &ar**4-g_var*f_var**8-20._ki*g_var**6*c_var**3-g_var**3*f_&
+ &var**6-g_var**2*f_var**7+g_var**4*f_var**5+g_var**6*f_va&
+ &r**3)/f_var**7/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1.&
+ &_ki))+1._ki/4._ki*z**2*(-1._ki+z)/g_var**4*log(e_var)/f_var*&
+ &e_var**4+1._ki/24._ki*z**2*(2._ki*g_var**2*f_var-3._ki*g_var&
+ &*f_var**2+6._ki*f_var**3+6._ki*c_var**3+18._ki*c_var*h_var*&
+ &f_var-24._ki*c_var*f_var*g_var-3._ki*c_var**2*g_var+2._ki*c&
+ &_var*g_var**2)*(-1._ki+z)/g_var**3/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki*z**2*c_var**4*(-1._ki+z)/f_var/d_var**4*log(c&
+ &_var)-1._ki/4._ki*z**2*(-1._ki+z)*h_var*(2._ki*d_var**3*f_va&
+ &r**4*h_var**2+3._ki*d_var**3*f_var**5*h_var-2._ki*d_var**4&
+ &*f_var**3*h_var**2-6._ki*d_var**4*f_var**4*h_var+3._ki*f_v&
+ &ar**3*d_var**5*h_var-4._ki*c_var*d_var**3*f_var**4*h_var+&
+ &10._ki*d_var**5*c_var**2*f_var*h_var+4._ki*f_var**3*d_var*&
+ &*3*c_var**2*h_var+2._ki*f_var**4*d_var**2*c_var**2*h_var-&
+ &8._ki*d_var**5*f_var**2*h_var*c_var-f_var**6*c_var**3+20.&
+ &_ki*d_var**6*c_var**3-3._ki*d_var**4*f_var**5+3._ki*d_var**&
+ &5*f_var**4-d_var**6*f_var**3+d_var**3*f_var**6+f_var**5*&
+ &d_var*c_var**2*h_var-2._ki*c_var*d_var**2*f_var**5*h_var-&
+ &16._ki*c_var**2*d_var**4*f_var**2*h_var+14._ki*c_var*d_var&
+ &**4*f_var**3*h_var+4._ki*d_var**6*f_var**2*c_var-c_var*d_&
+ &var**2*f_var**6-50._ki*c_var**3*d_var**5*f_var-c_var*d_va&
+ &r**3*f_var**5+9._ki*c_var*d_var**4*f_var**4-11._ki*c_var*d&
+ &_var**5*f_var**3+26._ki*c_var**2*d_var**5*f_var**2-10._ki*&
+ &d_var**6*c_var**2*f_var-4._ki*f_var**3*c_var**3*d_var**3-&
+ &2._ki*f_var**4*c_var**3*d_var**2-f_var**5*c_var**3*d_var-&
+ &18._ki*f_var**3*d_var**4*c_var**2+f_var**5*d_var**2*c_var&
+ &**2+f_var**6*d_var*c_var**2+38._ki*f_var**2*d_var**4*c_va&
+ &r**3)/f_var**7/d_var**4*(log(z)+log(1._ki-z)+z_log(s23,1.&
+ &_ki))-1._ki/24._ki*z**2*(-1._ki+z)*c_var*(6._ki*c_var**2-3._ki&
+ &*c_var*d_var+2._ki*d_var**2)/d_var**3/f_var
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z**2*h_var**2*(3._ki*f_var**7-3._ki*f_var**6*&
+ &g_var+3._ki*f_var**5*g_var**2-3._ki*f_var**4*g_var**3+3._ki&
+ &*f_var**3*g_var**4+6._ki*f_var**6*c_var+2._ki*f_var**4*g_v&
+ &ar**2*c_var-f_var**4*g_var*c_var**2-4._ki*f_var**5*g_var*&
+ &c_var-3._ki*g_var**5*f_var**2-10._ki*g_var**5*c_var**2+3._k&
+ &i*c_var**2*f_var**5-2._ki*g_var**4*f_var**2*c_var-2._ki*g_&
+ &var**4*f_var*c_var**2+8._ki*g_var**5*f_var*c_var)/f_var**&
+ &6/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/12.&
+ &_ki*z**2*e_var**3*(-3._ki*f_var*e_var+c_var*g_var-3._ki*g_v&
+ &ar*f_var)/f_var**2/g_var**4*log(e_var)+1._ki/24._ki*z**2*(&
+ &-18._ki*g_var**2*c_var*f_var+c_var**2*g_var**2-f_var**2*g&
+ &_var**2+18._ki*f_var*c_var*h_var*g_var+18._ki*c_var*h_var*&
+ &f_var**2+6._ki*f_var*c_var**3+3._ki*f_var**3*g_var+6._ki*f_&
+ &var**4-32._ki*g_var*f_var**2*c_var-19._ki*g_var*f_var*c_va&
+ &r**2-2._ki*g_var*c_var**3)/f_var**2/g_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*c_var**4*z**2/d_var**3/f_var**2*log(c_var)-1&
+ &._ki/12._ki*z**2*h_var**2*(f_var**4*c_var**2+10._ki*d_var**&
+ &3*c_var*f_var**2-8._ki*d_var**3*c_var**2*f_var-2._ki*d_var&
+ &*c_var*f_var**4+3._ki*f_var**2*d_var**4-6._ki*d_var**3*f_v&
+ &ar**3+3._ki*f_var**4*d_var**2-8._ki*d_var**4*c_var*f_var+1&
+ &0._ki*d_var**4*c_var**2)/d_var**3/f_var**6*(log(z)+log(1.&
+ &_ki-z)+z_log(s23,1._ki))+1._ki/24._ki*c_var**2*z**2*(2._ki*c_&
+ &var-d_var)/f_var**2/d_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/4._ki*z*(-1._ki+z)**2*h_var*(2._ki*f_var**7*h_var*c_v&
+ &ar+4._ki*f_var**4*h_var*g_var**3*c_var+f_var**6*h_var*c_v&
+ &ar**2+2._ki*g_var**4*f_var**3*h_var**2-2._ki*g_var*f_var**&
+ &6*h_var**2+2._ki*g_var**2*f_var**5*h_var**2-2._ki*g_var**3&
+ &*f_var**4*h_var**2-3._ki*f_var**3*h_var*g_var**5+3._ki*f_v&
+ &ar**4*h_var*g_var**4-3._ki*f_var**5*h_var*g_var**3+3._ki*f&
+ &_var**6*h_var*g_var**2+f_var**7*h_var*g_var+f_var**8*h_v&
+ &ar-4._ki*f_var**3*h_var*g_var**3*c_var**2+2._ki*f_var**4*h&
+ &_var*c_var**2*g_var**2-f_var**5*h_var*g_var*c_var**2-2._k&
+ &i*f_var**5*h_var*c_var*g_var**2+6._ki*g_var**4*f_var**2*h&
+ &_var*c_var**2+8._ki*g_var**5*f_var**2*h_var*c_var-10._ki*g&
+ &_var**5*f_var*h_var*c_var**2-6._ki*f_var**3*h_var*c_var*g&
+ &_var**4+g_var**3*f_var**5*c_var-g_var**2*f_var**5*c_var*&
+ &*2+10._ki*g_var**6*c_var**2*f_var+10._ki*g_var**5*c_var**3&
+ &*f_var-4._ki*g_var**6*f_var**2*c_var+3._ki*f_var**3*g_var*&
+ &*5*c_var-8._ki*g_var**4*f_var**2*c_var**3-6._ki*g_var**5*f&
+ &_var**2*c_var**2-g_var*f_var**7*c_var-2._ki*g_var**2*f_va&
+ &r**4*c_var**3-2._ki*g_var**4*f_var**4*c_var+g_var*f_var**&
+ &5*c_var**3+g_var*f_var**6*c_var**2+2._ki*g_var**4*f_var**&
+ &3*c_var**2+4._ki*g_var**3*f_var**3*c_var**3-g_var**5*f_va&
+ &r**4-g_var*f_var**8-20._ki*g_var**6*c_var**3-g_var**3*f_v&
+ &ar**6-g_var**2*f_var**7+g_var**4*f_var**5+g_var**6*f_var&
+ &**3)/f_var**7/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))-1._ki/4._ki*z*(-1._ki+z)**2/g_var**4*log(e_var)/f_var*e&
+ &_var**4-1._ki/24._ki*z*(-1._ki+z)**2*(2._ki*g_var**2*f_var-3&
+ &._ki*g_var*f_var**2+6._ki*f_var**3+6._ki*c_var**3+18._ki*c_v&
+ &ar*h_var*f_var-24._ki*c_var*f_var*g_var-3._ki*c_var**2*g_v&
+ &ar+2._ki*c_var*g_var**2)/g_var**3/f_var
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*z*c_var**4*(-1._ki+z)**2/f_var/d_var**4*log(c_&
+ &var)+1._ki/4._ki*z*(-1._ki+z)**2*h_var*(2._ki*d_var**3*f_var&
+ &**4*h_var**2+3._ki*d_var**3*f_var**5*h_var-2._ki*d_var**4*&
+ &f_var**3*h_var**2-6._ki*d_var**4*f_var**4*h_var+3._ki*f_va&
+ &r**3*d_var**5*h_var-4._ki*c_var*d_var**3*f_var**4*h_var+1&
+ &0._ki*d_var**5*c_var**2*f_var*h_var+4._ki*f_var**3*d_var**&
+ &3*c_var**2*h_var+2._ki*f_var**4*d_var**2*c_var**2*h_var-8&
+ &._ki*d_var**5*f_var**2*h_var*c_var-f_var**6*c_var**3+20._k&
+ &i*d_var**6*c_var**3-3._ki*d_var**4*f_var**5+3._ki*d_var**5&
+ &*f_var**4-d_var**6*f_var**3+d_var**3*f_var**6+f_var**5*d&
+ &_var*c_var**2*h_var-2._ki*c_var*d_var**2*f_var**5*h_var-1&
+ &6._ki*c_var**2*d_var**4*f_var**2*h_var+14._ki*c_var*d_var*&
+ &*4*f_var**3*h_var+4._ki*d_var**6*f_var**2*c_var-c_var*d_v&
+ &ar**2*f_var**6-50._ki*c_var**3*d_var**5*f_var-c_var*d_var&
+ &**3*f_var**5+9._ki*c_var*d_var**4*f_var**4-11._ki*c_var*d_&
+ &var**5*f_var**3+26._ki*c_var**2*d_var**5*f_var**2-10._ki*d&
+ &_var**6*c_var**2*f_var-4._ki*f_var**3*c_var**3*d_var**3-2&
+ &._ki*f_var**4*c_var**3*d_var**2-f_var**5*c_var**3*d_var-1&
+ &8._ki*f_var**3*d_var**4*c_var**2+f_var**5*d_var**2*c_var*&
+ &*2+f_var**6*d_var*c_var**2+38._ki*f_var**2*d_var**4*c_var&
+ &**3)/f_var**7/d_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._k&
+ &i))+1._ki/24._ki*z*(-1._ki+z)**2*c_var*(6._ki*c_var**2-3._ki*&
+ &c_var*d_var+2._ki*d_var**2)/d_var**3/f_var
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*(-1._ki+z)*h_var**2*(3._ki*f_var**7-3._ki*f_v&
+ &ar**6*g_var+3._ki*f_var**5*g_var**2-3._ki*f_var**4*g_var**&
+ &3+3._ki*f_var**3*g_var**4+6._ki*f_var**6*c_var+2._ki*f_var*&
+ &*4*g_var**2*c_var-f_var**4*g_var*c_var**2-4._ki*f_var**5*&
+ &g_var*c_var-3._ki*g_var**5*f_var**2-10._ki*g_var**5*c_var*&
+ &*2+3._ki*c_var**2*f_var**5-2._ki*g_var**4*f_var**2*c_var-2&
+ &._ki*g_var**4*f_var*c_var**2+8._ki*g_var**5*f_var*c_var)/f&
+ &_var**6/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1.&
+ &_ki/12._ki*z*(-1._ki+z)*e_var**3*(-3._ki*f_var*e_var+c_var*g&
+ &_var-3._ki*g_var*f_var)/f_var**2/g_var**4*log(e_var)-1._ki&
+ &/24._ki*z*(-1._ki+z)*(-18._ki*g_var**2*c_var*f_var+c_var**2&
+ &*g_var**2-f_var**2*g_var**2+18._ki*f_var*c_var*h_var*g_va&
+ &r+18._ki*c_var*h_var*f_var**2+6._ki*f_var*c_var**3+3._ki*f_&
+ &var**3*g_var+6._ki*f_var**4-32._ki*g_var*f_var**2*c_var-19&
+ &._ki*g_var*f_var*c_var**2-2._ki*g_var*c_var**3)/f_var**2/g&
+ &_var**3
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z*c_var**4/d_var**3*(-1._ki+z)/f_var**2*log(&
+ &c_var)+1._ki/12._ki*z*(-1._ki+z)*h_var**2*(f_var**4*c_var**&
+ &2+10._ki*d_var**3*c_var*f_var**2-8._ki*d_var**3*c_var**2*f&
+ &_var-2._ki*d_var*c_var*f_var**4+3._ki*f_var**2*d_var**4-6.&
+ &_ki*d_var**3*f_var**3+3._ki*f_var**4*d_var**2-8._ki*d_var**&
+ &4*c_var*f_var+10._ki*d_var**4*c_var**2)/d_var**3/f_var**6&
+ &*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/24._ki*z*(-1._k&
+ &i+z)*c_var**2*(2._ki*c_var-d_var)/f_var**2/d_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*z*h_var**3*(-3._ki*f_var**3*h_var*g_var+3._ki*&
+ &f_var**4*h_var+f_var**3*g_var*c_var+3._ki*f_var**3*g_var*&
+ &*2-3._ki*f_var**4*g_var+3._ki*h_var*f_var**2*g_var**2-2._ki&
+ &*c_var*g_var**2*f_var**2-3._ki*f_var**2*g_var**3-3._ki*g_v&
+ &ar**3*f_var*h_var+3._ki*f_var*g_var**3*c_var+3._ki*g_var**&
+ &4*f_var-4._ki*g_var**4*c_var)/g_var**4/f_var**5*(log(z)+l&
+ &og(1._ki-z)+z_log(s23,1._ki))-1._ki/12._ki*z/g_var**4*log(e_&
+ &var)/f_var**3*e_var**2*(-2._ki*g_var*f_var*c_var**2+c_var&
+ &**2*g_var**2+3._ki*c_var**2*f_var**2+6._ki*c_var*f_var**3+&
+ &4._ki*g_var*f_var**2*c_var-2._ki*g_var**2*c_var*f_var+3._ki&
+ &*f_var**4+6._ki*f_var**3*g_var+3._ki*f_var**2*g_var**2)-1.&
+ &_ki/24._ki*z/f_var**3*(9._ki*f_var**4*g_var+6._ki*f_var**5+2&
+ &._ki*g_var**2*c_var**3-18._ki*f_var*g_var**3*c_var+18._ki*h&
+ &_var*f_var*g_var**2*c_var-4._ki*f_var*g_var*c_var**3-35._k&
+ &i*f_var**2*g_var*c_var**2+18._ki*h_var*f_var**3*c_var-40.&
+ &_ki*f_var**3*g_var*c_var+6._ki*f_var**2*c_var**3+2._ki*f_va&
+ &r**3*g_var**2-18._ki*c_var**2*g_var**2*f_var-54._ki*c_var*&
+ &g_var**2*f_var**2+36._ki*f_var**2*c_var*h_var*g_var)/g_va&
+ &r**3
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*z*c_var**4/d_var**2/f_var**3*log(c_var)+1._ki&
+ &/12._ki*z*h_var**3*(-3._ki*d_var*c_var*f_var-f_var**2*c_va&
+ &r+3._ki*d_var*f_var*h_var-3._ki*d_var**2*f_var+3._ki*f_var*&
+ &*2*d_var+4._ki*c_var*d_var**2)/f_var**5/d_var**2*(log(z)+&
+ &log(1._ki-z)+z_log(s23,1._ki))+1._ki/12._ki*z/f_var**3*c_var&
+ &**3/d_var
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ select case(par4)
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*(-1._ki+z)**3*h_var*(2._ki*f_var**7*h_var*c_va&
+ &r+4._ki*f_var**4*h_var*g_var**3*c_var+f_var**6*h_var*c_va&
+ &r**2+2._ki*g_var**4*f_var**3*h_var**2-2._ki*g_var*f_var**6&
+ &*h_var**2+2._ki*g_var**2*f_var**5*h_var**2-2._ki*g_var**3*&
+ &f_var**4*h_var**2-3._ki*f_var**3*h_var*g_var**5+3._ki*f_va&
+ &r**4*h_var*g_var**4-3._ki*f_var**5*h_var*g_var**3+3._ki*f_&
+ &var**6*h_var*g_var**2+f_var**7*h_var*g_var+f_var**8*h_va&
+ &r-4._ki*f_var**3*h_var*g_var**3*c_var**2+2._ki*f_var**4*h_&
+ &var*c_var**2*g_var**2-f_var**5*h_var*g_var*c_var**2-2._ki&
+ &*f_var**5*h_var*c_var*g_var**2+6._ki*g_var**4*f_var**2*h_&
+ &var*c_var**2+8._ki*g_var**5*f_var**2*h_var*c_var-10._ki*g_&
+ &var**5*f_var*h_var*c_var**2-6._ki*f_var**3*h_var*c_var*g_&
+ &var**4+g_var**3*f_var**5*c_var-g_var**2*f_var**5*c_var**&
+ &2+10._ki*g_var**6*c_var**2*f_var+10._ki*g_var**5*c_var**3*&
+ &f_var-4._ki*g_var**6*f_var**2*c_var+3._ki*f_var**3*g_var**&
+ &5*c_var-8._ki*g_var**4*f_var**2*c_var**3-6._ki*g_var**5*f_&
+ &var**2*c_var**2-g_var*f_var**7*c_var-2._ki*g_var**2*f_var&
+ &**4*c_var**3-2._ki*g_var**4*f_var**4*c_var+g_var*f_var**5&
+ &*c_var**3+g_var*f_var**6*c_var**2+2._ki*g_var**4*f_var**3&
+ &*c_var**2+4._ki*g_var**3*f_var**3*c_var**3-g_var**5*f_var&
+ &**4-g_var*f_var**8-20._ki*g_var**6*c_var**3-g_var**3*f_va&
+ &r**6-g_var**2*f_var**7+g_var**4*f_var**5+g_var**6*f_var*&
+ &*3)/f_var**7/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki&
+ &))+1._ki/4._ki*(-1._ki+z)**3/g_var**4*log(e_var)/f_var*e_va&
+ &r**4+1._ki/24._ki*(-1._ki+z)**3*(2._ki*g_var**2*f_var-3._ki*g&
+ &_var*f_var**2+6._ki*f_var**3+6._ki*c_var**3+18._ki*c_var*h_&
+ &var*f_var-24._ki*c_var*f_var*g_var-3._ki*c_var**2*g_var+2.&
+ &_ki*c_var*g_var**2)/g_var**3/f_var
+ !
+ case(2)
+ !
+ fg=-1._ki/4._ki*c_var**4*(-1._ki+z)**3/f_var/d_var**4*log(c_v&
+ &ar)-1._ki/4._ki*(-1._ki+z)**3*h_var*(2._ki*d_var**3*f_var**4&
+ &*h_var**2+3._ki*d_var**3*f_var**5*h_var-2._ki*d_var**4*f_v&
+ &ar**3*h_var**2-6._ki*d_var**4*f_var**4*h_var+3._ki*f_var**&
+ &3*d_var**5*h_var-4._ki*c_var*d_var**3*f_var**4*h_var+10._k&
+ &i*d_var**5*c_var**2*f_var*h_var+4._ki*f_var**3*d_var**3*c&
+ &_var**2*h_var+2._ki*f_var**4*d_var**2*c_var**2*h_var-8._ki&
+ &*d_var**5*f_var**2*h_var*c_var-f_var**6*c_var**3+20._ki*d&
+ &_var**6*c_var**3-3._ki*d_var**4*f_var**5+3._ki*d_var**5*f_&
+ &var**4-d_var**6*f_var**3+d_var**3*f_var**6+f_var**5*d_va&
+ &r*c_var**2*h_var-2._ki*c_var*d_var**2*f_var**5*h_var-16._k&
+ &i*c_var**2*d_var**4*f_var**2*h_var+14._ki*c_var*d_var**4*&
+ &f_var**3*h_var+4._ki*d_var**6*f_var**2*c_var-c_var*d_var*&
+ &*2*f_var**6-50._ki*c_var**3*d_var**5*f_var-c_var*d_var**3&
+ &*f_var**5+9._ki*c_var*d_var**4*f_var**4-11._ki*c_var*d_var&
+ &**5*f_var**3+26._ki*c_var**2*d_var**5*f_var**2-10._ki*d_va&
+ &r**6*c_var**2*f_var-4._ki*f_var**3*c_var**3*d_var**3-2._ki&
+ &*f_var**4*c_var**3*d_var**2-f_var**5*c_var**3*d_var-18._k&
+ &i*f_var**3*d_var**4*c_var**2+f_var**5*d_var**2*c_var**2+&
+ &f_var**6*d_var*c_var**2+38._ki*f_var**2*d_var**4*c_var**3&
+ &)/f_var**7/d_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))&
+ &-1._ki/24._ki*(-1._ki+z)**3*c_var*(6._ki*c_var**2-3._ki*c_var&
+ &*d_var+2._ki*d_var**2)/d_var**3/f_var
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)**2*h_var**2*(3._ki*f_var**7-3._ki*f&
+ &_var**6*g_var+3._ki*f_var**5*g_var**2-3._ki*f_var**4*g_var&
+ &**3+3._ki*f_var**3*g_var**4+6._ki*f_var**6*c_var+2._ki*f_va&
+ &r**4*g_var**2*c_var-f_var**4*g_var*c_var**2-4._ki*f_var**&
+ &5*g_var*c_var-3._ki*g_var**5*f_var**2-10._ki*g_var**5*c_va&
+ &r**2+3._ki*c_var**2*f_var**5-2._ki*g_var**4*f_var**2*c_var&
+ &-2._ki*g_var**4*f_var*c_var**2+8._ki*g_var**5*f_var*c_var)&
+ &/f_var**6/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-&
+ &1._ki/12._ki*(-1._ki+z)**2*e_var**3*(-3._ki*f_var*e_var+c_va&
+ &r*g_var-3._ki*g_var*f_var)/f_var**2/g_var**4*log(e_var)+1&
+ &._ki/24._ki*(-1._ki+z)**2*(-18._ki*g_var**2*c_var*f_var+c_va&
+ &r**2*g_var**2-f_var**2*g_var**2+18._ki*f_var*c_var*h_var*&
+ &g_var+18._ki*c_var*h_var*f_var**2+6._ki*f_var*c_var**3+3._k&
+ &i*f_var**3*g_var+6._ki*f_var**4-32._ki*g_var*f_var**2*c_va&
+ &r-19._ki*g_var*f_var*c_var**2-2._ki*g_var*c_var**3)/f_var*&
+ &*2/g_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*c_var**4*(-1._ki+z)**2/f_var**2/d_var**3*log(&
+ &c_var)-1._ki/12._ki*(-1._ki+z)**2*h_var**2*(f_var**4*c_var*&
+ &*2+10._ki*d_var**3*c_var*f_var**2-8._ki*d_var**3*c_var**2*&
+ &f_var-2._ki*d_var*c_var*f_var**4+3._ki*f_var**2*d_var**4-6&
+ &._ki*d_var**3*f_var**3+3._ki*f_var**4*d_var**2-8._ki*d_var*&
+ &*4*c_var*f_var+10._ki*d_var**4*c_var**2)/d_var**3/f_var**&
+ &6*(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/24._ki*(-1._ki&
+ &+z)**2*c_var**2*(2._ki*c_var-d_var)/f_var**2/d_var**2
+ !
+ end select
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*(-1._ki+z)*h_var**3*(-3._ki*f_var**3*h_var*g_&
+ &var+3._ki*f_var**4*h_var+f_var**3*g_var*c_var+3._ki*f_var*&
+ &*3*g_var**2-3._ki*f_var**4*g_var+3._ki*h_var*f_var**2*g_va&
+ &r**2-2._ki*c_var*g_var**2*f_var**2-3._ki*f_var**2*g_var**3&
+ &-3._ki*g_var**3*f_var*h_var+3._ki*f_var*g_var**3*c_var+3._k&
+ &i*g_var**4*f_var-4._ki*g_var**4*c_var)/g_var**4/f_var**5*&
+ &(log(z)+log(1._ki-z)+z_log(s23,1._ki))+1._ki/12._ki*(-1._ki+z&
+ &)/g_var**4*log(e_var)/f_var**3*e_var**2*(-2._ki*g_var*f_v&
+ &ar*c_var**2+c_var**2*g_var**2+3._ki*c_var**2*f_var**2+6._k&
+ &i*c_var*f_var**3+4._ki*g_var*f_var**2*c_var-2._ki*g_var**2&
+ &*c_var*f_var+3._ki*f_var**4+6._ki*f_var**3*g_var+3._ki*f_va&
+ &r**2*g_var**2)+1._ki/24._ki*(-1._ki+z)/f_var**3*(9._ki*f_var&
+ &**4*g_var+6._ki*f_var**5+2._ki*g_var**2*c_var**3-18._ki*f_v&
+ &ar*g_var**3*c_var+18._ki*h_var*f_var*g_var**2*c_var-4._ki*&
+ &f_var*g_var*c_var**3-35._ki*f_var**2*g_var*c_var**2+18._ki&
+ &*h_var*f_var**3*c_var-40._ki*f_var**3*g_var*c_var+6._ki*f_&
+ &var**2*c_var**3+2._ki*f_var**3*g_var**2-18._ki*c_var**2*g_&
+ &var**2*f_var-54._ki*c_var*g_var**2*f_var**2+36._ki*f_var**&
+ &2*c_var*h_var*g_var)/g_var**3
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*c_var**4/d_var**2*(-1._ki+z)/f_var**3*log(c_&
+ &var)-1._ki/12._ki*(-1._ki+z)*h_var**3*(-3._ki*d_var*c_var*f_&
+ &var-f_var**2*c_var+3._ki*d_var*f_var*h_var-3._ki*d_var**2*&
+ &f_var+3._ki*f_var**2*d_var+4._ki*c_var*d_var**2)/f_var**5/&
+ &d_var**2*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1._ki/12._ki&
+ &*(-1._ki+z)/f_var**3*c_var**3/d_var
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(par3)
+ !
+ case(4)
+ !
+ select case(par4)
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/4._ki*h_var**4*(-g_var+f_var)*(f_var**2+g_var**2)/&
+ &f_var**4/g_var**4*(log(z)+log(1._ki-z)+z_log(s23,1._ki))-1&
+ &._ki/4._ki*e_var*(2._ki*g_var*f_var**2*e_var+c_var**2*g_var&
+ &**2+f_var**2*g_var**2+c_var**2*f_var**2+2._ki*c_var*f_var&
+ &**3+f_var**4)*(-f_var*e_var+c_var*g_var-g_var*f_var)/f_v&
+ &ar**4/g_var**4*log(e_var)+1._ki/24._ki*(15._ki*f_var**4*g_v&
+ &ar-18._ki*g_var**4*c_var+6._ki*f_var**5+6._ki*g_var**2*c_va&
+ &r**3-18._ki*g_var**3*c_var**2-72._ki*f_var*g_var**3*c_var+&
+ &54._ki*h_var*f_var*g_var**2*c_var+18._ki*g_var**3*c_var*h_&
+ &var-6._ki*f_var*g_var*c_var**3-51._ki*f_var**2*g_var*c_var&
+ &**2+18._ki*h_var*f_var**3*c_var-48._ki*f_var**3*g_var*c_va&
+ &r+6._ki*f_var**2*c_var**3+11._ki*f_var**3*g_var**2-57._ki*c&
+ &_var**2*g_var**2*f_var-106._ki*c_var*g_var**2*f_var**2+54&
+ &._ki*f_var**2*c_var*h_var*g_var)/f_var**3/g_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/4._ki*c_var**4/d_var/f_var**4*log(c_var)-1._ki/4._ki*&
+ &(log(z)+log(1._ki-z)+z_log(s23,1._ki))*h_var**4/f_var**4/d&
+ &_var
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ end if
+ !
+ else if (dim == "n+4") then
+ !
+ if (nb_par == 0) then
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*h_var**2*(f_var*h_var*g_var-f_var**2*h_var-g&
+ &_var*f_var*c_var-2._ki*f_var*g_var**2+2._ki*g_var*f_var**2&
+ &+2._ki*c_var*g_var**2)/f_var**3/g_var**2*(log(z)+log(1._ki&
+ &-z)+z_log(-s23,-1._ki))-1._ki/6._ki/g_var**2*log(-e_var)/f_&
+ &var*e_var**3-1._ki/18._ki*(6._ki*f_var*c_var+3._ki*c_var**2-&
+ &5._ki*f_var*g_var+3._ki*f_var**2)/f_var/g_var
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*c_var**3/d_var**2/f_var*log(-c_var)-1._ki/6._ki&
+ &*h_var**2*(c_var*f_var*d_var+f_var**2*c_var-d_var*f_var*&
+ &h_var+2._ki*d_var**2*f_var-2._ki*d_var*f_var**2-2._ki*c_var&
+ &*d_var**2)/f_var**3/d_var**2*(log(z)+log(1._ki-z)+z_log(-&
+ &s23,-1._ki))+1._ki/6._ki*c_var**2/f_var/d_var
+ !
+ end select
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par4)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/24._ki*h_var**3*(-2._ki*f_var*h_var*g_var+f_var**2*h&
+ &_var+2._ki*c_var*g_var*f_var+4._ki*f_var*g_var**2-2._ki*f_v&
+ &ar**2*g_var-6._ki*c_var*g_var**2)/f_var**4/g_var**2*(log(&
+ &z)+log(1._ki-z)+z_log(-s23,-1._ki))-1._ki/24._ki/g_var**2*lo&
+ &g(-e_var)/f_var**2*e_var**4-1._ki/144._ki/f_var**2*(-13._ki&
+ &*f_var**2*g_var+6._ki*f_var**3+6._ki*c_var**3+18._ki*c_var*&
+ &h_var*f_var-18._ki*c_var*g_var*f_var)/g_var
+ !
+ case(2)
+ !
+ fg=1._ki/24._ki*c_var**3*(c_var*d_var+2._ki*c_var*f_var+4._ki*&
+ &d_var*f_var)/d_var**3/f_var**2*log(-c_var)+1._ki/24._ki*h_&
+ &var**3*(-2._ki*f_var**2*c_var*d_var-2._ki*c_var*f_var**3+d&
+ &_var*f_var**2*h_var+2._ki*d_var**2*f_var**2+2._ki*f_var**3&
+ &*d_var-2._ki*c_var*d_var**2*f_var+2._ki*f_var*d_var**2*h_v&
+ &ar-4._ki*d_var**3*f_var+6._ki*c_var*d_var**3)/f_var**4/d_v&
+ &ar**3*(log(z)+log(1._ki-z)+z_log(-s23,-1._ki))+1._ki/24._ki*&
+ &c_var**2*(2._ki*c_var*f_var+c_var*d_var+3._ki*d_var*f_var)&
+ &/d_var**2/f_var**2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/12._ki*z*h_var**2*(-2._ki*f_var**5*g_var+3._ki*f_var&
+ &**4*g_var**2-3._ki*f_var**3*g_var**3+f_var**6+3._ki*f_var*&
+ &*2*g_var**4+6._ki*g_var**4*c_var**2+2._ki*f_var**2*c_var*g&
+ &_var**3-2._ki*f_var**4*c_var*g_var-6._ki*f_var*g_var**4*c_&
+ &var+c_var**2*f_var**4+2._ki*c_var*f_var**5)/f_var**5/g_va&
+ &r**3*(log(z)+log(1._ki-z)+z_log(-s23,-1._ki))+1._ki/12._ki*z&
+ &/g_var**3*log(-e_var)/f_var*e_var**4+1._ki/72._ki*z*(7._ki*&
+ &f_var*g_var**2-3._ki*f_var**2*g_var+6._ki*f_var**3+6._ki*c_&
+ &var**3+18._ki*c_var*h_var*f_var-24._ki*c_var*g_var*f_var-3&
+ &._ki*c_var**2*g_var)/f_var/g_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/12._ki*z*c_var**4/d_var**3/f_var*log(-c_var)+1._ki/&
+ &12._ki*z*h_var**2*(c_var**2*f_var**4+8._ki*c_var*f_var**2*&
+ &d_var**3-6._ki*c_var**2*d_var**3*f_var-2._ki*c_var*f_var**&
+ &4*d_var+3._ki*f_var**2*d_var**4-6._ki*f_var**3*d_var**3+3.&
+ &_ki*f_var**4*d_var**2-6._ki*d_var**4*c_var*f_var+6._ki*c_va&
+ &r**2*d_var**4)/f_var**5/d_var**3*(log(z)+log(1._ki-z)+z_l&
+ &og(-s23,-1._ki))-1._ki/24._ki*z*c_var**2*(2._ki*c_var-d_var)&
+ &/f_var/d_var**2
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/12._ki*(z-1)*h_var**2*(-2._ki*f_var**5*g_var+3._ki*f_&
+ &var**4*g_var**2-3._ki*f_var**3*g_var**3+f_var**6+3._ki*f_v&
+ &ar**2*g_var**4+6._ki*g_var**4*c_var**2+2._ki*f_var**2*c_va&
+ &r*g_var**3-2._ki*f_var**4*c_var*g_var-6._ki*f_var*g_var**4&
+ &*c_var+c_var**2*f_var**4+2._ki*c_var*f_var**5)/f_var**5/g&
+ &_var**3*(log(z)+log(1._ki-z)+z_log(-s23,-1._ki))-1._ki/12._k&
+ &i*(z-1)/g_var**3*log(-e_var)/f_var*e_var**4-1._ki/72._ki*(&
+ &z-1)*(7._ki*f_var*g_var**2-3._ki*f_var**2*g_var+6._ki*f_var&
+ &**3+6._ki*c_var**3+18._ki*c_var*h_var*f_var-24._ki*c_var*g_&
+ &var*f_var-3._ki*c_var**2*g_var)/f_var/g_var**2
+ !
+ case(2)
+ !
+ fg=1._ki/12._ki*c_var**4/d_var**3*(z-1)/f_var*log(-c_var)-1.&
+ &_ki/12._ki*(z-1)*h_var**2*(c_var**2*f_var**4+8._ki*c_var*f_&
+ &var**2*d_var**3-6._ki*c_var**2*d_var**3*f_var-2._ki*c_var*&
+ &f_var**4*d_var+3._ki*f_var**2*d_var**4-6._ki*f_var**3*d_va&
+ &r**3+3._ki*f_var**4*d_var**2-6._ki*d_var**4*c_var*f_var+6.&
+ &_ki*c_var**2*d_var**4)/f_var**5/d_var**3*(log(z)+log(1._ki&
+ &-z)+z_log(-s23,-1._ki))+1._ki/24._ki*(z-1)*c_var**2*(2._ki*c&
+ &_var-d_var)/f_var/d_var**2
+ !
+ end select
+ !
+ case(4)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/24._ki*h_var**3*(-2._ki*f_var**2*h_var*g_var+2._ki*f_&
+ &var**3*h_var+c_var*f_var**2*g_var+3._ki*g_var**2*f_var**2&
+ &-3._ki*g_var*f_var**3+2._ki*f_var*g_var**2*h_var-2._ki*c_va&
+ &r*g_var**2*f_var-3._ki*g_var**3*f_var+3._ki*g_var**3*c_var&
+ &)/g_var**3/f_var**4*(log(z)+log(1._ki-z)+z_log(-s23,-1._ki&
+ &))+1._ki/24._ki*e_var**3*(-2._ki*f_var*e_var+c_var*g_var-3.&
+ &_ki*f_var*g_var)/g_var**3/f_var**2*log(-e_var)-1._ki/144._k&
+ &i/f_var**2*(-13._ki*g_var**2*f_var**2-36._ki*c_var*g_var**&
+ &2*f_var+36._ki*f_var*c_var*h_var*g_var+36._ki*c_var*h_var*&
+ &f_var**2+12._ki*f_var*c_var**3+12._ki*g_var*f_var**3+12._ki&
+ &*f_var**4-36._ki*c_var**2*g_var*f_var-6._ki*c_var**3*g_var&
+ &-54._ki*c_var*f_var**2*g_var)/g_var**2
+ !
+ case(2)
+ !
+ fg=-1._ki/24._ki*c_var**4/d_var**2/f_var**2*log(-c_var)-1._ki&
+ &/24._ki*h_var**3*(-2._ki*c_var*f_var*d_var-c_var*f_var**2+&
+ &2._ki*f_var*d_var*h_var-3._ki*f_var*d_var**2+3._ki*f_var**2&
+ &*d_var+3._ki*d_var**2*c_var)/f_var**4/d_var**2*(log(z)+lo&
+ &g(1._ki-z)+z_log(-s23,-1._ki))-1._ki/24._ki/f_var**2*c_var**&
+ &3/d_var
+ !
+ end select
+ !
+ end select
+ !
+ end if
+ !
+ end if
+ end function fg
+ !
+end module function_4p3m
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql13.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql13.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql13.f90 (revision 119)
@@ -0,0 +1,537 @@
+!
+!****h* src/integrals/four_point/function_4p_ql13
+! NAME
+!
+! Module function_4p_ql13
+!
+! USAGE
+!
+! use function_4p_ql13
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 12
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql13, f4p_ql13_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql13
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ !~ use more_integ_info
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql13,f4p_ql13_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql13/f4p_ql13
+ ! NAME
+ !
+ ! Function f4p_ql13
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql13(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql13(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql13
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql13
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql13 = 0._ki
+ coupure_4p_ql13 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql13) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql13 (in file f4p_ql13.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql13'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql13) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql13_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql13= a4p_ql13_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql13: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql13: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql13 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql13 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql13
+ !
+ !****f* src/integrals/four_point/function_4p_ql13/f4p_ql13_c
+ ! NAME
+ !
+ ! Function f4p_ql13_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql13_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql13
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql13
+ !
+ !*****
+ function f4p_ql13_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql13_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql13(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql13_c)
+ !
+ end function f4p_ql13_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql13/a4p_ql13_n
+ ! NAME
+ !
+ ! recursive function a4p_ql13_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql13_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql13_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql13_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql13_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,m3sq,m4sq,deno,m3mu,s3cut
+ complex(ki) :: ds12,ds23,dp2,dp3,dp4,dm3,dm4,logm3,logm4,logmu3,logmu4!,logsm,logsmu
+ complex(ki) :: gaplus43,gaplus34,gaminus43,gaminus34,m34,m43
+ complex(ki) :: anacon1,anacon2,anacon3,anacon4,anacon5,anacon6,anacon7,eta1,eta2,eta3,eta4,eta5,eta6,eta7
+!
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ s3cut=1.e-8_ki
+ !
+ ! relabel to QCDL conventions
+ m3sq=m2s
+ m4sq=m3s
+ dm3=m2s-i_*del
+ dm4=m3s-i_*del
+ !
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp2= s2 +i_*del;
+ dp3= s3 +i_*del;
+ dp4= s4 +i_*del;
+!
+ logm3=log((dm3-ds12)/dm3)
+ logm4=log((dm4-ds23)/dm3)
+ logmu3=log(dm3/mu2)
+ logmu4=log(dm4/mu2)
+ m3mu=sqrt(m3sq*mu2)
+!
+ deno=(s12-m3sq)*(s23-m4sq)-(m3sq-s2)*(m4sq-s4)
+ m34=1._ki-(dm3-dm4)/dp3
+ m43=1._ki-(dm4-dm3)/dp3
+ gaplus34=(m34+Sqrt(m34**2-4*dm4/dp3))/2._ki
+ gaminus34=(m34-Sqrt(m34**2-4*dm4/dp3))/2._ki
+ gaplus43=(m43+Sqrt(m43**2-4*dm3/dp3))/2._ki
+ gaminus43=(m43-Sqrt(m43**2-4*dm3/dp3))/2._ki
+ !
+ eta1=log( (dm3-dp2)/(dm4-ds23)*gaplus34/(gaplus34-1._ki) ) &
+ & - log( (dm3-dp2)/(dm4-ds23) ) - log( gaplus34/(gaplus34-1._ki) )
+ eta2=log( (dm3-dp2)/(dm4-ds23)*gaminus34/(gaminus34-1._ki) ) &
+ & - log( (dm3-dp2)/(dm4-ds23) ) - log( gaminus34/(gaminus34-1._ki) )
+ eta3=log( (dm4-dp4)/(dm3-ds12)*gaplus43/(gaplus43-1._ki) ) &
+ & - log( (dm4-dp4)/(dm3-ds12) ) - log( gaplus43/(gaplus43-1._ki) )
+ eta4=log( (dm4-dp4)/(dm3-ds12)*gaminus43/(gaminus43-1._ki) ) &
+ & - log( (dm4-dp4)/(dm3-ds12) ) - log( gaminus43/(gaminus43-1._ki) )
+ eta5=log( (dm3-dp2)/(dm3-ds12)*(dm4-dp4)/(dm4-ds23) ) &
+ & - log( (dm3-dp2)/(dm3-ds12) ) - log( (dm4-dp4)/(dm4-ds23) )
+
+ anacon1=cdilog(1._ki-(dm3-dp2)/(dm4-ds23)*gaplus34/(gaplus34-1._ki))+ &
+ & eta1*Log(1._ki-(dm3-dp2)/(dm4-ds23)*gaplus34/(gaplus34-1._ki))
+ anacon2=cdilog(1._ki-(dm3-dp2)/(dm4-ds23)*gaminus34/(gaminus34-1._ki))+ &
+ & eta2*Log(1._ki-(dm3-dp2)/(dm4-ds23)*gaminus34/(gaminus34-1._ki))
+ anacon3=cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*gaplus43/(gaplus43-1._ki))+ &
+ & eta3*log(1-(dm4-dp4)/(dm3-ds12)*gaplus43/(gaplus43-1._ki))
+ anacon4=cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*gaminus43/(gaminus43-1._ki))+ &
+ & eta4*log(1-(dm4-dp4)/(dm3-ds12)*gaminus43/(gaminus43-1._ki))
+ anacon5=cdilog(1._ki-(dm3-dp2)/(dm3-ds12)*(dm4-dp4)/(dm4-ds23))+ &
+ eta5*Log(1._ki-(dm3-dp2)/(dm3-ds12)*(dm4-dp4)/(dm4-ds23))
+ !
+ res_4p_ql13_n(1) = 0._ki
+ res_4p_ql13_n(2) = 0._ki
+ ! case p3^2 > delta
+ if (abs(s3) > s3cut) then
+ !
+ res_4p_ql13_n(3) = real( (log((dm3-dp2)/mu2)+log((dm4-dp4)/mu2) &
+ & -log((dm4-ds23)/mu2)-log((dm3-ds12)/mu2))/deno )
+ res_4p_ql13_n(4) = aimag( (log((dm3-dp2)/mu2)+log((dm4-dp4)/mu2) &
+ & -log((dm4-ds23)/mu2)-log((dm3-ds12)/mu2))/deno )
+ res_4p_ql13_n(5) = real( ( -2*cdilog(1._ki-(dm3-dp2)/(dm3-ds12)) &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23)) &
+ & -anacon1-anacon2-anacon3-anacon4+2*anacon5 &
+ & +2*log((dm3-ds12)/mu2)*log((dm4-ds23)/mu2) &
+ & -log((dm3-dp2)/mu2)**2-log((dm4-dp4)/mu2)**2 &
+ & +log((dm3-dp2)/(dm4-ds23))*log(dm3/mu2) &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/mu2) &
+ & - log(gaplus34/(gaplus34-1._ki))**2/2._ki &
+ & - log(gaminus34/(gaminus34-1._ki))**2/2._ki )/deno )
+ res_4p_ql13_n(6) = aimag( ( -2*cdilog(1._ki-(dm3-dp2)/(dm3-ds12)) &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23)) &
+ & -anacon1-anacon2-anacon3-anacon4+2*anacon5 &
+ & +2*log((dm3-ds12)/mu2)*log((dm4-ds23)/mu2) &
+ & -log((dm3-dp2)/mu2)**2-log((dm4-dp4)/mu2)**2 &
+ & +log((dm3-dp2)/(dm4-ds23))*log(dm3/mu2) &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/mu2) &
+ & - log(gaplus34/(gaplus34-1._ki))**2/2._ki &
+ & - log(gaminus34/(gaminus34-1._ki))**2/2._ki )/deno )
+ !
+ else ! limit p3^2 -> 0
+ !
+ eta6=log( (dm3-dp2)/(dm4-ds23)*dm4/dm3 ) &
+ & - log( (dm3-dp2)/(dm4-ds23) ) - log( dm4/dm3 )
+ eta7=log( (dm4-dp4)/(dm3-ds12)*dm3/dm4 ) &
+ & - log( (dm4-dp4)/(dm3-ds12) ) - log( dm3/dm4 )
+ anacon6=cdilog(1._ki-(dm3-dp2)/(dm4-ds23)*dm4/dm3)+ &
+ & eta6*Log(1._ki-(dm3-dp2)/(dm4-ds23)*dm4/dm3)
+ anacon7=cdilog(1._ki-(dm4-dp4)/(dm3-ds12)*dm3/dm4)+ &
+ & eta7*log(1-(dm4-dp4)/(dm3-ds12)*dm3/dm4)
+!
+ res_4p_ql13_n(3) = real( (log((dm3-dp2)/mu2)+log((dm4-dp4)/mu2) &
+ & -log((dm4-ds23)/mu2)-log((dm3-ds12)/mu2))/deno )
+ res_4p_ql13_n(4) = aimag( (log((dm3-dp2)/mu2)+log((dm4-dp4)/mu2) &
+ & -log((dm4-ds23)/mu2)-log((dm3-ds12)/mu2))/deno )
+ res_4p_ql13_n(5) = real( ( -2*cdilog(1._ki-(dm3-dp2)/(dm3-ds12)) &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23)) &
+ & - cdilog(1._ki-(dm4-dp4)/(dm3-ds12)) &
+ & - cdilog(1._ki-(dm3-dp2)/(dm4-ds23)) &
+ & - anacon6 - anacon7 +2*anacon5 &
+ & +2*log((dm3-ds12)/mu2)*log((dm4-ds23)/mu2) &
+ & -log((dm3-dp2)/mu2)**2-log((dm4-dp4)/mu2)**2 &
+ & +log((dm3-dp2)/(dm4-ds23))*log(dm3/mu2) &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/mu2) &
+ & - log(dm4/dm3)**2/2._ki )/deno )
+ res_4p_ql13_n(6) = aimag( ( -2*cdilog(1._ki-(dm3-dp2)/(dm3-ds12)) &
+ & -2*cdilog(1._ki-(dm4-dp4)/(dm4-ds23)) &
+ & - cdilog(1._ki-(dm4-dp4)/(dm3-ds12)) &
+ & - cdilog(1._ki-(dm3-dp2)/(dm4-ds23)) &
+ & - anacon6 - anacon7 +2*anacon5 &
+ & +2*log((dm3-ds12)/mu2)*log((dm4-ds23)/mu2) &
+ & -log((dm3-dp2)/mu2)**2-log((dm4-dp4)/mu2)**2 &
+ & +log((dm3-dp2)/(dm4-ds23))*log(dm3/mu2) &
+ & +log((dm4-dp4)/(dm3-ds12))*log(dm4/mu2) &
+ & - log(dm4/dm3)**2/2._ki )/deno )
+ !
+ end if ! end p3^2 > s3cut
+ !
+ else ! non-scalar case
+ !
+ !~ call print_error('In function f4p_ql13: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql13: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql13_n
+ !
+ !
+end module function_4p_ql13
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/generic_function_4p.f90.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/generic_function_4p.f90.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/generic_function_4p.f90.in (revision 119)
@@ -0,0 +1,3029 @@
+!****h* src/integrals/four_point/generic_function_4p
+!
+!~ changed 13.5.10 to include globally defined scale mu2_scale_par
+!
+!~ 24.6.2010: uses Andre van Hameren's OneLOop for finite D0
+!
+! NAME
+!
+! Module generic_function_4p
+!
+! USAGE
+!
+! use generic_function_4p
+!
+! DESCRIPTION
+!
+! This module contains the generic routines to compute the
+! four point functions in n+2 and n+4 dimensions. It can compute
+! the zero mass, one mass, two mass adjacent, two mass opposite, three mass
+! and four mass four point functions with massless internal lines
+! It can also calculate the IR divergent boxes with massive internal lines, but
+! ONLY in the scalar case.
+! For the latter, the (4-2*eps)-dim expressions are implemented
+!
+!
+! OUTPUT
+!
+! It exports three public routines:
+! * f4p -- a function to compute the four point function in n dimensions
+! (used donly if internal masses are present)
+! * f4p_np2 -- a function to compute the four point function in n+2 dimensions
+! * f4p_np4 -- a function to compute the four point function in n+4 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s (src/kinematic/matrice_s.f90) ( only : dim_s, set_ref )
+! * s_matrix_type (src/module/s_matrix_type.f90)
+! * array (src/module/array.f90)
+! * tri_croissant (src/module/tri.f90)
+! * constante (src/module/constante.f90)
+! * function_4p1m (src/integrals/four_point/function_4p1m.f90)
+! * function_4p2m_opp (src/integrals/four_point/function_4p2m_opp.f90)
+! * function_4p2m_adj (src/integrals/four_point/function_4p2m_adj.f90)
+! * function_4p3m (src/integrals/four_point/function_4p3m.f90)
+! * function_4p4m (src/integrals/four_point/function_4p4m.f90)
+! * cache (src/module/cache.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/generic_function_3p.f90)
+! * parametre (src/module/parametre.f90), only : coupure_3p2m,coupure_3p3m,coupure_4p1m,
+! coupure_4p2m_opp,coupure_4p2m_adj,coupure_4p3m,coupure_4p4m
+! * equal (src/module/equal.f90)
+!
+
+!*****
+module generic_function_4p
+ !
+ use precision_golem, only: ki
+ use matrice_s
+ use s_matrix_type
+ use array
+ use tri_croissant
+ use constante
+ use function_4p1m
+ use function_4p2m_opp
+ use function_4p2m_adj
+ use function_4p3m
+ use function_4p4m
+ use function_4p2m_3mi_onshell
+ use function_4p_ql6
+ use function_4p_ql7
+ use function_4p_ql8
+ use function_4p_ql9
+ use function_4p_ql10
+ use function_4p_ql11
+ use function_4p_ql12
+ use function_4p_ql13
+ use function_4p_ql14
+ use function_4p_ql15
+ use function_4p_ql16
+ use form_factor_type
+ use cache
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use generic_function_3p
+ use parametre , only : coupure_4p1m,coupure_4p2m_opp,&
+ coupure_4p2m_adj,coupure_4p3m,coupure_4p4m,&
+ mu2_scale_par,olo,withlt
+ use equal
+
+ !---#[ avh_olo:
+ use avh_olo, only: olo_d0, olo_scale, olo_onshell
+ !---#] avh_olo:
+ implicit none
+ !
+ private
+ !
+ integer, dimension(2) :: set_tot
+ !
+ interface f4p_sca
+ !
+ module procedure f4p_sca_p
+ module procedure f4p_sca_r, f4p_sca_c
+ !
+ end interface
+ !
+ public :: f4p, f4p_np2, f4p_np4 !!! These functions return complex arrays
+ !
+ ! added to include LT option, Jan2011
+@case_with_lt@ interface
+@case_with_lt@ function D0(p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4)
+@case_with_lt@ use precision_golem, only: ki_lt
+@case_with_lt@ implicit none
+@case_with_lt@ real(ki_lt), intent(in) :: p1, p2, p3, p4, p1p2, p2p3
+@case_with_lt@ real(ki_lt), intent(in) :: m1, m2, m3, m4
+@case_with_lt@ complex(ki_lt) :: D0
+@case_with_lt@ end function D0
+@case_with_lt@ end interface
+ !
+@case_with_lt@ interface
+@case_with_lt@ function D0C(p1, p2, p3, p4, p1p2, p2p3, m1, m2, m3, m4)
+@case_with_lt@ use precision_golem, only: ki_lt
+@case_with_lt@ implicit none
+@case_with_lt@ real(ki_lt), intent(in) :: p1, p2, p3, p4, p1p2, p2p3
+@case_with_lt@ complex(ki_lt), intent(in) :: m1, m2, m3, m4
+@case_with_lt@ complex(ki_lt) :: D0C
+@case_with_lt@ end function D0C
+@case_with_lt@ end interface
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np2
+ ! NAME
+ !
+ ! Function f4p_np2
+ !
+ ! USAGE
+ !
+ ! complex = f4p_np2(s_mat,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes recursively the generic four point function in n+2 dimensions,
+ ! with or without Feynman parameters in the numerator using the formula of
+ ! JHEP 10 (2005) 015.
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type (s_matrix_poly), giving the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * b_pin -- an integer which represents the set of the pinched propagators
+ ! * parf1 -- an integer (optional), the label of the first Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) number
+ !
+ ! NOTE
+ !
+ ! This function has been changed! It accepts only a s_matrix_poly-type as input
+ ! and returns a complex number instead of a real array!
+ !
+ !*****
+ !
+ recursive function f4p_np2(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4,test_numeric) result(res_4p_np2)
+ !
+ type(s_matrix_poly), intent (in) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ integer, intent (in), optional :: parf1,parf2,parf3,parf4
+ logical, intent (in), optional :: test_numeric
+ complex(ki) :: res_4p_np2
+ !
+ integer :: par1,par2,par3,par4
+ integer :: parn1,parn2,parn3,parn4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ integer :: taille
+ integer :: nb_par
+ real(ki) :: arg3,arg4,arg5,arg6
+ real(ki) :: m1s,m2s,m3s,m4s,s1,s2,s3,s4
+ complex(ki) :: temp0
+ complex(ki), dimension(3) :: temp1,temp2,temp3,temp4
+ integer :: j,m1,m2,m3,m4
+ integer, dimension(4) :: s
+ integer :: ib,b_pro_mj,pro_dim
+ logical :: not_numeric
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+ !
+ sortie : if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ res_4p_np2 = czero
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'something wrong with par1,..,par4'
+ call catch_exception(0)
+ !
+ else sortie
+ !
+ !
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini = (/par1,par2,par3,par4/)
+ !
+ nb_par = count(mask=z_param_ini/=0)
+ !
+ if (b_pro < 256) then
+ s = bit_sets(b_pro*8:b_pro*8+3)
+ else
+ s = unpackb(b_pro,4)
+ end if
+ !
+ !
+ ! test for switch to numerical evaluation needs to be performed only once
+ !
+ switch_to_numerics: if (present(test_numeric) ) then
+ !
+ not_numeric = test_numeric !this should always be true...
+ !
+ else switch_to_numerics
+ !
+ ! make sure numerical branch is never entered for cases where it is not implemented
+
+ ! NB: This order of the statements
+ ! reduces the number of comparisons required.
+ !
+ ! numerical branch not implemented for complex masses yet:
+ if (iand(s_mat_p%b_cmplx, b_pro) .ne. 0 ) then
+ !
+ not_numeric = .true.
+ !
+ else if (iand(s_mat_p%b_zero, b_pro) .ne. b_pro ) then !case internal masses
+ !
+ not_numeric = .true.
+ !
+ else
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! To get the s1..s4, only the real parts of the arguments are needed!
+ !
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ m1s = -s_mat_p%pt_real(m1,m1)/2._ki
+ m2s = -s_mat_p%pt_real(m2,m2)/2._ki
+ m3s = -s_mat_p%pt_real(m3,m3)/2._ki
+ m4s = -s_mat_p%pt_real(m4,m4)/2._ki
+ !
+ !
+ s1=arg3+m1s+m4s
+ s2=arg4+m1s+m2s
+ s3=arg5+m2s+m3s
+ s4=arg6+m3s+m4s
+ !
+ ! case 4 non-light-like legs
+ if ( .not.(equal_real(s1,zero)) .and. &
+ & .not.(equal_real(s2,zero)) .and. &
+ & .not.(equal_real(s3,zero)) .and. &
+ & .not.(equal_real(s4,zero))) then
+ not_numeric = .true.
+ else
+ not_numeric=.not. ( abs(norma_sumb(b_pin)) < coupure(s_mat_p,s) )
+ end if
+ !
+ end if
+ !
+ end if switch_to_numerics
+ !
+ !
+ taille = dim_s - size(s)
+ !
+ select case(taille)
+ !
+ case(0)
+ !
+ set_tot = 0
+ !
+ case(1)
+ set_tot(1) = 0
+
+ if (b_pin < 256) then
+ set_tot(2) = bit_sets(b_pin*8)
+ else
+ set_tot(2:2) = unpackb(b_pin,1)
+ end if
+ !
+ !
+ case(2)
+ if (b_pin < 256) then
+ set_tot(:) = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set_tot(:) = unpackb(b_pin,2)
+ end if
+ end select
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ cache : if ( computed_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4) ) then
+ !
+ res_4p_np2 = results_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4)
+ !
+ else cache
+ !
+ numeric : if ( not_numeric ) then
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ if (nb_par == 3) then
+ !
+ temp0 = b(par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par2,parf2=par3,test_numeric = not_numeric) &
+ + b(par3,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par2,parf2=par4,test_numeric = not_numeric) &
+ + b(par2,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par3,parf2=par4,test_numeric = not_numeric) &
+ - ( inv_s(par2,par3,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par4,test_numeric = not_numeric) &
+ + inv_s(par2,par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par3,test_numeric = not_numeric) &
+ + inv_s(par3,par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf1=par2,test_numeric = not_numeric) )/3._ki
+ !
+ temp1(:) = czero
+ temp2(:) = czero
+ temp3(:) = czero
+ temp4(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ first_pinch: do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j,b_pin)*f3p(s_mat_p,b_pro_mj,par2, &
+ &par3,par4)/2._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ temp1 = temp1 + inv_s(j,par4,b_pin)*f3p(s_mat_p,b_pro_mj,par2,par3)/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ temp2 = temp2 + inv_s(j,par3,b_pin)*f3p(s_mat_p,b_pro_mj,par2,par4)/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ temp3 = temp3 + inv_s(j,par2,b_pin)*f3p(s_mat_p,b_pro_mj,par3,par4)/6._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do first_pinch
+ !
+ res_4p_np2 = ( temp0 + temp1(3) + temp2(3) + temp3(3) &
+ & + temp4(3) )/2._ki/sumb(b_pin)
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par == 2) then
+ !
+ temp0 = b(par3,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf4=par4,test_numeric = not_numeric) &
+ &+ b(par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,parf4=par3,test_numeric = not_numeric) &
+ &- inv_s(par3,par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,test_numeric = not_numeric)/2._ki
+ !
+ temp1(:) = czero
+ temp2(:) = czero
+ temp3(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ temp3 = temp3 - b(j,b_pin)*f3p(s_mat_p,b_pro_mj,par3,par4)/2._ki
+ !
+ end if
+ !
+ if (j /= par3) then
+ !
+ temp1 = temp1 + inv_s(j,par4,b_pin)*f3p(s_mat_p,b_pro_mj,par3)/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ temp2 = temp2 + inv_s(j,par3,b_pin)*f3p(s_mat_p,b_pro_mj,par4)/4._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np2 = (temp0 + temp1(3) + temp2(3) + temp3(3)) &
+ &*2._ki/3._ki/sumb(b_pin)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par == 1) then
+ !
+ temp0 = b(par4,b_pin)*f4p_np2(s_mat_p,b_pro,b_pin,test_numeric = not_numeric)
+ temp1(:) = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (j /= par4) then
+ !
+ temp2 = temp2 - b(j,b_pin)*f3p(s_mat_p,b_pro_mj,par4)/2._ki
+ !
+ end if
+ !
+ temp1 = temp1 + inv_s(j,par4,b_pin)*f3p(s_mat_p,b_pro_mj)/2._ki
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np2 = (temp0 + temp1(3) + temp2(3))/sumb(b_pin)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ else
+ !
+ res_4p_np2 = f4p_np2_sca(s_mat_p,b_pro,b_pin)
+ !
+ end if
+ !
+ else numeric
+ !
+ where (z_param_out /= 0)
+ !
+ z_param_out = locateb(z_param_out,b_pro)
+ !
+ elsewhere
+ !
+ z_param_out = 0
+ !
+ end where
+ !
+ parn1 = z_param_out(1)
+ parn2 = z_param_out(2)
+ parn3 = z_param_out(3)
+ parn4 = z_param_out(4)
+ !
+ res_4p_np2 = f4p_np2_numeric(s_mat_p,b_pro,parn1,parn2,parn3,parn4)
+ !
+ end if numeric
+ !
+ computed_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4) = .true.
+ results_f4p_np2(set_tot(1),set_tot(2),&
+ &par2,par3,par4) = res_4p_np2
+ !
+ end if cache
+ !
+ end if sortie
+ !
+ end function f4p_np2
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np2_sca
+ ! NAME
+ !
+ ! Function f4p_np2_sca
+ !
+ ! USAGE
+ !
+ ! complex = f4p_np2_sca(s_mat_p,b_pro,b_pin)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic four point function in n+2 dimensions,
+ ! without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a type s_matrix_poly object, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) number!
+ !
+ ! NOTE
+ !
+ ! This function now returns a complex number instaed of a real array!
+ !
+ !*****
+ !
+ function f4p_np2_sca(s_mat_p,b_pro,b_pin)
+ !
+ type(s_matrix_poly), intent(in) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ complex(ki) :: f4p_np2_sca
+ !
+ if (iand(s_mat_p%b_zero,b_pro) .eq. b_pro) then !!! no internal masses
+ !
+ f4p_np2_sca = f4p_np2_sca_massless(s_mat_p%pt_real, b_pro, b_pin)
+ !
+ else
+ !
+ f4p_np2_sca = f4p_np2_sca_massive(s_mat_p, b_pro, b_pin)
+ !
+ end if
+ !
+ end function f4p_np2_sca
+ !
+ function f4p_np2_sca_massless(s_mat_r,b_pro,b_pin)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro,b_pin
+ complex(ki) :: f4p_np2_sca_massless
+ !
+ integer :: par1,par2,par3,par4
+ real(ki), dimension(4) :: temp
+ complex(ki), dimension(2) :: temp_cmplx
+ !
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ logical, dimension(3:6) :: argz
+ integer, dimension(4) :: s
+ integer :: dim_pro
+ !
+ if (b_pro < 256) then
+ dim_pro = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+dim_pro-1)
+ else
+ dim_pro = countb(b_pro)
+ s = unpackb(b_pro,dim_pro)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ arg1 = s_mat_r(m2,m4)
+ arg2 = s_mat_r(m1,m3)
+ arg3 = s_mat_r(m1,m4)
+ arg4 = s_mat_r(m1,m2)
+ arg5 = s_mat_r(m2,m3)
+ arg6 = s_mat_r(m3,m4)
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ argz(3) = equal_real(arg3,zero)
+ argz(4) = equal_real(arg4,zero)
+ argz(5) = equal_real(arg5,zero)
+ argz(6) = equal_real(arg6,zero)
+ !
+ ! only case with no internal masses:
+ !
+ if ( all(argz) ) then
+ !
+ temp = f4p1m("n+2",arg1,arg2,0._ki,par1,par2,par3,par4)
+ !
+ ! one external mass
+ !
+ else if ( argz(4) .and. argz(5) .and. argz(6) ) then
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(5) .and. argz(6) ) then
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg4,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(4) .and. argz(6) ) then
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg5,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(4) .and. argz(5) ) then
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg6,par1,par2,par3,par4)
+ !
+ ! two adjacent external masses
+ !
+ else if ( argz(3) .and. argz(6) ) then
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg4,arg5,par1,par2,par3,par4)
+ !
+ else if ( argz(4) .and. argz(5) ) then
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(5) .and. argz(6) ) then
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(4) ) then
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg5,arg6,par1,par2,par3,par4)
+ !
+ ! two opposite external masses
+ !
+ else if ( argz(4) .and. argz(6) ) then
+ !
+ temp = f4p2m_opp("n+2",arg2,arg1,arg5,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(3) .and. argz(5) ) then
+ !
+ temp = f4p2m_opp("n+2",arg1,arg2,arg4,arg6,par1,par2,par3,par4)
+ !
+ ! three external masses
+ !
+ else if ( argz(3) ) then
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ else if ( argz(4) ) then
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg5,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( argz(5) ) then
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg6,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( argz(6) ) then
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg3,arg4,arg5,par1,par2,par3,par4)
+ !
+ ! four external masses
+ !
+ else
+ !
+ temp = f4p4m("n+2",arg1,arg2,arg3,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ end if ! end massless case
+ !
+ temp_cmplx(1) = temp(1) + i_ * temp(2)
+ temp_cmplx(2) = temp(3) + i_ * temp(4)
+ !
+ !
+ f4p_np2_sca_massless = temp_cmplx(2)
+ !
+ !
+ end function f4p_np2_sca_massless
+ !
+ !
+ function f4p_np2_sca_massive(s_mat_p,b_pro,b_pin)
+ !
+ type(s_matrix_poly), intent (in) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ complex(ki) :: f4p_np2_sca_massive
+ !
+ integer :: j,ib,b_pro_mj
+ complex(ki), dimension(3) :: trisum,temp0
+ complex(ki) :: bsum
+ !
+ ! there is no case with zero internal masses!
+ ! this function is only called if there is at least one internal mass
+ !
+ !
+ ! ********************************************************
+ ! ********** massive case (internal masses): see f4p **************
+ !
+ trisum(:) = czero
+ bsum = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ trisum = trisum + b(j,b_pin)*f3p(s_mat_p,b_pro_mj)
+ bsum = bsum + b(j,b_pin)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ temp0 = ( f4p(s_mat_p,b_pro) - trisum )/bsum
+ !
+ f4p_np2_sca_massive = temp0(3)
+ !
+ end function f4p_np2_sca_massive
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np4
+ ! NAME
+ !
+ ! Function f4p_np4
+ !
+ ! USAGE
+ !
+ ! complex_dim2 = f4p_np4(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes recursively the generic four point function in n+4 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a type s_matrix_poly object, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * b_pin -- an integer which represents the set of the pinched propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2.
+ !
+ ! NOTES
+ !
+ ! This function has been changed! It only accepts a s_matrix_poly type object as input.
+ ! It returns a complex instead of a real array!
+ !
+ !*****
+ !
+ ! this function returns a complex array now!
+ !
+ recursive function f4p_np4(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4,test_numeric) result(res_4p_np4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro,b_pin
+ integer, intent (in), optional :: parf1,parf2,parf3,parf4
+ logical, intent (in), optional :: test_numeric
+ complex(ki), dimension(2) :: res_4p_np4
+ !
+ integer :: par1,par2,par3,par4
+ integer :: parn1,parn2,parn3,parn4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ integer :: taille
+ integer :: nb_par
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ real(ki) :: m1s,m2s,m3s,m4s,s1,s2,s3,s4
+ complex(ki) :: temp0
+ complex(ki), dimension(2) :: temp1,temp2,temp3
+ integer :: j,m1,m2,m3,m4
+ integer, dimension(4) :: s
+ integer, dimension(2) :: set
+ integer :: ib,b_pro_mj,dim_pin
+ real(ki) :: norma
+ logical :: not_numeric
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+
+ sortie : if ( (par1 == -1) .or. (par2 == -1).or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ res_4p_np4(:) = czero
+ !
+ else sortie
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini = (/par1,par2,par3,par4/)
+ !
+ nb_par = count(mask=z_param_ini/=0)
+ !
+ if (b_pro < 256) then
+ s = bit_sets(b_pro*8:b_pro*8+3)
+ else
+ s = unpackb(b_pro,4)
+ end if
+ !
+ ! test for switch to numerical evaluation needs to be performed only once
+ !
+ switch_to_numerics: if (present(test_numeric) ) then
+ !
+ not_numeric = test_numeric !this should always be true...
+ !
+ else switch_to_numerics
+ !
+ ! make sure numerical branch is never entered for cases where it is not implemented
+
+ ! NB: This order of the statements
+ ! reduces the number of comparisons required.
+ !
+ ! numerical branch not implemented for complex masses yet:
+ if (iand(s_mat_p%b_cmplx, b_pro) .ne. 0 ) then
+ !
+ not_numeric = .true.
+ !
+ else if (iand(s_mat_p%b_zero, b_pro) .ne. b_pro ) then !case internal masses
+ !
+ not_numeric = .true.
+ !
+ else
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ arg1 = s_mat_p%pt_real(m2,m4)
+ arg2 = s_mat_p%pt_real(m1,m3)
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ m1s = -s_mat_p%pt_real(m1,m1)/2._ki
+ m2s = -s_mat_p%pt_real(m2,m2)/2._ki
+ m3s = -s_mat_p%pt_real(m3,m3)/2._ki
+ m4s = -s_mat_p%pt_real(m4,m4)/2._ki
+ !
+ ! end if
+ !
+ s1=arg3+m1s+m4s
+ s2=arg4+m1s+m2s
+ s3=arg5+m2s+m3s
+ s4=arg6+m3s+m4s
+ !
+ ! else
+ ! case 4 non-light-like legs
+ if ( .not.(equal_real(s1,zero)) .and. &
+ & .not.(equal_real(s2,zero)) .and. &
+ & .not.(equal_real(s3,zero)) .and. &
+ & .not.(equal_real(s4,zero))) then
+ not_numeric = .true.
+ else
+ not_numeric=.not. ( abs(norma_sumb(b_pin)) < coupure(s_mat_p,s) )
+ end if
+ !
+ end if
+ !
+ end if switch_to_numerics
+ !
+ if (nb_par == 0) then
+ !
+ norma = 1._ki/6._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = 1._ki/24._ki
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ taille = dim_s - size(s)
+ !
+ select case(taille)
+ !
+ case(0)
+ !
+ set_tot = 0
+ !
+ case(1)
+ !
+ if (b_pin < 256) then
+ set(1:1) = bit_sets(b_pin*8:b_pin*8)
+ else
+ set(1:1) = unpackb(b_pin,1)
+ end if
+ set_tot(1) = 0
+ set_tot(2) = set(1)
+ !
+ case(2)
+ !
+ if (b_pin < 256) then
+ set = bit_sets(b_pin*8:b_pin*8+1)
+ else
+ set = unpackb(b_pin,2)
+ end if
+ !
+ set_tot(1:2) = set(1:2)
+ !
+ end select
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ cache : if ( computed_f4p_np4(set_tot(1),set_tot(2),par4) ) then
+ !
+ res_4p_np4 = results_f4p_np4(set_tot(1),set_tot(2),par4,:)
+ !
+ else cache
+ !
+ ! before: numeric : if ( not_numeric .and. &
+ ! & (abs(norma_sumb(b_pin)) >= coupure(s_mat_p,s) )) then
+ numeric : if ( not_numeric ) then
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ if (nb_par == 1) then
+ !
+ temp0 = f4p_np2(s_mat_p,b_pro,b_pin, parf4 = par4, test_numeric = not_numeric)/3._ki
+ temp1 = b(par4,b_pin)*f4p_np4(s_mat_p,b_pro,b_pin, test_numeric = not_numeric)
+ temp2(:) = czero
+ temp3(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp2 = temp2 + inv_s(j,par4,b_pin)*f3p_np2(s_mat_p,b_pro_mj)/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j,b_pin)*f3p_np2(s_mat_p,b_pro_mj,par4)/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb(b_pin))
+ res_4p_np4(2) = ( temp1(2)+temp1(1)/6._ki+temp2(2)+temp2(1)/2._ki &
+ +temp3(2)+temp3(1)/2._ki+temp0 )/(2._ki*sumb(b_pin))
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ else if (nb_par == 0) then
+ !
+ temp0 = f4p_np2(s_mat_p,b_pro,b_pin,test_numeric = not_numeric)
+ !
+ temp1(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ temp1 = temp1 + b(j,b_pin)*f3p_np2(s_mat_p,b_pro_mj)
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p_np4(1) = ( -temp1(1) )/(3._ki*sumb(b_pin))
+ res_4p_np4(2) = (temp0 - temp1(2) - 2._ki/3._ki*temp1(1) )/(3._ki*sumb(b_pin) )
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb((/par1,par2,par3,par4/)),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ else numeric
+ !
+ where (z_param_out /= 0)
+ !
+ z_param_out = locateb(z_param_out,b_pro)
+ !
+ elsewhere
+ !
+ z_param_out = 0
+ !
+ end where
+ !
+ parn1 = z_param_out(1)
+ parn2 = z_param_out(2)
+ parn3 = z_param_out(3)
+ parn4 = z_param_out(4)
+ !
+ res_4p_np4 = f4p_np4_numeric(s_mat_p,b_pro,parn1,parn2,parn3,parn4)
+ !
+ end if numeric
+ !
+ computed_f4p_np4(set_tot(1),set_tot(2),par4) = .true.
+ results_f4p_np4(set_tot(1),set_tot(2),par4,:) = res_4p_np4
+ !
+ end if cache
+ !
+ end if sortie
+ !
+ end function f4p_np4
+ !
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np2_numeric
+ ! NAME
+ !
+ ! Function f4p_np2_numeric
+ !
+ ! USAGE
+ !
+ ! complex = f4p_np2_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes numerically the generic four point function in n+2 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * par1 -- an integer, the label of the one Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the third Feynman parameter
+ ! * par4 -- an integer, the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex number!
+ !
+ ! NOTES
+ !
+ ! This function has been changed! It only accepts a s_matrix_poly type object!
+ ! It returns a complex number!
+ !
+ !*****
+ !
+ ! returns a complex number now!
+ !
+ function f4p_np2_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in) :: parf1,parf2,parf3,parf4
+ complex(ki) :: f4p_np2_numeric
+ !
+ integer :: par1,par2,par3,par4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ real(ki), dimension(4) :: temp
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ integer, dimension(4) :: s
+ integer :: dim_pro
+ logical, dimension(3:6) :: argz
+ !
+ sortie : if ( (parf1 == -1) .or. (parf2 == -1).or. (parf3 == -1) &
+ .or. (parf4 == -1) ) then
+ !
+ f4p_np2_numeric = czero
+ !
+ else sortie
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini(1) = parf1
+ z_param_ini(2) = parf2
+ z_param_ini(3) = parf3
+ z_param_ini(4) = parf4
+ !
+ if (b_pro < 256) then
+ dim_pro = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+dim_pro)
+ else
+ dim_pro = countb(b_pro)
+ s = unpackb(b_pro,dim_pro)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! arg1 = s, arg2 = t et les autres arguments sont les masses externes
+ !
+ ! only massless case is considered here, relevant piece of s_matrix is necessarily real
+ !
+ arg1 = s_mat_p%pt_real(m2,m4)
+ arg2 = s_mat_p%pt_real(m1,m3)
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ argz(3) = equal_real(arg3,zero)
+ argz(4) = equal_real(arg4,zero)
+ argz(5) = equal_real(arg5,zero)
+ argz(6) = equal_real(arg6,zero)
+ !
+ ! no external mass
+ !
+ if ( (argz(3)) .and. (argz(4)) .and. (argz(5)) &
+ .and. (argz(6)) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg1,arg2,0._ki,par1,par2,par3,par4)
+ !
+ ! one external mass
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg2,arg1,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+2",arg1,arg2,arg6,par1,par2,par3,par4)
+ !
+ ! two adjacent external masses
+ !
+ else if ( ( (argz(3)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg4,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg2,arg1,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+2",arg1,arg2,arg5,arg6,par1,par2,par3,par4)
+ !
+ ! two opposite external masses
+ !
+ else if ( ( (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_opp("n+2",arg2,arg1,arg5,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ temp = f4p2m_opp("n+2",arg1,arg2,arg4,arg6,par1,par2,par3,par4)
+ !
+ ! three external masses
+ !
+ else if (argz(3)) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ else if (argz(4)) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg5,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if (argz(5)) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg1,arg2,arg6,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if (argz(6)) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+2",arg2,arg1,arg3,arg4,arg5,par1,par2,par3,par4)
+ !
+ ! four external masses
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_np2_numeric:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'four external mass four point integral not yet implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ f4p_np2_numeric = temp(3) + i_ * temp(4)
+ !
+ end if sortie
+ !
+ end function f4p_np2_numeric
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_np4_numeric
+ ! NAME
+ !
+ ! Function f4p_np4_numeric
+ !
+ ! USAGE
+ !
+ ! complex_dim2 = f4p_np4_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes numerically the generic four point function in n+4 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2.
+ !
+ ! NOTES
+ !
+ ! This function has been changed! It only accepts a s_matrix_poly type object!
+ ! It returns a complex array!
+ !
+ !
+ !
+ !*****
+ !
+ function f4p_np4_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2,parf3,parf4
+ complex(ki), dimension(2) :: f4p_np4_numeric
+ !
+ real(ki), dimension(4) :: temp
+ integer :: par1,par2,par3,par4
+ integer, dimension(4) :: z_param_ini,z_param_out
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ integer, dimension(4) :: s
+ integer :: pro_dim
+ logical, dimension(3:6) :: argz
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+ sortie : if ( (par1 == -1) .or. (par2 == -1).or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ f4p_np4_numeric(:) = czero
+ !
+ else sortie
+ !
+ ! symetrie: la place de z1,z2,z3,z4 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ !
+ z_param_ini(1) = par1
+ z_param_ini(2) = par2
+ z_param_ini(3) = par3
+ z_param_ini(4) = par4
+ !
+ if (b_pro < 256) then
+ pro_dim = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+pro_dim)
+ else
+ pro_dim = countb(b_pro)
+ s = unpackb(b_pro,pro_dim)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! arg1 = s, arg2 = t et les autres arguments sont les masses externes
+ !
+ ! only massless case is considered here, relevant piece of s_matrix is necessarily real
+ !
+ arg1 = s_mat_p%pt_real(m2,m4)
+ arg2 = s_mat_p%pt_real(m1,m3)
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ argz(3) = equal_real(arg3,zero)
+ argz(4) = equal_real(arg4,zero)
+ argz(5) = equal_real(arg5,zero)
+ argz(6) = equal_real(arg6,zero)
+ !
+ ! no external mass
+ !
+ if ( (argz(3)) .and. (argz(4)) .and. (argz(5)) .and. (argz(6)) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg1,arg2,0._ki,par1,par2,par3,par4)
+ !
+ ! one external mass
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg2,arg1,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg1,arg2,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg2,arg1,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p1m("n+4",arg1,arg2,arg6,par1,par2,par3,par4)
+ !
+ ! two adjacent external masses
+ !
+ else if ( ( (argz(3)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg2,arg1,arg4,arg5,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(4)) .and. (argz(5)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg2,arg1,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(5)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg1,arg2,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(4)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_adj("n+4",arg1,arg2,arg5,arg6,par1,par2,par3,par4)
+ !
+ ! two opposite external masses
+ !
+ else if ( ( (argz(4)) .and. (argz(6)) ) ) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_opp("n+4",arg2,arg1,arg5,arg3,par1,par2,par3,par4)
+ !
+ else if ( ( (argz(3)) .and. (argz(5)) ) ) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p2m_opp("n+4",arg1,arg2,arg4,arg6,par1,par2,par3,par4)
+ !
+ ! three external masses
+ !
+ else if (argz(3)) then
+ !
+ call tri_int4(z_param_ini,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg1,arg2,arg4,arg5,arg6,par1,par2,par3,par4)
+ !
+ else if (argz(4)) then
+ !
+ call shift_param(z_param_ini,3,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg2,arg1,arg5,arg6,arg3,par1,par2,par3,par4)
+ !
+ else if (argz(5)) then
+ !
+ call shift_param(z_param_ini,2,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg1,arg2,arg6,arg3,arg4,par1,par2,par3,par4)
+ !
+ else if (argz(6)) then
+ !
+ call shift_param(z_param_ini,1,4,z_param_out)
+ !
+ par1 = z_param_out(1)
+ par2 = z_param_out(2)
+ par3 = z_param_out(3)
+ par4 = z_param_out(4)
+ !
+ temp = f4p3m("n+4",arg2,arg1,arg3,arg4,arg5,par1,par2,par3,par4)
+ !
+ ! four external masses
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_np4_numeric:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'four external mass four point integral not yet implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ f4p_np4_numeric(1) = temp(1) + i_ * temp(2)
+ f4p_np4_numeric(2) = temp(3) + i_ * temp(4)
+ !
+ end if sortie
+ !
+ end function f4p_np4_numeric
+ !
+ !****if* src/integrals/four_point/generic_function_4p/coupure
+ ! NAME
+ !
+ ! Function coupure
+ !
+ ! USAGE
+ !
+ ! real = coupure(s_mat_p,s)
+ !
+ ! DESCRIPTION
+ !
+ ! Depending on the set s and the S matrix (s_mat), this function returns
+ ! the value of the cut to switch from analytic to numeric
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly object. The S matrix.
+ ! * s -- an integer array of rank 1 and shape 4, the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function coupure(s_mat_p,s)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in), dimension(4) :: s
+ real(ki) :: coupure
+ !
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg3,arg4,arg5,arg6
+ real(ki), dimension(4) :: table_arg
+ integer :: count_mass
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ ! arg1 = s, arg2 = t et les autres arguments sont les masses externes
+ !
+ ! function coupure only defined for massless matrices so far. if masses are involved, the args do not
+ ! reflect the invariant masses of the external legs (or s and t)
+ !
+ !
+ arg3 = s_mat_p%pt_real(m1,m4)
+ arg4 = s_mat_p%pt_real(m1,m2)
+ arg5 = s_mat_p%pt_real(m2,m3)
+ arg6 = s_mat_p%pt_real(m3,m4)
+ !
+ !
+ table_arg = (/arg3,arg4,arg5,arg6/)
+ count_mass = count(mask=table_arg/=zero)
+ !
+ select case(count_mass)
+ !
+ case(0,1)
+ !
+ coupure = coupure_4p1m
+ !
+ case(2)
+ !
+ if ( (equal_real(arg3*arg5,0._ki)) .and. (equal_real(arg4*arg6,0._ki)) ) then
+ !
+ coupure = coupure_4p2m_adj
+ !
+ else
+ !
+ coupure = coupure_4p2m_opp
+ !
+ end if
+ !
+ case(3)
+ !
+ coupure = coupure_4p3m
+ !
+ case(4)
+ !
+ coupure = coupure_4p4m
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function coupure:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the case required for four point integral not yet &
+ &implemented'
+ call catch_exception(0)
+ !
+ end select
+ !
+ end function coupure
+ !
+ ! *********************************************************************
+ ! added for massive case
+ ! ***********************************************************************
+ !****f* src/integrals/four_point/generic_function_4p/f4p
+ ! NAME
+ !
+ ! Function f4p
+ !
+ ! USAGE
+ !
+ ! cmplx_dim3 = f4p(s_mat,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic four point function in n dimensions
+ ! only scalar case is implemented!!!
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * b_pin -- an integer which represents the set of the pinched propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ ! * parf4 -- an integer (optional), the label of the forth Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 3
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f4p(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: b_pin, parf1,parf2,parf3,parf4
+ complex(ki), dimension(3) :: f4p
+ real(ki), dimension(6) :: f4p_real
+ !
+ f4p_real = f4p_ra(s_mat_p,b_pro,b_pin=b_pin,parf1=parf1,parf2=parf2,parf3=parf3,parf4=parf4)
+ !
+ f4p(1) = f4p_real(1) + i_ * f4p_real(2)
+ f4p(2) = f4p_real(3) + i_ * f4p_real(4)
+ f4p(3) = f4p_real(5) + i_ * f4p_real(6)
+ !
+ end function f4p
+ !
+ function f4p_ra(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4) result(res_4p)
+ !
+ type(s_matrix_poly), intent (in) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: b_pin, parf1,parf2,parf3,parf4
+ real(ki), dimension(6) :: res_4p
+ !
+ integer :: par1,par2,par3,par4
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ if ( present(parf1) ) par1 = parf1
+ if ( present(parf2) ) par2 = parf2
+ if ( present(parf3) ) par3 = parf3
+ if ( present(parf4) ) par4 = parf4
+ !
+ sortie : if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) &
+ .or. (par4 == -1) ) then
+ !
+ res_4p(:) = 0._ki
+ !
+ else if ( (par1+par2+par3+par4) /= 0 ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In f4p_ra: called with non-zero Feynman parameters!'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'The 4-dim box is only implemented for the scalar case!'
+ !
+ call catch_exception(0)
+ !
+ else sortie
+ !
+ res_4p = f4p_sca(s_mat_p,b_pro)
+ !
+ end if sortie
+ !
+ !
+ end function f4p_ra
+ !
+ !
+ !****f* src/integrals/four_point/generic_function_4p/f4p_sca
+ ! NAME
+ !
+ ! Function f4p_sca
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f4p_sca(s_mat_p,b_pro)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic four point function in n dimensions,
+ ! without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a s_matrix_poly type, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 6
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f4p_sca_p(s_mat_p,b_pro)
+ !
+ type(s_matrix_poly), intent(in) :: s_mat_p
+ integer, intent (in) :: b_pro
+ !
+ real(ki), dimension(6) :: f4p_sca_p
+ !
+ if (iand(s_mat_p%b_cmplx, b_pro) .eq. 0 ) then
+ !
+ f4p_sca_p = f4p_sca_r(s_mat_p%pt_real, b_pro)
+ !
+ else
+ !
+ f4p_sca_p = f4p_sca_c(s_mat_p%pt_cmplx, b_pro)
+ !
+ end if
+ !
+ end function f4p_sca_p
+ !
+ function f4p_sca_r(s_mat_r,b_pro)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro
+ real(ki), dimension(6) :: f4p_sca_r,temp
+ integer :: par1,par2,par3,par4
+ integer :: m1,m2,m3,m4
+ real(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ real(ki) :: m1s,m2s,m3s,m4s,s12,s23,s1,s2,s3,s4
+ complex(ki_avh) :: D0res
+ complex(ki_avh), dimension(0:2) :: D0olo
+ integer, dimension(4) :: s
+ integer :: pro_dim
+ logical, dimension(4) :: msz, ssz
+ logical, dimension(4,4) :: meqs
+ !
+ ! mu2_scale_par is defined globally:
+ ! default mu2_scale_par=1 is set in paramtere.f90,
+ ! unless defined otherwise by user in his main program
+ !
+ if (b_pro < 256) then
+ pro_dim = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+pro_dim-1)
+ else
+ pro_dim = countb(b_pro)
+ s = unpackb(b_pro,pro_dim)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ !
+ arg1 = s_mat_r(m2,m4)
+ arg2 = s_mat_r(m1,m3)
+ arg3 = s_mat_r(m1,m4)
+ arg4 = s_mat_r(m1,m2)
+ arg5 = s_mat_r(m2,m3)
+ arg6 = s_mat_r(m3,m4)
+ !
+ m1s = -s_mat_r(m1,m1)/2._ki
+ m2s = -s_mat_r(m2,m2)/2._ki
+ m3s = -s_mat_r(m3,m3)/2._ki
+ m4s = -s_mat_r(m4,m4)/2._ki
+ !
+ msz(1) = equal_real(m1s,zero)
+ msz(2) = equal_real(m2s,zero)
+ msz(3) = equal_real(m3s,zero)
+ msz(4) = equal_real(m4s,zero)
+ !
+ s1=arg3+m1s+m4s
+ s2=arg4+m1s+m2s
+ s3=arg5+m2s+m3s
+ s4=arg6+m3s+m4s
+ !
+ call cut_s(s1,m1s,m4s)
+ call cut_s(s2,m1s,m2s)
+ call cut_s(s3,m2s,m3s)
+ call cut_s(s4,m3s,m4s)
+ !
+ ssz(1) = equal_real(s1,zero)
+ ssz(2) = equal_real(s2,zero)
+ ssz(3) = equal_real(s3,zero)
+ ssz(4) = equal_real(s4,zero)
+ !
+ meqs(1,1) = equal_real(m1s,s1)
+ meqs(1,2) = equal_real(m1s,s2)
+ meqs(1,3) = equal_real(m1s,s3)
+ meqs(1,4) = equal_real(m1s,s4)
+ meqs(2,1) = equal_real(m2s,s1)
+ meqs(2,2) = equal_real(m2s,s2)
+ meqs(2,3) = equal_real(m2s,s3)
+ meqs(2,4) = equal_real(m2s,s4)
+ meqs(3,1) = equal_real(m3s,s1)
+ meqs(3,2) = equal_real(m3s,s2)
+ meqs(3,3) = equal_real(m3s,s3)
+ meqs(3,4) = equal_real(m3s,s4)
+ meqs(4,1) = equal_real(m4s,s1)
+ meqs(4,2) = equal_real(m4s,s2)
+ meqs(4,3) = equal_real(m4s,s3)
+ meqs(4,4) = equal_real(m4s,s4)
+ !
+ !
+ s12 = arg1+m4s+m2s
+ s23 = arg2+m1s+m3s
+ !
+ call cut_s(s12,m4s,m2s)
+ call cut_s(s23,m1s,m3s)
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ temp(:) = 0._ki
+ !
+ ! case no internal masses:
+ !
+ if ( (msz(1)) .and. (msz(2)) .and. (msz(3)) &
+ .and. (msz(4)) ) then
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'use dim=n+2 for boxes with no internal masses !'
+ call catch_exception(0)
+ !
+ else ! at least one internal mass nonzero
+ !
+ ! ********************************************************
+ ! ********** massive case (internal masses) **************
+ !
+ ! case two massive on-shell legs, three internal masses, all masses equal
+ if ( .not.(msz(1)) .and..not.(msz(2)) .and.(msz(3)) &
+ & .and..not.(msz(4)) .and. (equal_real(m1s,m2s)) .and. (equal_real(m2s,m4s)) &
+ & .and.(meqs(2,3)) .and.(meqs(4,4)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massless internal line
+ !
+ else if ( .not.(msz(2)) .and..not.(msz(3)) .and.(msz(4)) &
+ & .and..not.(msz(1)) .and. (equal_real(m2s,m3s)) .and. (equal_real(m3s,m1s)) &
+ & .and.(meqs(3,4)) .and.(meqs(1,1)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ !
+ else if ( .not.(msz(3)) .and..not.(msz(4)) .and.(msz(1)) &
+ & .and..not.(msz(2)) .and. (equal_real(m3s,m4s)) .and. (equal_real(m4s,m2s)) &
+ & .and.(meqs(4,1)) .and.(meqs(2,2)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and..not.(msz(1)) .and.(msz(2)) &
+ & .and..not.(msz(3)) .and. (equal_real(m4s,m1s)) .and. (equal_real(m1s,m3s)) &
+ & .and.(meqs(1,2)) .and.(meqs(3,3)) ) then
+ !
+ temp = f4p2m_3mi_onshell("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 6 *****************
+ ! QCDL m4 is golem m3
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) &
+ & .and.(equal_real(s3,s4)) .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql6("n",s1,s2,m3s,m3s,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) &
+ & .and.(equal_real(s4,s1)) .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql6("n",s2,s3,m4s,m4s,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) &
+ & .and.(equal_real(s1,s2)) .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql6("n",s3,s4,m1s,m1s,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) &
+ & .and.(equal_real(s2,s3)) .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql6("n",s4,s1,m2s,m2s,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 7 *****************
+ ! QCDL m_i is golem m_{i-1}
+ !
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) &
+ & .and. (meqs(3,3)) ) then
+ !
+ temp = f4p_ql7("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) &
+ & .and. (meqs(4,4)) ) then
+ !
+ temp = f4p_ql7("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) &
+ & .and. (meqs(1,1)) ) then
+ !
+ temp = f4p_ql7("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) &
+ & .and.(meqs(2,2)) ) then
+ !
+ temp = f4p_ql7("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 7b *****************
+ !~ p4^2=m3^2 instead of p3^2=m3^2 (in golem labelling) is also possible!
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) &
+ & .and. (meqs(3,4)) ) then
+ !
+ temp = f4p_ql7("n",s1,s2,s4,s3,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) &
+ & .and. (meqs(4,1)) ) then
+ !
+ temp = f4p_ql7("n",s2,s3,s1,s4,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) &
+ & .and. (meqs(1,2)) ) then
+ !
+ temp = f4p_ql7("n",s3,s4,s2,s1,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql7("n",s4,s1,s3,s2,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 8 *****************
+ !
+ ! limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) ) then
+ !
+ temp = f4p_ql8("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) ) then
+ !
+ temp = f4p_ql8("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) ) then
+ !
+ temp = f4p_ql8("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) ) then
+ !
+ temp = f4p_ql8("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 9 *****************
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(2)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql9("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(3)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql9("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(4)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql9("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(1)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql9("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 10 *****************
+ !
+ ! note that limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(2)) ) then
+ !
+ if (ssz(4).and.meqs(3,2).and.meqs(3,3)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(3)) ) then
+ !
+ if (ssz(1).and.meqs(4,3).and.meqs(4,4)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(4)) ) then
+ !
+ if (ssz(2).and.meqs(1,4).and.meqs(1,1)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(1)) ) then
+ !
+ if (ssz(3).and.meqs(2,1).and.meqs(2,2)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! *********** case QCDLoop box 10b *****************
+ !~ m2^2 nonzero instead of m3^2 (in golem labelling) is also possible!
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(4)) ) then
+ !
+ if (ssz(2).and.meqs(2,3).and.meqs(2,4)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line (permu1)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(1)) ) then
+ !
+ if (ssz(3).and.meqs(3,4).and.meqs(3,1)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line (permu2)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(2)) ) then
+ !
+ if (ssz(4).and.meqs(4,1).and.meqs(4,2)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! permute the massive internal line (permu3)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(3)) ) then
+ !
+ if (ssz(1).and.meqs(1,2).and.meqs(1,3)) then
+ ! use function where limit is implemented analytically
+ temp = f4p_ql10a("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ temp = f4p_ql10("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ endif ! end test for limit box 10a
+ !
+ ! *********** case QCDLoop box 11 *****************
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(2,2)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql11("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(3,3)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql11("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(4,4)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql11("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(1,1)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql11("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 12 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql12.f90
+ ! limit p4^2 -> 0 is harmless, so do not restrict s4 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(2,2)) ) then
+ !
+ temp = f4p_ql12("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(3,3)) ) then
+ !
+ temp = f4p_ql12("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(4,4)) ) then
+ !
+ temp = f4p_ql12("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(1,1)) ) then
+ !
+ temp = f4p_ql12("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 12b *****************
+ !~ TAKE INTO ACCOUNT MIRROR SYMMETRY, corrected 16.8.2011
+ !~ mass ordering corrected 13.9.2011
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql12("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql12("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql12("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql12("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 13 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql13.f90
+ ! limits p4^2,p2^2 -> 0 are harmless, so do not restrict s4,s2 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) ) then
+ !
+ temp = f4p_ql13("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) ) then
+ !
+ temp = f4p_ql13("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) ) then
+ !
+ temp = f4p_ql13("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) ) then
+ !
+ temp = f4p_ql13("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 14 *****************
+ !
+ else if ( .not.(msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) .and.(meqs(1,2)) &
+ & .and.(meqs(3,3)) .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql14("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) .and.(meqs(2,3)) &
+ & .and.(meqs(4,4)) .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql14("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) .and.(meqs(3,4)) &
+ & .and.(meqs(1,1)) .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql14("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) .and.(meqs(4,1)) &
+ & .and.(meqs(2,2)) .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql14("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 15 *****************
+ ! limit s2,s3->0 is finite, so do not impose condition on s2,s3
+ !
+ else if ( .not.(msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql15("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql15("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql15("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql15("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 16 *****************
+ !
+ ! note that limits s2->0 and s3->0 are nonsingular, so do not require s2,s3 not=0
+ !
+ else if ( .not.(msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ temp = f4p_ql16("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ temp = f4p_ql16("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ temp = f4p_ql16("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ temp = f4p_ql16("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ else
+ !
+ ! changed to include LT option Jan2011
+ ! use avh_olo or LT
+@case_with_lt@ if (withlt) then
+ !
+@case_with_lt@ D0res = D0(real(s1,ki_lt),real(s2,ki_lt),real(s3,ki_lt),real(s4,ki_lt),&
+@case_with_lt@ & @case_with_lt@real(s12,ki_lt),real(s23,ki_lt),real(m4s,ki_lt),real(m1s,ki_lt),&
+@case_with_lt@ & real(m2s,ki_lt),real(m3s,ki_lt))
+ !
+@case_with_lt@ else ! use avholo
+ !
+ if (.not. olo) then
+! call avh_olo_onshell(100._ki*epsilon(1._ki))
+ call olo_onshell(real(1.e-10_ki, ki_avh))
+ call olo_scale(real(sqrt(mu2_scale_par), ki_avh))
+ olo=.true.
+ end if
+ !
+ call olo_d0(D0olo,real(s1,ki_avh),real(s2,ki_avh),real(s3,ki_avh),real(s4,ki_avh),&
+ & real(s12,ki_avh),real(s23,ki_avh),real(m4s,ki_avh),real(m1s,ki_avh),&
+ & real(m2s,ki_avh),real(m3s,ki_avh))
+ D0res = D0olo(0)
+ !
+@case_with_lt@ end if ! end if with lt
+ !
+ temp(5)= real(D0res)
+ temp(6)= aimag(D0res)
+ !
+ end if ! end distuinguish different cases of internal masses
+ !
+ end if ! end test if internal masses are present
+ !
+ f4p_sca_r = temp
+ !
+ !
+ end function f4p_sca_r
+ !
+ !
+ function f4p_sca_c(s_mat_c,b_pro)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in) :: b_pro
+ real(ki), dimension(6) :: f4p_sca_c,temp
+ integer :: par1,par2,par3,par4
+ integer :: m1,m2,m3,m4
+ complex(ki) :: arg1,arg2,arg3,arg4,arg5,arg6
+ complex(ki) :: m1s, m2s, m3s, m4s
+ real(ki) :: s12,s23,s1,s2,s3,s4
+ complex(ki_avh) :: D0res
+ complex(ki_avh), dimension(0:2) :: D0olo
+ complex(ki_avh) :: cp1,cp2,cp3,cp4,cp12,cp23,cm1,cm2,cm3,cm4
+ integer, dimension(4) :: s
+ integer :: pro_dim
+ integer :: nb_cm
+ logical, dimension(4) :: msz, ssz, msc
+ logical, dimension(4,4) :: meqs
+ logical :: avh_olo_div
+ !
+ ! mu2_scale_par is defined globally:
+ ! default mu2_scale_par=1 is set in paramtere.f90,
+ ! unless defined otherwise by user in his main program
+ !
+ if (b_pro < 256) then
+ pro_dim = bit_count(b_pro)
+ s = bit_sets(b_pro*8:b_pro*8+pro_dim-1)
+ else
+ pro_dim = countb(b_pro)
+ s = unpackb(b_pro,pro_dim)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ m4 = s(4)
+ !
+ !
+ arg1 = s_mat_c(m2,m4)
+ arg2 = s_mat_c(m1,m3)
+ arg3 = s_mat_c(m1,m4)
+ arg4 = s_mat_c(m1,m2)
+ arg5 = s_mat_c(m2,m3)
+ arg6 = s_mat_c(m3,m4)
+ !
+ m1s = -s_mat_c(m1,m1)/2._ki
+ m2s = -s_mat_c(m2,m2)/2._ki
+ m3s = -s_mat_c(m3,m3)/2._ki
+ m4s = -s_mat_c(m4,m4)/2._ki
+ !
+ msc(1) = (.not. equal_real(aimag(m1s),zero) )
+ msc(2) = (.not. equal_real(aimag(m2s),zero) )
+ msc(3) = (.not. equal_real(aimag(m3s),zero) )
+ msc(4) = (.not. equal_real(aimag(m4s),zero) )
+ !
+ nb_cm = count(mask=msc .eqv. .true.)
+ !
+ where (msc)
+ !
+ msz = .false.
+ !
+ elsewhere
+ !
+ msz = equal_real(real( (/ m1s,m2s,m3s,m4s /) , ki), zero)
+ !
+ end where
+ !
+ s1 = real(arg3+m1s+m4s,ki)
+ s2 = real(arg4+m1s+m2s,ki)
+ s3 = real(arg5+m2s+m3s,ki)
+ s4 = real(arg6+m3s+m4s,ki)
+ !
+ call cut_s(s1,m1s,m4s)
+ call cut_s(s2,m1s,m2s)
+ call cut_s(s3,m2s,m3s)
+ call cut_s(s4,m3s,m4s)
+ !
+ ssz(1) = equal_real(s1,zero)
+ ssz(2) = equal_real(s2,zero)
+ ssz(3) = equal_real(s3,zero)
+ ssz(4) = equal_real(s4,zero)
+ !
+ !
+ s12 = arg1+m4s+m2s
+ s23 = arg2+m1s+m3s
+ !
+ call cut_s(s12,m4s,m2s)
+ call cut_s(s23,m1s,m3s)
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ par4 = 0
+ !
+ temp(:) = 0._ki
+ !
+ meqs(:,:) = .false.
+ !
+ avh_olo_div = .false.
+ !
+ number_complex_masses: select case (nb_cm)
+ !
+ case (0)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In f4p_sca_c call with zero complex masses!'
+ call catch_exception(0)
+ !
+ case (1) ! cases with one complex mass! only the following cases need to be considered!
+ !
+ if ( msc(1) ) then
+ !
+ meqs(2,3) = equal_real(real(m2s,ki),s3)
+ meqs(4,4) = equal_real(real(m4s,ki),s4)
+ !
+ else if ( msc(2) ) then
+ !
+ meqs(1,1) = equal_real(real(m1s,ki),s1)
+ meqs(3,4) = equal_real(real(m3s,ki),s4)
+ !
+ else if (msc(3) ) then
+ !
+ meqs(2,2) = equal_real(real(m2s,ki),s2)
+ meqs(4,1) = equal_real(real(m4s,ki),s1)
+ !
+ else if ( msc(4) ) then
+ !
+ meqs(1,2) = equal_real(real(m1s,ki),s2)
+ meqs(3,3) = equal_real(real(m3s,ki),s3)
+ !
+ end if
+ !
+ ! ************************************************
+ ! The following Integrals are not implemented
+ ! for complex masses yet. A call to avh_olo is
+ ! made instead!
+ !
+ ! *********** case QCDLoop box 8 *****************
+ !
+ ! limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ if ( (msz(1)) .and. (msz(2)) .and. .not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and. (ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and. (ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and. (ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and. (ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !temp = f4p_ql8("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ !
+ ! *********** case QCDLoop box 10 *****************
+ !
+ ! note that limits s3,s4->0 are harmless, so do not require s3,s4 to be nonzero
+ !
+ else if ( (msz(1)) .and.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line
+ !
+ else if ( (msz(2)) .and.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ else if ( (msz(3)) .and.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ else if ( (msz(4)) .and.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! *********** case QCDLoop box 10b *****************
+ !~ m2^2 nonzero instead of m3^2 (in golem labelling) is also possible!
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and..not.(ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s1,s4,s3,s2,s23,s12,m1s,m3s,m2s,m4s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line (permu1)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and..not.(ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s2,s1,s4,s3,s12,s23,m2s,m4s,m3s,m1s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line (permu2)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and..not.(ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s3,s2,s1,s4,s23,s12,m3s,m1s,m4s,m2s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ ! permute the massive internal line (permu3)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and..not.(ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! !
+ ! temp = f4p_ql10("n",s4,s3,s2,s1,s12,s23,m4s,m2s,m1s,m3s,0,0,0,0,mu2_scale_par)
+ ! !
+ !
+ !
+ ! *********** case QCDLoop box 12 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql12.f90
+ ! limit p4^2 -> 0 is harmless, so do not restrict s4 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) .and.(meqs(2,2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) .and.(meqs(3,3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) .and.(meqs(4,4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) .and.(meqs(1,1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql12("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ ! *********** case QCDLoop box 13 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql13.f90
+ ! limits p4^2,p2^2 -> 0 are harmless, so do not restrict s4,s2 to nonzero value
+ !
+ else if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ !
+ ! *********** case QCDLoop box 16 *****************
+ !
+ ! note that limits s2->0 and s3->0 are nonsingular, so do not require s2,s3 not=0
+ !
+ else if ( .not.(msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (meqs(1,1)) &
+ & .and.(meqs(3,4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (meqs(2,2)) &
+ & .and.(meqs(4,1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (meqs(3,3)) &
+ & .and.(meqs(1,2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( .not.(msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (meqs(4,4)) &
+ & .and.(meqs(2,3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql16("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ end if
+ !
+ case (2) ! only one divergent box integral in this case!
+ ! ! no meqs required!
+ !
+ ! *********** case QCDLoop box 13 *****************
+ !
+ ! limit p3^2 -> 0 is finite, taken care of in function_4p_ql13.f90
+ ! limits p4^2,p2^2 -> 0 are harmless, so do not restrict s4,s2 to nonzero value
+ !
+ if ( (msz(1)) .and..not.(msz(2)) .and..not.(msz(3)) &
+ & .and.(msz(4)) .and. (ssz(1)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(2)) .and..not.(msz(3)) .and..not.(msz(4)) &
+ & .and.(msz(1)) .and. (ssz(2)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s2,s3,s4,s1,s23,s12,m2s,m3s,m4s,m1s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(3)) .and..not.(msz(4)) .and..not.(msz(1)) &
+ & .and.(msz(2)) .and. (ssz(3)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s3,s4,s1,s2,s12,s23,m3s,m4s,m1s,m2s,0,0,0,0,mu2_scale_par)
+ !
+ else if ( (msz(4)) .and..not.(msz(1)) .and..not.(msz(2)) &
+ & .and.(msz(3)) .and. (ssz(4)) ) then
+ !
+ avh_olo_div = .true.
+ !
+ ! temp = f4p_ql13("n",s4,s1,s2,s3,s23,s12,m4s,m1s,m2s,m3s,0,0,0,0,mu2_scale_par)
+ !
+ end if
+ !
+ case default
+ !
+ avh_olo_div = .false.
+ !
+ end select number_complex_masses
+ !
+ ! changed to include LT option Jan2011
+ ! use avh_olo or LT in finite case
+@case_with_lt@ if (withlt.and..not.avh_olo_div) then
+ !
+@case_with_lt@ D0res = D0C(real(s1,ki_lt),real(s2,ki_lt),real(s3,ki_lt),real(s4,ki_lt),&
+@case_with_lt@ & real(s12,ki_lt),real(s23,ki_lt),m4s,m1s,m2s,m3s)
+ !
+@case_with_lt@ temp(5)= real(D0res,ki)
+@case_with_lt@ temp(6)= aimag(D0res)
+ !
+@case_with_lt@ else
+ ! use avh_olo
+ !
+ if (.not. olo) then
+! call avh_olo_onshell(100._ki*epsilon(1._ki))
+ call avh_olo_onshell(1.e-10_ki)
+ call avh_olo_mu_set(sqrt(mu2_scale_par))
+ olo=.true.
+ end if
+ !
+ cp1 = cmplx(s1,0._ki_avh,ki_avh)
+ cp2 = cmplx(s2,0._ki_avh,ki_avh)
+ cp3 = cmplx(s3,0._ki_avh,ki_avh)
+ cp4 = cmplx(s4,0._ki_avh,ki_avh)
+ cp12 = cmplx(s12,0._ki_avh,ki_avh)
+ cp23 = cmplx(s23,0._ki_avh,ki_avh)
+ !
+ cm1 = cmplx(m1s,kind=ki_avh)
+ cm2 = cmplx(m2s,kind=ki_avh)
+ cm3 = cmplx(m3s,kind=ki_avh)
+ cm4 = cmplx(m4s,kind=ki_avh)
+ !
+ call olo_d0(D0olo,cp1,cp2,cp3,cp4,cp12,cp23,cm4,cm1,cm2,cm3)
+ !
+ !
+ if (avh_olo_div) then
+ !
+ temp(1) = real(D0olo(2),ki)
+ temp(2) = aimag(D0olo(2) )
+ temp(3) = real(D0olo(1),ki)
+ temp(4) = aimag(D0olo(1) )
+ temp(5) = real(D0olo(0),ki)
+ temp(6) = aimag(D0olo(0) )
+ !
+ else
+ !
+ D0res = D0olo(0)
+ !
+ temp(5)= real(D0res,ki)
+ temp(6)= aimag(D0res)
+ !
+ !
+ !
+ end if ! ends if (avh_olo_div)
+@case_with_lt@ end if ! When using LT, this ends if (withlt.and..not.avh_olo_div)
+
+ !
+ f4p_sca_c = real(temp,ki)
+ !
+ end function f4p_sca_c
+ !
+ !~********************************************************************
+ !
+ !
+end module generic_function_4p
+
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p4m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p4m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p4m.f90 (revision 119)
@@ -0,0 +1,1077 @@
+!
+!****h* src/integrals/four_point/function_4p4m
+! NAME
+!
+! Module function_4p4m
+!
+! USAGE
+!
+! use function_4p4m
+!
+! DESCRIPTION
+!
+! This module computes the six-dimensional and eight dimensional
+! three mass four point function with or without Feynman parameters
+! in the numerator.
+!
+! OUTPUT
+!
+! This module exports three functions f4p4m, f4p4m_c and f4
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+!
+!*****
+module function_4p4m
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ implicit none
+ !
+ private
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p4m,f4,f4p4m_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p4m/f4p4m
+ ! NAME
+ !
+ ! Function f4p4m
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p4m(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the six dimensional/eight dimensional
+ ! three mass four point function with or without Feynman parameters
+ ! in the numerator.
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! three mass four point function, dim="n+4" eight dimensional
+ ! three mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! If the user wants to compute:
+ ! * a six dimensional three mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p4m("n+2",s24,s13,s12,s23,s34,0,0,0,0)
+ ! * a eight dimensional three mass four point function
+ ! with no Feynman parameters in the numerator:
+ ! real_dim_4 = f4p4m("n+4",s24,s13,s12,s23,s34,0,0,0,0)
+ ! * a six dimensional three mass four point function
+ ! with the Feynman parameter z1 in the numerator:
+ ! real_dim_4 = f4p4m("n+2",s24,s13,s12,s23,s34,0,0,0,1)
+ ! * a six dimensional three mass four point function
+ ! with the Feynman parameters z1^2*z2 in the numerator:
+ ! real_dim_4 = f4p4m("n+2",s24,s13,s12,s23,s34,0,2,1,1)
+ !
+ !*****
+ function f4p4m(dim,s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s14,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: f4p4m
+ !
+ integer :: nb_par
+ real(ki) :: lamb,det_s
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/0._ki,s12,s13,s14/)
+ s_mat(2,:) = (/s12,0._ki,s23,s24/)
+ s_mat(3,:) = (/s13,s23,0._ki,s34/)
+ s_mat(4,:) = (/s14,s24,s34,0._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ plus_grand = maxval(array=abs(s_mat))
+ s_mat = s_mat/plus_grand
+ !
+ det_s = (-2._ki*s_mat(2,3)*s_mat(1,3)*s_mat(2,4)*s_mat(1,4)+s_mat(1,2&
+ &)**2*s_mat(3,4)**2-2._ki*s_mat(1,2)*s_mat(3,4)*s_mat(2,3)*s_mat(&
+ &1,4)-2._ki*s_mat(1,2)*s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(2,4&
+ &)**2*s_mat(1,3)**2+s_mat(1,4)**2*s_mat(2,3)**2)
+ !
+ b(1)=-(-s_mat(1,4)*s_mat(2,3)**2-s_mat(2,4)**2*s_mat(1,3)+s_mat(1&
+ &,2)*s_mat(3,4)*s_mat(2,3)-s_mat(1,2)*s_mat(3,4)**2+s_mat(3,4)*s&
+ &_mat(2,3)*s_mat(1,4)+s_mat(3,4)*s_mat(1,3)*s_mat(2,4)+s_mat(1,2&
+ &)*s_mat(3,4)*s_mat(2,4)-2._ki*s_mat(2,4)*s_mat(3,4)*s_mat(2,3)+s&
+ &_mat(2,3)*s_mat(1,3)*s_mat(2,4)+s_mat(2,3)*s_mat(2,4)*s_mat(1,4&
+ &))/det_s
+ !
+ b(2)=-(-s_mat(1,4)**2*s_mat(2,3)-s_mat(2,4)*s_mat(1,3)**2+s_mat(1&
+ &,2)*s_mat(3,4)*s_mat(1,4)+s_mat(1,2)*s_mat(3,4)*s_mat(1,3)-s_ma&
+ &t(1,2)*s_mat(3,4)**2+s_mat(3,4)*s_mat(2,3)*s_mat(1,4)+s_mat(3,4&
+ &)*s_mat(1,3)*s_mat(2,4)+s_mat(2,3)*s_mat(1,3)*s_mat(1,4)-2._ki*s&
+ &_mat(1,3)*s_mat(3,4)*s_mat(1,4)+s_mat(2,4)*s_mat(1,3)*s_mat(1,4&
+ &))/det_s
+ !
+ b(3)=(s_mat(1,4)**2*s_mat(2,3)+s_mat(2,4)**2*s_mat(1,3)-s_mat(1,2&
+ &)*s_mat(3,4)*s_mat(2,4)+s_mat(1,2)**2*s_mat(3,4)-s_mat(2,4)*s_m&
+ &at(1,3)*s_mat(1,2)-s_mat(2,4)*s_mat(1,3)*s_mat(1,4)-s_mat(2,3)*&
+ &s_mat(2,4)*s_mat(1,4)-s_mat(1,4)*s_mat(2,3)*s_mat(1,2)-s_mat(1,&
+ &2)*s_mat(3,4)*s_mat(1,4)+2._ki*s_mat(2,4)*s_mat(1,4)*s_mat(1,2))&
+ &/det_s
+ !
+ b(4)=(2._ki*s_mat(2,3)*s_mat(1,3)*s_mat(1,2)-s_mat(1,4)*s_mat(2,3)&
+ &*s_mat(1,2)-s_mat(2,3)*s_mat(1,3)*s_mat(2,4)-s_mat(2,3)*s_mat(1&
+ &,3)*s_mat(1,4)+s_mat(1,2)**2*s_mat(3,4)-s_mat(1,2)*s_mat(3,4)*s&
+ &_mat(1,3)+s_mat(2,4)*s_mat(1,3)**2-s_mat(1,2)*s_mat(3,4)*s_mat(&
+ &2,3)-s_mat(2,4)*s_mat(1,3)*s_mat(1,2)+s_mat(1,4)*s_mat(2,3)**2)&
+ &/det_s
+ !
+ lamb=2._ki*(-s_mat(1,4)*s_mat(2,3)*s_mat(1,2)+s_mat(1,4)**2*s_mat(&
+ &2,3)-s_mat(3,4)*s_mat(2,3)*s_mat(1,4)-s_mat(2,3)*s_mat(1,3)*s_m&
+ &at(2,4)-s_mat(1,2)*s_mat(3,4)*s_mat(1,3)+s_mat(1,2)**2*s_mat(3,&
+ &4)+s_mat(2,4)*s_mat(1,3)**2+s_mat(1,4)*s_mat(2,3)**2+s_mat(2,3)&
+ &*s_mat(1,3)*s_mat(1,2)-s_mat(2,3)*s_mat(1,3)*s_mat(1,4)-s_mat(1&
+ &,2)*s_mat(3,4)*s_mat(2,3)-s_mat(2,4)*s_mat(1,3)*s_mat(1,2)-s_ma&
+ &t(3,4)*s_mat(1,3)*s_mat(2,4)-s_mat(2,3)*s_mat(2,4)*s_mat(1,4)+s&
+ &_mat(2,4)*s_mat(3,4)*s_mat(2,3)+s_mat(2,4)**2*s_mat(1,3)-s_mat(&
+ &2,4)*s_mat(1,3)*s_mat(1,4)-s_mat(1,2)*s_mat(3,4)*s_mat(2,4)-s_m&
+ &at(1,2)*s_mat(3,4)*s_mat(1,4)+s_mat(2,4)*s_mat(1,4)*s_mat(1,2)+&
+ &s_mat(1,3)*s_mat(3,4)*s_mat(1,4)+s_mat(1,2)*s_mat(3,4)**2)
+ !
+ sumb=lamb/det_s
+ !
+ invs(1,1)=2._ki*s_mat(2,4)*s_mat(3,4)*s_mat(2,3)/det_s
+ !
+ invs(1,2)=s_mat(3,4)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3)&
+ &-s_mat(1,4)*s_mat(2,3))/det_s
+ !
+ invs(1,3)=-s_mat(2,4)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3&
+ &)+s_mat(1,4)*s_mat(2,3))/det_s
+ !
+ invs(1,4)=-s_mat(2,3)*(s_mat(2,4)*s_mat(1,3)+s_mat(1,2)*s_mat(3,4&
+ &)-s_mat(1,4)*s_mat(2,3))/det_s
+ !
+ invs(2,1) = invs(1,2)
+ !
+ invs(2,2)=2._ki*s_mat(1,3)*s_mat(3,4)*s_mat(1,4)/det_s
+ !
+ invs(2,3)=-s_mat(1,4)*(s_mat(2,4)*s_mat(1,3)+s_mat(1,2)*s_mat(3,4&
+ &)-s_mat(1,4)*s_mat(2,3))/det_s
+ !
+ invs(2,4)=-s_mat(1,3)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3&
+ &)+s_mat(1,4)*s_mat(2,3))/det_s
+ !
+ invs(3,1) = invs(1,3)
+ !
+ invs(3,2) = invs(2,3)
+ !
+ invs(3,3)=2._ki*s_mat(2,4)*s_mat(1,4)*s_mat(1,2)/det_s
+ !
+ invs(3,4)=s_mat(1,2)*(s_mat(1,2)*s_mat(3,4)-s_mat(2,4)*s_mat(1,3)&
+ &-s_mat(1,4)*s_mat(2,3))/det_s
+ !
+ invs(4,1) = invs(1,4)
+ !
+ invs(4,2) = invs(2,4)
+ !
+ invs(4,3) = invs(3,4)
+ !
+ invs(4,4)=2._ki*s_mat(2,3)*s_mat(1,3)*s_mat(1,2)/det_s
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p4m = 0._ki
+ !
+ !~ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p4m) ) then
+ if ( (rat_or_tot_par%rat_selected) .and. (4._ki <= 2._ki) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p4m (in file f4p4m.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p4m'
+ call catch_exception(0)
+ end if
+ !
+ !~ if (abs(sumb) > coupure_4p4m) then
+ if (4._ki > 2._ki) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n+2") then
+ !
+ f4p4m(3:4)= a4p4m_np2(s_mat(2,4),s_mat(1,3),&
+ &s_mat(1,4),s_mat(1,2),s_mat(2,3),s_mat(3,4),&
+ &par1,par2,par3,par4)/plus_grand
+ !
+ else if (dim == "n+4") then
+ !
+ f4p4m = a4p4m_np4(s_mat(2,4),s_mat(1,3),&
+ &s_mat(1,4),s_mat(1,2),s_mat(2,3),s_mat(3,4),&
+ &par1,par2,par3,par4)
+ f4p4m(3) = f4p4m(3)-log(plus_grand)*norma
+ !
+ end if
+ !
+ else
+ !
+ ! numerical computation
+ !
+ ! not implemented
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p4m
+ !
+ !****f* src/integrals/four_point/function_4p4m/f4p4m_c
+ ! NAME
+ !
+ ! Function f4p4m_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_2 = f4p4m_c(dim,s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing that the function f4p4m
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (dimension 3), dim="n+2" six dimensional
+ ! two adjacent mass four point function, dim="n+4" eight dimensional
+ ! two adjacent mass four point function
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s14 -- a real (type ki), the S matrix element 1,4
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p4m
+ !
+ !*****
+ function f4p4m_c(dim,s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s24,s13,s14,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(2) :: f4p4m_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f4p4m(dim,s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+ call to_complex(res4,f4p4m_c)
+ !
+ end function f4p4m_c
+ !
+ !****if* src/integrals/four_point/function_4p4m/a4p4m_np2
+ ! NAME
+ !
+ ! recursive function a4p4m_np2
+ !
+ ! USAGE
+ !
+ ! real_dim_2 = a4p4m_np2(s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the six dimensional
+ ! three mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s14 -- a real (type ki), the S matrix element 1,4
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two reals (type ki) corresponding to the
+ ! real and imaginary part of the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p4m_np2(s24,s13,s14,s12,s23,s34,par1,par2,par3,par4) result(res_4p4m_np2)
+ !
+ real(ki), intent (in) :: s24,s13,s14,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(2) :: res_4p4m_np2
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(6) :: truc1,truc2,truc3,truc4
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(6) :: temp1,temp2,temp3,temp4
+ real(ki), dimension(2) :: temp10,temp11,temp12,temp13,temp14,temp15
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule3(1,1)) then
+ !
+ truc1 = resultat3(1,1,:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,unpackb(ibclr(b_pro,1),3))
+ resultat3(1,1,:) = truc1
+ deja_calcule3(1,1) = .true.
+ !
+ end if
+ !
+ if (deja_calcule3(4,1)) then
+ !
+ truc4 = resultat3(4,1,:)
+ !
+ else
+ !
+ truc4 = f3p_sc(s_mat,unpackb(ibclr(b_pro,4),3))
+ resultat3(4,1,:) = truc4
+ deja_calcule3(4,1) = .true.
+ !
+ end if
+ !
+ if (deja_calcule3(3,1)) then
+ !
+ truc3 = resultat3(3,1,:)
+ !
+ else
+ !
+ truc3 = f3p_sc(s_mat,unpackb(ibclr(b_pro,3),3))
+ resultat3(3,1,:) = truc3
+ deja_calcule3(3,1) = .true.
+ !
+ end if
+ !
+ if (deja_calcule3(2,1)) then
+ !
+ truc2 = resultat3(2,1,:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,unpackb(ibclr(b_pro,2),3))
+ resultat3(2,1,:) = truc2
+ deja_calcule3(2,1) = .true.
+ !
+ end if
+ !
+ ctemp = f4(s24,s13,s14,s12,s23,s34)
+ res_4p4m_np2(1) = (real(ctemp,ki) - b(1)*truc1(5) - b(2)*truc2(5) - b(3)*truc3(5) - b(4)*truc4(5))/sumb
+ res_4p4m_np2(2) = (aimag(ctemp) - b(1)*truc1(6) - b(2)*truc2(6) - b(3)*truc3(6) - b(4)*truc4(6))/sumb
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp0 = b(par4)*temp0
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3(j,1)) then
+ !
+ truc1 = resultat3(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj)
+ resultat3(j,1,:) = truc1
+ deja_calcule3(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/2._ki
+ !
+ if (j /= par4) then
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 - b(j)*truc2/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p4m_np2(1) = (temp0(1) + temp1(5) + temp2(5))/sumb
+ res_4p4m_np2(2) = (temp0(2) + temp1(6) + temp2(6))/sumb
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule(par_plus(4))) then
+ !
+ temp10 = resultat(par_plus(4),:)
+ !
+ else
+ !
+ temp10 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,0,par4)
+ resultat(par_plus(4),:) = temp10
+ deja_calcule(par_plus(4)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule(par_plus(3))) then
+ !
+ temp11 = resultat(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,0,par3)
+ resultat(par_plus(3),:) = temp11
+ deja_calcule(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp12 = resultat(1,:)
+ temp0 = b(par3)*temp10+b(par4)*temp11 - invs(par3,par4)*temp12/2._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule3(j,par_plus(3))) then
+ !
+ truc1 = resultat3(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj))
+ resultat3(j,par_plus(3),:) = truc1
+ deja_calcule3(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par4)*truc1/4._ki
+ !
+ end if
+ !
+ if (j /= par4) then
+ !
+ if (deja_calcule3(j,par_plus(4))) then
+ !
+ truc2 = resultat3(j,par_plus(4),:)
+ !
+ else
+ !
+ truc2 = f3p_sc(s_mat,smj,locateb(par4,b_pro_mj))
+ resultat3(j,par_plus(4),:) = truc2
+ deja_calcule3(j,par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs(j,par3)*truc2/4._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ if (deja_calcule33(j,par_plus(3),par_plus(4))) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ !
+ else
+ !
+ truc3 = f3p_sc(s_mat,smj,locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))
+ resultat33(j,par_plus(3),par_plus(4),:) = truc3
+ deja_calcule33(j,par_plus(3),par_plus(4)) = .true.
+ !
+ end if
+ !
+ temp3 = temp3 - b(j)*truc3/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p4m_np2(1) = (temp0(1) + temp1(5) + temp2(5) + temp3(5)) &
+ *2._ki/3._ki/sumb
+ res_4p4m_np2(2) = (temp0(2) + temp1(6) + temp2(6) + temp3(6)) &
+ *2._ki/3._ki/sumb
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp10 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,par2,par3)
+ temp11 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,par2,par4)
+ temp12 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,par3,par4)
+ !
+ temp13 = resultat(par_plus(4),:)
+ temp14 = resultat(par_plus(3),:)
+ temp15 = resultat(par_plus(2),:)
+ !
+ temp0 = b(par4)*temp10+b(par3)*temp11+b(par2)*temp12 &
+ - ( invs(par2,par3)*temp13+invs(par2,par4)*temp14&
+ +invs(par3,par4)*temp15 )/3._ki
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ temp3 = 0._ki
+ temp4 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ truc1 = resultat33(j,par_plus(2),par_plus(3),:)
+ temp1 = temp1 + invs(j,par4)*truc1/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par4) ) then
+ !
+ truc2 = resultat33(j,par_plus(2),par_plus(4),:)
+ temp2 = temp2 + invs(j,par3)*truc2/6._ki
+ !
+ end if
+ !
+ if ( (j /= par3) .and. (j /= par4) ) then
+ !
+ truc3 = resultat33(j,par_plus(3),par_plus(4),:)
+ temp3 = temp3 + invs(j,par2)*truc3/6._ki
+ !
+ end if
+ !
+ if ( (j /= par2) .and. (j /= par3) .and. (j /= par4) ) then
+ !
+ temp4 = temp4 - b(j)*f3p_sc(s_mat,smj,locateb(par2,b_pro_mj), &
+ locateb(par3,b_pro_mj),locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p4m_np2(1) = ( temp0(1) + temp1(5) + temp2(5) + temp3(5) &
+ + temp4(5) )/2._ki/sumb
+ res_4p4m_np2(2) = ( temp0(2) + temp1(6) + temp2(6) + temp3(6) &
+ + temp4(6) )/2._ki/sumb
+ end if
+ !
+ end function a4p4m_np2
+ !
+ !****if* src/integrals/four_point/function_4p4m/a4p4m_np4
+ ! NAME
+ !
+ ! recursive function a4p4m_np4
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p4m_np4(s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the eight dimensional
+ ! three mass four point function. It is recursive and implement the formulae
+ ! of JHEP 10 (2005) 015.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s24 -- a real (type ki), the S matrix element 2,4
+ ! * s13 -- a real (type ki), the S matrix element 1,3
+ ! * s14 -- a real (type ki), the S matrix element 1,4
+ ! * s12 -- a real (type ki), the S matrix element 1,2
+ ! * s23 -- a real (type ki), the S matrix element 2,3
+ ! * s34 -- a real (type ki), the S matrix element 3,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p4m_np4(s24,s13,s14,s12,s23,s34,par1,par2,par3,par4) result(res_4p4m_np4)
+ !
+ real(ki), intent (in) :: s24,s13,s14,s12,s23,s34
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(4) :: res_4p4m_np4
+ !
+ integer, dimension(3) :: smj
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ if (deja_calcule3_np2(j,1)) then
+ !
+ truc1 = resultat3_np2(j,1,:)
+ !
+ else
+ !
+ truc1 = f3p_np2_sc(s_mat,smj)
+ resultat3_np2(j,1,:) = truc1
+ deja_calcule3_np2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p4m_np4(1) = (-temp1(1))/(3._ki*sumb)
+ res_4p4m_np4(2) = (-temp1(2))/(3._ki*sumb)
+ res_4p4m_np4(3) = (temp0(1)-temp1(3)-2._ki/3._ki*temp1(1))/(3._ki*sumb)
+ res_4p4m_np4(4) = (temp0(2)-temp1(4)-2._ki/3._ki*temp1(2))/(3._ki*sumb)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ temp0 = a4p4m_np2(s24,s13,s14,s12,s23,s34,0,0,0,par4)/3._ki
+ temp1 = b(par4)*a4p4m_np4(s24,s13,s14,s12,s23,s34,0,0,0,0)
+ temp2 = 0._ki
+ temp3 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ smj = unpackb(b_pro_mj,countb(b_pro_mj))
+ !
+ truc1 = resultat3_np2(j,1,:)
+ temp2 = temp2 + invs(j,par4)*truc1/6._ki
+ !
+ if (j /= par4) then
+ !
+ temp3 = temp3 - b(j)*f3p_np2_sc(s_mat,smj,locateb(par4,b_pro_mj))/2._ki
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_4p4m_np4(1) = ( temp1(1)+temp2(1)+temp3(1) )/(2._ki*sumb)
+ res_4p4m_np4(2) = ( temp1(2)+temp2(2)+temp3(2) )/(2._ki*sumb)
+ res_4p4m_np4(3) = ( temp1(3)+temp1(1)/6._ki+temp2(3)+temp2(1)/2._ki &
+ +temp3(3)+temp3(1)/2._ki+temp0(1) )/(2._ki*sumb)
+ res_4p4m_np4(4) = ( temp1(4)+temp1(2)/6._ki+temp2(4)+temp2(2)/2._ki &
+ +temp3(4)+temp3(2)/2._ki+temp0(2) )/(2._ki*sumb)
+ !
+ ! cas avec plus de un parametre de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a4p4m_np4:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of four-point integrals in n+4 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p4m_np4
+ !
+ !****f* src/integrals/four_point/function_4p4m/f4
+ ! NAME
+ !
+ ! function f4
+ !
+ ! USAGE
+ !
+ ! complex = f4(s,t,s1,s2,s3,s4)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the "finite part" of the scalar four dimensional three
+ ! mass four point function.
+ !
+ !
+ ! INPUTS
+ !
+ ! * s -- a real (type ki), (p1+p2)^2
+ ! * t -- a real (type ki), (p2+p3)^2
+ ! * s1 -- a real (type ki), p1^2
+ ! * s2 -- a real (type ki), p2^2
+ ! * s3 -- a real (type ki), p3^2
+ ! * s4 -- a real (type ki), p4^2
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ ! Affected by the variable rat_or_tot_par (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !**********************************************************************
+ !
+ ! the _ki massless box function !!
+ !
+ ! note: parameters adapted for double precision
+ ! from Binoth et al.
+ !
+ function f4(s,t,s1,s2,s3,s4)
+ !
+ real(ki), intent(in) :: s,t,s1,s2,s3,s4
+ complex(ki) :: f4
+ !
+ complex(ki) :: k12,k13,k14,k23,k24,k34
+ complex(ki) :: a, b, c, d, e, f, discr, srdelta
+ complex(ki) :: x1, x2
+ complex(ki) :: eta
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ ! parameters:
+ !
+ eta= (1.e-25_ki,0._ki)
+ !
+ ! scaled momenta:
+ ! kij = - ( p_{i} + ... + p_{j-1} )^2
+ !
+ k12 = -s1
+ k13 = -s
+ k14 = -s4
+ k23 = -s2
+ k24 = -t
+ k34 = -s3
+ !
+ ! short hands:
+ !
+ a = k24*k34
+ b = k13*k24+k12*k34-k14*k23
+ c = k12*k13
+ d = k23
+ !
+ e = (k34-i_*eta)/(k13-i_*eta)
+ f = (k24-i_*eta)/(k12-i_*eta)
+ !
+ ! the discriminant:
+ !
+ discr = (b/a)**2 - 4._ki*( c + i_*eta*d*1._ki )/( a )
+ srdelta = sqrt( discr )
+ !
+ ! the roots:
+ !
+ x1 = -( b/a - srdelta )/2._ki
+ x2 = -( b/a + srdelta )/2._ki
+ !
+ ! the massless box function:
+ !
+ f4 = 1._ki /a / srdelta*&
+ ( + log(-x1)**2/2._ki &
+ + cdilog(1._ki+x1*e) + pheta(-x1,e)*log(1._ki+x1*e)&
+ + cdilog(1._ki+x1*f) + pheta(-x1,f)*log(1._ki+x1*f)&
+ - log(-x1)*( log(k12-i_*eta)+log(k13-i_*eta)&
+ -log(k14-i_*eta)-log(k23-i_*eta) )&
+ - log(-x2)**2/2._ki &
+ - cdilog(1._ki+x2*e) - pheta(-x2,e)*log(1._ki+x2*e)&
+ - cdilog(1._ki+x2*f) - pheta(-x2,f)*log(1._ki+x2*f)&
+ + log(-x2)*( log(k12-i_*eta)+log(k13-i_*eta)&
+ - log(k14-i_*eta)-log(k23-i_*eta) ) )
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f4 = 0._ki
+ !
+ end if
+ !
+ end function f4
+!**********************************************************************
+ function pheta(u,v)
+ !
+ complex(ki) :: u,v
+ complex(ki) :: pheta
+ !
+ complex(ki) :: w
+ !
+ w = u*v
+ ! pheta = i*2._ki*pi*(
+ ! & +theta(-dimag(u))*theta(-dimag(v))*theta( dimag(w))
+ ! & -theta( dimag(u))*theta( dimag(v))*theta(-dimag(w)) )
+ ! if (dimag(w).eq.0._ki.and.dble(w).le.0._ki) write (*,*) 'pheta !'
+ pheta = log( w ) - log( u ) - log( v )
+ !
+ end function pheta
+ !
+ !
+end module function_4p4m
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql14.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql14.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql14.f90 (revision 119)
@@ -0,0 +1,456 @@
+!
+!****h* src/integrals/four_point/function_4p_ql14
+! NAME
+!
+! Module function_4p_ql14
+!
+! USAGE
+!
+! use function_4p_ql14
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 14
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql14, f4p_ql14_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql14
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql14,f4p_ql14_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql14/f4p_ql14
+ ! NAME
+ !
+ ! Function f4p_ql14
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql14(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql14(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql14
+ !
+ integer :: nb_par
+ real(ki) :: norma,coupure_4p_ql14
+ !real(ki) :: plus_grand
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql14 = 0._ki
+ coupure_4p_ql14 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql14) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql14 (in file f4p_ql14.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql14'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql14) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql14_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql14= a4p_ql14_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql14: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql14: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql14 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql14 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql14
+ !
+ !****f* src/integrals/four_point/function_4p_ql14/f4p_ql14_c
+ ! NAME
+ !
+ ! Function f4p_ql14_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql14_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql14
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql14
+ !
+ !*****
+ function f4p_ql14_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql14_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql14(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql14_c)
+ !
+ end function f4p_ql14_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql14/a4p_ql14_n
+ ! NAME
+ !
+ ! recursive function a4p_ql14_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql14_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql14_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql14_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql14_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ !real(k9) :: msq
+ real(ki) :: del,deno,cut,lim
+ complex(ki) :: ds12,ds23,dm2,dm4,beta23,x23,logsmu,fac,rm2,rm4
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ cut=1.e-8_ki
+ lim=abs(s23-(sqrt(m1s)-sqrt(m3s))**2)
+ !
+ dm2=m1s-i_*del
+ dm4=m3s-i_*del
+ rm2=sqrt(m1s)
+ rm4=sqrt(m3s)
+ !
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ !
+ logsmu=log(mu2/(-ds12))
+ beta23=Sqrt(1._ki-4*rm2*rm4/(ds23-(rm2-rm4)**2))
+ x23=-(1._ki-beta23)/(1._ki+beta23)
+ deno=rm2*rm4*s12
+ fac=-2*x23*log(x23)/(1-x23**2)/deno
+ !
+ res_4p_ql14_n(1) = 0._ki
+ res_4p_ql14_n(2) = 0._ki
+ !
+ ! case lim > cut
+ if (lim > cut) then
+ !
+ res_4p_ql14_n(3) = real(fac)
+ res_4p_ql14_n(4) = aimag(fac)
+ res_4p_ql14_n(5) = real( fac*logsmu )
+ res_4p_ql14_n(6) = aimag( fac*logsmu )
+ !
+ else ! use approximation for x23->1
+ !
+ res_4p_ql14_n(3) = real(1._ki/deno)
+ res_4p_ql14_n(4) = 0._ki
+ res_4p_ql14_n(5) = real( logsmu/deno )
+ res_4p_ql14_n(6) = aimag( logsmu/deno )
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql14: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql14: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql14_n
+ !
+ !
+end module function_4p_ql14
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql15.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql15.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql15.f90 (revision 119)
@@ -0,0 +1,508 @@
+!
+!****h* src/integrals/four_point/function_4p_ql15
+! NAME
+!
+! Module function_4p_ql15
+!
+! USAGE
+!
+! use function_4p_ql15
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 14
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql15, f4p_ql15_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql15
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql15,f4p_ql15_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql15/f4p_ql15
+ ! NAME
+ !
+ ! Function f4p_ql15
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql15(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql15(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql15
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql15
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql15 = 0._ki
+ coupure_4p_ql15 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql15) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql15 (in file f4p_ql15.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql15'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql15) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql15_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql15= a4p_ql15_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql15: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql15: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql15 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql15 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql15
+ !
+ !****f* src/integrals/four_point/function_4p_ql15/f4p_ql15_c
+ ! NAME
+ !
+ ! Function f4p_ql15_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql15_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql15
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql15
+ !
+ !*****
+ function f4p_ql15_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql15_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql15(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql15_c)
+ !
+ end function f4p_ql15_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql15/a4p_ql15_n
+ ! NAME
+ !
+ ! recursive function a4p_ql15_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql15_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql15_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql15_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql15_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,rm2,rm4,lim1,lim2,lim3,cut
+ !real(ki) :: msq
+ complex(ki) :: ds12,ds23,dm2,dm4,dp2,dp3,beta23,x23,fac,y,deno
+ !complex(ki) :: logsmu
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ cut=1.e-8_ki
+ !
+ dm2=m1s-i_*del
+ dm4=m3s-i_*del
+ rm2=sqrt(m1s)
+ rm4=sqrt(m3s)
+ !
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp2= s2+i_*del
+ dp3= s3+i_*del
+ !
+ lim1=abs(m3s-s3)
+ lim2=abs(m1s-s2)
+ lim3=abs(s23-(rm2-rm4)**2)
+ !
+ y=rm2/rm4*(dm4-dp3)/(dm2-dp2)
+ beta23=Sqrt(1._ki-4*rm2*rm4/(ds23-(rm2-rm4)**2))
+ x23=-(1._ki-beta23)/(1._ki+beta23)
+ deno=rm2*rm4*ds12
+ fac=x23/(1._ki-x23**2)/deno
+ !
+ res_4p_ql15_n(1) = 0._ki
+ res_4p_ql15_n(2) = 0._ki
+ !
+ if ( (lim1 < cut).and.(lim2 > cut) .and. (lim3 > cut) ) then
+ !
+ res_4p_ql15_n(3) = real(-fac*log(x23))
+ res_4p_ql15_n(4) = aimag(-fac*log(x23))
+ res_4p_ql15_n(5) = real( fac*log(x23)*(-log(x23) -log(mu2/dm2) &
+ & -2*log((dm2-dp2)/(-ds12)) ) &
+ & + fac*( -cdilog(1._ki-x23**2) &
+ & + cdilog(1._ki-x23*y) &
+ & - cdilog(1._ki-y/x23) ) )
+ res_4p_ql15_n(6) = aimag( fac*log(x23)*(-log(x23) -log(mu2/dm2) &
+ & -2*log((dm2-dp2)/(-ds12)) ) &
+ & + fac*( -cdilog(1._ki-x23**2) &
+ & + cdilog(1._ki-x23*y) &
+ & - cdilog(1._ki-y/x23) ) )
+ !
+ else if ( (lim2 < cut).and.(lim1>cut) .and. (lim3 > cut) ) then
+ !
+ res_4p_ql15_n(3) = real(-fac*log(x23))
+ res_4p_ql15_n(4) = aimag(-fac*log(x23))
+ res_4p_ql15_n(5) = real( fac*log(x23)*(-log(x23) -log(mu2/dm4) &
+ & -2*log((dm4-dp3)/(-ds12)) ) &
+ & + fac*( -cdilog(1._ki-x23**2) &
+ & + cdilog(1._ki-x23/y) &
+ & - cdilog(1._ki-1._ki/y/x23) ) )
+ res_4p_ql15_n(6) = aimag( fac*log(x23)*(-log(x23) -log(mu2/dm4) &
+ & -2*log((dm4-dp3)/(-ds12)) ) &
+ & + fac*( -cdilog(1._ki-x23**2) &
+ & + cdilog(1._ki-x23/y) &
+ & - cdilog(1._ki-1._ki/y/x23) ) )
+ !
+ else if (lim3 < cut) then
+ !
+ ! call print_error('lim3<cut,lim3=',arg_real=lim3)
+ fac=1._ki/2._ki/deno
+ !
+ res_4p_ql15_n(3) = real(fac)
+ res_4p_ql15_n(4) = aimag(fac)
+ res_4p_ql15_n(5) = real( fac*( log(mu2/rm2/rm4) &
+ & +log((dm2-dp2)/(-ds12)) + log((dm4-dp3)/(-ds12)) &
+ & -2._ki - (1._ki+y)/(1._ki-y)*log(y) ) )
+ res_4p_ql15_n(6) = aimag( fac*( log(mu2/rm2/rm4) &
+ & +log((dm2-dp2)/(-ds12)) + log((dm4-dp3)/(-ds12)) &
+ & -2._ki - (1._ki+y)/(1._ki-y)*log(y) ) )
+ !
+ else ! full expression
+ !
+ res_4p_ql15_n(3) = real(-fac*log(x23))
+ res_4p_ql15_n(4) = aimag(-fac*log(x23))
+ res_4p_ql15_n(5) = real( fac*log(x23)*(-log(x23)/2._ki -log(mu2/rm2/rm4) &
+ & -log((dm2-dp2)/(-ds12)) - log((dm4-dp3)/(-ds12)) ) &
+ & + fac*( cdilog(x23**2) + Pi**2/6._ki +2*log(x23)*log(1._ki-x23**2) &
+ & +log(y)**2/2._ki &
+ & -( cdilog(x23*y) + log(1._ki-x23*y)*(log(x23)+log(y)) ) &
+ & -( cdilog(x23/y) + log(1._ki-x23/y)*(log(x23)-log(y)) ) ) )
+ res_4p_ql15_n(6) = aimag( fac*log(x23)*(-log(x23)/2._ki -log(mu2/rm2/rm4) &
+ & -log((dm2-dp2)/(-ds12)) - log((dm4-dp3)/(-ds12)) ) &
+ & + fac*( cdilog(x23**2) + Pi**2/6._ki + 2*log(x23)*log(1._ki-x23**2) &
+ & +log(y)**2/2._ki &
+ & -( cdilog(x23*y) + log(1._ki-x23*y)*(log(x23)+log(y)) ) &
+ & -( cdilog(x23/y) + log(1._ki-x23/y)*(log(x23)-log(y)) ) ) )
+ !
+ end if ! end test limits
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql15: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql15: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql15_n
+ !
+ !
+end module function_4p_ql15
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql16.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql16.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/four_point/function_4p_ql16.f90 (revision 119)
@@ -0,0 +1,489 @@
+!
+!****h* src/integrals/four_point/function_4p_ql16
+! NAME
+!
+! Module function_4p_ql16
+!
+! USAGE
+!
+! use function_4p_ql16
+!
+! DESCRIPTION
+!
+! This module computes the n-dimensional four point function
+! corresponding to QCDLoop box number 14
+! implemented only without Feynman parameters in the numerator!
+!
+! OUTPUT
+!
+! This module exports the functions f4p_ql16, f4p_ql16_c
+! all the other subroutines/functions of this module are private
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_3p (src/integrals/three_point/generic_function_3p.f90)
+! * translate (src/module/translate.f90)
+! * more_integ_info (src/module/more_integ_info.f90)
+!
+!*****
+module function_4p_ql16
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_3p
+ use translate
+ use equal
+ use dilogarithme
+ implicit none
+ !
+ private
+ real(ki) :: s23_glob,s24_glob,s34_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob,par4_glob
+ character (len=1) :: dim_glob
+ !
+ real(ki), dimension(4) :: b
+ real(ki) :: sumb
+ real(ki), dimension(4,4) :: invs,s_mat
+ integer, dimension(4) :: par
+ integer, dimension(4) :: s = (/1,2,3,4/)
+ real(ki) :: lamb
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule3
+ real(ki),dimension(:,:,:), allocatable :: resultat3
+ logical, dimension(:,:), allocatable :: deja_calcule3_np2
+ real(ki),dimension(:,:,:), allocatable :: resultat3_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule33
+ real(ki),dimension(:,:,:,:), allocatable :: resultat33
+ !
+ public :: f4p_ql16,f4p_ql16_c
+ !
+ contains
+ !
+ !****f* src/integrals/four_point/function_4p_ql16/f4p_ql16
+ ! NAME
+ !
+ ! Function f4p_ql16
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = f4p_ql16(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! computes the n-dimensional four point function
+ ! with 1 internal mass and two massive on-shell legs,
+ ! corresponding to QCDLoop box number 6
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character , dim="n" (4-2*eps) - dimensional
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ ! Be careful that, in this function, the arguments par1, par2, par3 and par4
+ ! are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ ! finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f4p_ql16(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: f4p_ql16
+ !
+ integer :: nb_par
+ !real(ki) :: plus_grand
+ real(ki) :: norma,coupure_4p_ql16
+ !complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3,par4/)
+ !
+ s_mat(1,:) = (/-m1s*2._ki,s2-m1s-m2s,s23-m1s-m3s,s1-m1s-m4s/)
+ s_mat(2,:) = (/s2-m1s-m2s,-m2s*2._ki,s3-m2s-m3s,s12-m2s-m4s/)
+ s_mat(3,:) = (/s23-m1s-m3s,s3-m2s-m3s,-m3s*2._ki,s4-m3s-m4s/)
+ s_mat(4,:) = (/s1-m1s-m4s,s12-m2s-m4s,s4-m3s-m4s,-m4s*2._ki/)
+ ! on redefinit la matrice S de telle facon a ce que ses elements
+ ! soient entre -1 et 1
+ ! plus_grand = maxval(array=abs(s_mat))
+ ! s_mat = s_mat/plus_grand
+ !
+ b(1) = (s_mat(1,3)*s_mat(2,4)-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+2._ki*s_mat(2,3)*s_mat(3,4))&
+ &/(s_mat(1,3)**2*s_mat(2,4))
+ b(2) = (s_mat(1,3)-s_mat(3,4))/(s_mat(1,3)*s_mat(2,4))
+ b(3) = 1._ki/s_mat(1,3)
+ b(4) = (s_mat(1,3)-s_mat(2,3))/(s_mat(1,3)*s_mat(2,4))
+ !
+ sumb = 2._ki*(s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4))/(s_mat(1,3)**2*s_mat(2,4))
+ !
+ !
+ invs(1,1) = 2._ki*s_mat(2,3)/s_mat(2,4)*s_mat(3,4)/s_mat(1,3)**2
+ invs(1,2) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(1,3) = 1._ki/s_mat(1,3)
+ invs(1,4) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(2,1) = -1._ki/s_mat(1,3)/s_mat(2,4)*s_mat(3,4)
+ invs(2,2) = 0._ki
+ invs(2,3) = 0._ki
+ invs(2,4) = 1._ki/s_mat(2,4)
+ invs(3,1) = 1._ki/s_mat(1,3)
+ invs(3,2) = 0._ki
+ invs(3,3) = 0._ki
+ invs(3,4) = 0._ki
+ invs(4,1) = -1._ki/s_mat(1,3)*s_mat(2,3)/s_mat(2,4)
+ invs(4,2) = 1._ki/s_mat(2,4)
+ invs(4,3) = 0._ki
+ invs(4,4) = 0._ki
+ !
+ lamb = s_mat(1,3)**2-s_mat(1,3)*s_mat(2,3)&
+ &-s_mat(1,3)*s_mat(3,4)+s_mat(1,3)*s_mat(2,4)&
+ &+s_mat(2,3)*s_mat(3,4)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ norma = 1._ki/6._ki
+ else if (nb_par == 1) then
+ norma = 1._ki/24._ki
+ else
+ norma = 0._ki
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(5))
+ allocate(resultat(5,2))
+ allocate(deja_calcule3(4,5))
+ allocate(resultat3(4,5,6))
+ allocate(deja_calcule3_np2(4,5))
+ allocate(resultat3_np2(4,5,4))
+ allocate(deja_calcule33(4,5,5))
+ allocate(resultat33(4,5,5,6))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule3 = .false.
+ resultat3 = 0._ki
+ deja_calcule3_np2 = .false.
+ resultat3_np2 = 0._ki
+ deja_calcule33 = .false.
+ resultat33 = 0._ki
+ !
+ f4p_ql16 = 0._ki
+ coupure_4p_ql16 = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p_ql16) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql16 (in file f4p_ql16.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Becareful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_4p_ql16'
+ call catch_exception(0)
+ end if
+ !
+ if (abs(sumb) > coupure_4p_ql16) then
+ !
+ ! analytic computation
+ !
+ if (dim == "n") then
+ !
+ ! a4p_ql16_n is n-dim, not (n+2)-dim !!!
+ !
+ f4p_ql16= a4p_ql16_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql16: box called with wrong dimension')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql16: box called with wrong dimension'
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ !~ call print_error('numerical calculation of f4p_ql16 not implemented')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'numerical calculation of f4p_ql16 not implemented'
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule3)
+ deallocate(resultat3)
+ deallocate(deja_calcule3_np2)
+ deallocate(resultat3_np2)
+ deallocate(deja_calcule33)
+ deallocate(resultat33)
+ !
+ end function f4p_ql16
+ !
+ !****f* src/integrals/four_point/function_4p_ql16/f4p_ql16_c
+ ! NAME
+ !
+ ! Function f4p_ql16_c
+ !
+ ! USAGE
+ !
+ ! complex_dim_4 = f4p_ql16_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function also computes the function f4p_ql16
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character, dim="n"
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of two complexs (type ki) corresponding to the
+ ! 1/epsilon coefficient and the finite part (as epsilon --> 0)
+ !
+ ! EXAMPLE
+ !
+ ! see function f4p_ql16
+ !
+ !*****
+ function f4p_ql16_c(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ character (len=1), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ complex(ki), dimension(6) :: f4p_ql16_c
+ !
+ real(ki), dimension(6) :: res4
+ !
+ res4 = f4p_ql16(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ call to_complex(res4,f4p_ql16_c)
+ !
+ end function f4p_ql16_c
+ !
+ !****if* src/integrals/four_point/function_4p_ql16/a4p_ql16_n
+ ! NAME
+ !
+ ! recursive function a4p_ql16_n
+ !
+ ! USAGE
+ !
+ ! real_dim_4 = a4p_ql16_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the core for the analytic computation of the (4-2*eps)-dimensional
+ ! four point function corresponding to box 6 of QCDLoop
+ !
+ !
+ ! INPUTS
+ !
+ ! * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ ! * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ ! * s1 -- a real (type ki), the S matrix element 1,4
+ ! * s2 -- a real (type ki), the S matrix element 2,1
+ ! * s3 -- a real (type ki), the S matrix element 3,2
+ ! * s4 -- a real (type ki), the S matrix element 4,3
+ ! * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ ! * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ ! * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ ! * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ ! * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ ! * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ ! * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ ! * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+ !
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effects
+ !
+ ! RETURN VALUE
+ !
+ ! this function returns an array of four reals (type ki) corresponding to the
+ ! real and imaginary parts of the 1/eps part and finite part
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a4p_ql16_n(s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,&
+ & par1,par2,par3,par4,mu2) result(res_4p_ql16_n)
+ !
+ real(ki), intent (in) :: s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,mu2
+ integer, intent (in) :: par1,par2,par3,par4
+ real(ki), dimension(6) :: res_4p_ql16_n
+ !
+ !integer, dimension(3) :: smj,sm1
+ !integer :: j
+ integer :: nb_par_loc
+ integer, dimension(4) :: par_loc,par_plus
+ !real(ki), dimension(6) :: truc1
+ real(ki) :: del,deno,rm2,rm3,rm4,m3mu,lim,cut
+ !real(ki) :: msq
+ complex(ki) :: ds12,ds23,dm2,dm3,dm4,dp2,dp3,beta23,x23,x2,x3,beta2,beta3,logm0,logsmu,fac,y
+ !
+ par_loc = (/par1,par2,par3,par4/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! only the scalar box (no Feynman parameters in numerator) is implemented
+ !
+ if (nb_par_loc == 0) then
+ !
+ del=10*epsilon(1._ki)
+ cut=1.e-8_ki
+ !
+ dm2=m1s-i_*del
+ dm3=m2s-i_*del
+ dm4=m3s-i_*del
+ rm2=sqrt(m1s)
+ rm3=sqrt(m2s)
+ rm4=sqrt(m3s)
+ m3mu=sqrt(m2s/mu2)
+ lim=abs(s23-(rm2-rm4)**2)
+ !
+ ds12=s12+i_*del
+ ds23=s23+i_*del
+ dp2= s2+i_*del
+ dp3= s3+i_*del
+ !
+ y=rm2/rm4*(dm4-dp3)/(dm2-dp2)
+ logsmu=log(mu2/(-ds12))
+ beta23=Sqrt(1._ki-4*rm2*rm4/(ds23-(rm2-rm4)**2))
+ x23=-(1._ki-beta23)/(1._ki+beta23)
+ beta2=Sqrt(1._ki-4*rm2*rm3/(dp2-(rm2-rm3)**2))
+ x2=-(1._ki-beta2)/(1._ki+beta2)
+ beta3=Sqrt(1._ki-4*rm3*rm4/(dp3-(rm3-rm4)**2))
+ x3=-(1._ki-beta3)/(1._ki+beta3)
+ !
+ deno=rm2*rm4*(s12-m2s)
+ fac=x23/(1._ki-x23**2)/deno
+ logm0=Log(m3mu/(dm3-ds12))
+!
+ res_4p_ql16_n(1) = 0._ki
+ res_4p_ql16_n(2) = 0._ki
+ !
+ if (lim > cut ) then
+ res_4p_ql16_n(3) = real(-fac*log(x23))
+ res_4p_ql16_n(4) = aimag(-fac*log(x23))
+!
+ res_4p_ql16_n(5) = real( fac*(2*log(x23)*(log(1._ki-x23**2)-logm0 ) &
+ & + log(x2)**2+log(x3)**2+cdilog(x23**2) + Pi**2/2._ki &
+ & - (log(x23)+log(x2)+log(x3))*log(1._ki-x23*x2*x3) &
+ & - cdilog(x23*x2*x3) &
+ & - (log(x23)+log(1._ki/x2)+log(1._ki/x3))*log(1._ki-x23/x2/x3) &
+ & -cdilog(x23/x2/x3) &
+ & - (log(x23)+log(x2)+log(1._ki/x3))*log(1._ki-x23*x2/x3) &
+ & -cdilog(x23*x2/x3) &
+ & - (log(x23)+log(1._ki/x2)+log(x3))*log(1._ki-x23/x2*x3) &
+ & -cdilog(x23/x2*x3) ) )
+ res_4p_ql16_n(6) = aimag( fac*( 2*log(x23)*(log(1._ki-x23**2)-logm0 ) &
+ & + log(x2)**2+log(x3)**2+cdilog(x23**2) + Pi**2/2._ki &
+ & - (log(x23)+log(x2)+log(x3))*log(1._ki-x23*x2*x3) &
+ & - cdilog(x23*x2*x3) &
+ & - (log(x23)+log(1._ki/x2)+log(1._ki/x3))*log(1._ki-x23/x2/x3) &
+ & -cdilog(x23/x2/x3) &
+ & - (log(x23)+log(x2)+log(1._ki/x3))*log(1._ki-x23*x2/x3) &
+ & -cdilog(x23*x2/x3) &
+ & - (log(x23)+log(1._ki/x2)+log(x3))*log(1._ki-x23/x2*x3) &
+ & -cdilog(x23/x2*x3) ) )
+ !
+ else ! limit x23->1
+ !
+ fac=1._ki/2._ki/deno
+ !
+ res_4p_ql16_n(3) = real(fac)
+ res_4p_ql16_n(4) = aimag(fac)
+ res_4p_ql16_n(5) = real( fac*( 2*logm0 - (1._ki+x2*x3)/(1._ki-x2*x3)*(log(x2)+log(x3)) &
+ & - (x2+x3)/(x3-x2)*(log(x2)-log(x3)) -2._ki ) )
+ res_4p_ql16_n(6) = aimag( fac*( 2*logm0 - (1._ki+x2*x3)/(1._ki-x2*x3)*(log(x2)+log(x3)) &
+ & - (x2+x3)/(x3-x2)*(log(x2)-log(x3)) -2._ki ) )
+ !
+ end if ! end if lim>cut
+ !
+ else
+ !
+ !~ call print_error('In function f4p_ql16: only scalar case available for this box')
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f4p_ql16: only scalar case available for this box'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a4p_ql16_n
+ !
+ !
+end module function_4p_ql16
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/Makefile.am (revision 119)
@@ -0,0 +1 @@
+SUBDIRS= one_point two_point three_point four_point
Index: 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.am (revision 119)
@@ -0,0 +1,14 @@
+noinst_LTLIBRARIES=libgolem95_integrals_one_point.la
+
+AM_FCFLAGS= \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical
+
+libgolem95_integrals_one_point_la_SOURCES= generic_function_1p.f90
+libgolem95_integrals_one_point_la_FCFLAGS= $(AM_FCFLAGS)
+
+nodist_pkginclude_HEADERS= generic_function_1p.mod
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/integrals/one_point/generic_function_1p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/one_point/generic_function_1p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/one_point/generic_function_1p.f90 (revision 119)
@@ -0,0 +1,234 @@
+!****h* src/integrals/two_point/generic_function_1p
+! NAME
+!
+! Module generic_function_1p
+!
+! USAGE
+!
+! use generic_function_1p
+!
+! DESCRIPTION
+!
+! This module contains the generic routines to compute
+! one point functions in n dimensions
+!
+! OUTPUT
+!
+! It exports one public routine:
+! * f1p -- a function to compute the one point function in n dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * array (src/module/array.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * parametre (src/module/parametre.f90)
+! * s_matrix_type (src/module/s_matrix_type.f90)
+! * equal (src/module/equal.f90)
+!
+!*****
+module generic_function_1p
+ !
+ use precision_golem
+ use array
+ use logarithme
+ use constante, only:czero, zero
+ use sortie_erreur
+ use parametre
+ use s_matrix_type
+ use equal
+ !
+ implicit none
+ !
+ private
+ !
+ interface f1p
+ !
+ module procedure f1p_r, f1p_c
+ module procedure f1p_p
+ !
+ end interface
+
+ public :: f1p
+ !
+contains
+ !
+ !****f* src/integrals/one_point/generic_function_1p/f1p
+ ! NAME
+ !
+ ! Function f1p
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f1p(s_mat_p,b_pro,parf1)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic two point function in n dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_(r/c/p) -- a real/complex (type ki)/type(s_matrix_poly) array of rank 2, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function f1p_p(s_mat_p,b_pro,parf1)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent(in) :: b_pro
+ integer, intent(in), optional :: parf1
+ complex(ki), dimension(2) :: f1p_p
+ !
+ if (iand(s_mat_p%b_cmplx, b_pro) .eq. 0 ) then
+ !
+ f1p_p = f1p_r(s_mat_p%pt_real, b_pro, parf1=parf1)
+ !
+ else
+ !
+ f1p_p = f1p_c(s_mat_p%pt_cmplx, b_pro, parf1=parf1)
+ !
+ end if
+ !
+ end function f1p_p
+ !
+ function f1p_r(s_mat_r,b_pro,parf1)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1
+ complex(ki), dimension(2) :: f1p_r
+ !
+ integer :: par1
+ real(ki) :: mass1
+ integer :: m1
+ integer, dimension(1) :: s
+ !
+ if (present(parf1)) then
+ par1 = parf1
+ else
+ par1 = 0
+ end if
+ !
+ if (par1 /= 0) par1 = locateb(par1, b_pro)
+ !
+ if (par1 == -1) then
+ !
+ f1p_r(:) = czero
+ !
+ else
+ !
+ s = unpackb(b_pro,countb(b_pro))
+ !
+ m1 = s(1)
+ !
+ mass1 = -s_mat_r(m1,m1)/2._ki
+ !
+ if ( equal_real(mass1,zero) ) then
+ !
+ f1p_r(:) = czero
+ !
+ else
+ !
+ if (par1 == 0) then
+ !
+ f1p_r(1) = cmplx(mass1,0._ki,ki)
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f1p_r(2) = mass1*(1._ki - z_log(mass1/mu2_scale_par,-1._ki) )
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f1p_r(2) = cmplx(mass1,0._ki,ki)
+ !
+ end if
+ !
+ else if (par1 /= 0) then
+ !
+ f1p_r(:) = czero
+ !
+ end if
+ !
+ end if
+ !
+ end if
+ !
+ end function f1p_r
+ !
+ function f1p_c(s_mat_c,b_pro,parf1)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1
+ complex(ki), dimension(2) :: f1p_c
+ !
+ integer :: par1
+ complex(ki) :: mass1
+ integer :: m1
+ integer, dimension(1) :: s
+ !
+ if (present(parf1)) then
+ par1 = parf1
+ else
+ par1 = 0
+ end if
+ !
+ if (par1 /= 0) par1 = locateb(par1, b_pro)
+ !
+ if (par1 == -1) then
+ !
+ f1p_c(:) = czero
+ !
+ else
+ !
+ s = unpackb(b_pro,countb(b_pro))
+ !
+ m1 = s(1)
+ !
+ mass1 = -s_mat_c(m1,m1)/2._ki
+ !
+ ! This function is only called with non_vanishing mass1
+ !
+ if (par1 == 0) then
+ !
+ f1p_c(1) = mass1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f1p_c(2) = mass1*(1._ki - z_log(mass1/mu2_scale_par,-1._ki) )
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f1p_c(2) = mass1
+ !
+ end if
+ !
+ else if (par1 /= 0) then
+ !
+ f1p_c(:) = czero
+ !
+ end if
+ !
+ end if
+ !
+ end function f1p_c
+ !
+end module generic_function_1p
Index: 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.in (revision 119)
@@ -0,0 +1,532 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/integrals/one_point
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_integrals_one_point_la_LIBADD =
+am_libgolem95_integrals_one_point_la_OBJECTS = \
+ libgolem95_integrals_one_point_la-generic_function_1p.lo
+libgolem95_integrals_one_point_la_OBJECTS = \
+ $(am_libgolem95_integrals_one_point_la_OBJECTS)
+libgolem95_integrals_one_point_la_LINK = $(LIBTOOL) --tag=FC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_integrals_one_point_la_FCFLAGS) $(FCFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_integrals_one_point_la_SOURCES)
+DIST_SOURCES = $(libgolem95_integrals_one_point_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_integrals_one_point.la
+AM_FCFLAGS = \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical
+
+libgolem95_integrals_one_point_la_SOURCES = generic_function_1p.f90
+libgolem95_integrals_one_point_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = generic_function_1p.mod
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/integrals/one_point/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/integrals/one_point/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_integrals_one_point.la: $(libgolem95_integrals_one_point_la_OBJECTS) $(libgolem95_integrals_one_point_la_DEPENDENCIES)
+ $(libgolem95_integrals_one_point_la_LINK) $(libgolem95_integrals_one_point_la_OBJECTS) $(libgolem95_integrals_one_point_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_integrals_one_point_la-generic_function_1p.lo: generic_function_1p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_one_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_one_point_la-generic_function_1p.lo $(FCFLAGS_f90) `test -f 'generic_function_1p.f90' || echo '$(srcdir)/'`generic_function_1p.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/one_point/Makefile.dep (revision 119)
@@ -0,0 +1 @@
+# Module dependencies
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_h0.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_h0.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_h0.f90 (revision 119)
@@ -0,0 +1,185 @@
+!
+!****h* src/integrals/three_point/func_h0
+! NAME
+!
+! Module func_h0
+!
+! USAGE
+!
+! use func_h0
+!
+! DESCRIPTION
+!
+! This module is specific for the function h0 defined
+! by h0(x,alpha) = (-x-i lambda)^(alpha)/x
+! with alpha << 1. The three functions h0d, h0e and h0f
+! are defined as:
+! h0(x,alpha) = h0d(x) + alpha h0e(x) + alpha^2 h0f(x)
+!
+!
+! OUTPUT
+!
+! This module exports three functions:
+! * h0d -- function
+! * h0e -- function
+! * h0f -- function
+!
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * parametre (src/module/parametre.f90)
+! * logarithme (src/module/z_log.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!*****
+module func_h0
+ !
+ use precision_golem
+ use parametre
+ use logarithme
+ use sortie_erreur
+ implicit none
+ !
+ private
+ public :: h0d,h0e,h0f
+ !
+ contains
+ !
+ !****f* src/integrals/three_point/func_h0/h0d
+ ! NAME
+ !
+ ! Function h0d
+ !
+ ! USAGE
+ !
+ ! real_dim2 = h0d(x)
+ !
+ ! DESCRIPTION
+ !
+ ! Compute the function 1/x
+ !
+ ! INPUTS
+ !
+ ! * x -- a real (type ki)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function h0d(x)
+ !
+ real(ki), intent(in) :: x
+ real(ki), dimension(2) :: h0d
+ !
+ h0d(1) = 1._ki/x
+ h0d(2) = 0._ki
+ !
+ end function h0d
+ !
+ !****f* src/integrals/three_point/func_h0/h0e
+ ! NAME
+ !
+ ! Function h0e
+ !
+ ! USAGE
+ !
+ ! real_dim2 = h0e(x)
+ !
+ ! DESCRIPTION
+ !
+ ! Compute the function ln(-x)/x
+ !
+ ! INPUTS
+ !
+ ! * x -- a real (type ki)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variable rat_or_tot_par
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function h0e(x)
+ !
+ real(ki), intent(in) :: x
+ real(ki), dimension(2) :: h0e
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ h0e(1) = real(z_log(-x/mu2_scale_par,-1._ki)/x,ki)
+ h0e(2) = aimag(z_log(-x/mu2_scale_par,-1._ki)/x)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ h0e = 0._ki
+ !
+ end if
+ !
+ end function h0e
+ !
+ !****f* src/integrals/three_point/func_h0/h0f
+ ! NAME
+ !
+ ! Function h0f
+ !
+ ! USAGE
+ !
+ ! real_dim2 = h0f(x)
+ !
+ ! DESCRIPTION
+ !
+ ! Compute the function 1/2 ln(-x)^2/x
+ !
+ ! INPUTS
+ !
+ ! * x -- a real (type ki)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variable rat_or_tot_par
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function h0f(x)
+ !
+ real(ki), intent(in) :: x
+ real(ki), dimension(2) :: h0f
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ h0f(1) = real(1._ki/2._ki*z_log2(-x/mu2_scale_par,-1._ki)/x,ki)
+ h0f(2) = aimag(1._ki/2._ki*z_log2(-x/mu2_scale_par,-1._ki)/x)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ h0f = 0._ki
+ !
+ end if
+ !
+ end function h0f
+ !
+end module func_h0
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.am (revision 119)
@@ -0,0 +1,24 @@
+noinst_LTLIBRARIES=libgolem95_integrals_three_point.la
+
+AM_FCFLAGS= \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical \
+ -I$(top_builddir)/src/integrals/one_point \
+ -I$(top_builddir)/src/integrals/two_point
+
+libgolem95_integrals_three_point_la_SOURCES= \
+ mod_gn.f90 mod_h0.f90 mod_he.f90 mod_hf.f90 \
+ function_3p0m_1mi.f90 function_3p1m_1mi.f90 function_3p1m_2mi.f90 \
+ function_3p1m.f90 function_3p2m_1mi.f90 function_3p2m.f90 \
+ function_3p3m.f90 cas_merdique.f90 function_3p_finite.f90 \
+ generic_function_3p.f90
+libgolem95_integrals_three_point_la_FCFLAGS=$(AM_FCFLAGS)
+nodist_pkginclude_HEADERS= function_3p3m.mod generic_function_3p.mod \
+ function_3p1m_2mi.mod func_h0.mod func_he.mod \
+ function_3p2m_1mi.mod func_hf.mod function_3p_finite.mod \
+ func_gn.mod function_3p0m_1mi.mod function_3p1m_1mi.mod \
+ function_3p2m.mod function_3p1m.mod cas_merdique.mod
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/generic_function_3p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/generic_function_3p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/generic_function_3p.f90 (revision 119)
@@ -0,0 +1,1463 @@
+!****h* src/integrals/three_point/generic_function_3p
+! NAME
+!
+! Module generic_function_3p
+!
+! USAGE
+!
+! use generic_function_3p
+!
+! DESCRIPTION
+!
+! This module contains the generic routines to compute the
+! three point functions in n and n+2 dimensions
+!
+! OUTPUT
+!
+! It exports two public routines:
+! * f3p(_sc) -- a function to compute the three point function in n dimensions
+! * f3p_np2(_sc) -- a function to compute the three point function in n+2 dimensions
+! Calling the functions with _sc returns a real array. These calls will not be cached.
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * matrice_s (src/kinematic/matrice_s.f90) ( only : dim_s, b_ref )
+! * s_matrix_type (src/module/s_matrix_type.f90)
+! * array (src/module/array.f90)
+! * tri_croissant (src/module/tri.f90)
+! * constante (src/module/constante.f90)
+! * function_3p1m (src/integrals/three_point/function_3p1m.f90)
+! * function_3p2m (src/integrals/three_point/function_3p2m.f90)
+! * function_3p3m (src/integrals/three_point/function_3p3m.f90)
+! * cache (src/module/cache.f90)
+! * equal (src/module/equal.f90)
+!
+!*****
+module generic_function_3p
+ !
+ use precision_golem
+ use matrice_s, only : dim_s,b_ref
+ use s_matrix_type
+ use array
+ use tri_croissant
+ use constante
+ use function_3p0m_1mi
+ use function_3p1m
+ use function_3p1m_1mi
+ use function_3p1m_2mi
+ use function_3p2m
+ use function_3p2m_1mi
+ use function_3p3m
+ use parametre
+ use function_3p_finite
+ use cache
+ use equal
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ implicit none
+ !
+ private
+ !
+ integer, dimension(:), allocatable :: set
+ integer, dimension(3) :: set_tot
+ !
+ interface f3p_sc
+ module procedure f3p_sc_r, f3p_sc_c
+ module procedure f3p_sc_p
+ end interface
+ !
+ interface f3p_np2_sc
+ module procedure f3p_np2_sc_r, f3p_np2_sc_c
+ module procedure f3p_np2_sc_p
+ end interface
+ !
+ public :: f3p, f3p_np2
+! public :: f3p_ra, f3p_np2_ra !!! return real arrays. not needed in current implementation
+ public :: f3p_sc, f3p_np2_sc !!! (non-cached) return real arrays.
+ !can be called with real/complex arrays in addition.
+ !
+contains
+ !
+ !****f* src/integrals/three_point/generic_function_3p/f3p
+ ! NAME
+ !
+ ! Function f3p
+ !
+ ! USAGE
+ !
+ ! complex_dim3 = f3p(s_mat_p, b_pro, parf1, parf2, parf3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic three point function in n dimensions,
+ ! with or without Feynman parameters in the numerator.
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a type s_matrix_poly object, the S matrix
+ ! * b_pro -- an integer whose digits represents the set of the three unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 3
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function f3p(s_mat_p, b_pro,parf1,parf2,parf3)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2,parf3
+ complex(ki), dimension(3) :: f3p
+ real(ki), dimension(6) :: f3p_real
+ !
+ f3p_real = f3p_ra(s_mat_p,b_pro,parf1=parf1,parf2=parf2,parf3=parf3)
+ f3p(1) = f3p_real(1) + i_ * f3p_real(2)
+ f3p(2) = f3p_real(3) + i_ * f3p_real(4)
+ f3p(3) = f3p_real(5) + i_ * f3p_real(6)
+ !
+ end function f3p
+ !
+ function f3p_ra(s_mat_p,b_pro,parf1,parf2,parf3)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(6) :: f3p_ra
+ !
+ integer :: par1,par2,par3
+ integer :: par_cache1,par_cache2,par_cache3
+ integer, dimension(3) :: z_param_ini,z_param_out
+ integer :: taille
+ integer :: b_pin
+ integer, dimension(3) :: s
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ if (present(parf3)) par3 = parf3
+ !
+ z_param_ini = (/ par1,par2,par3 /)
+ !
+ where (z_param_ini /= 0)
+ !
+ z_param_ini = locateb(z_param_ini,b_pro)
+ !
+ elsewhere
+ !
+ z_param_ini = 0
+ !
+ end where
+ !
+ if ( minval(z_param_ini) == -1 ) then
+ !
+ f3p_ra = 0.0_ki
+ !
+ else
+ !
+ s = unpackb(b_pro,countb(b_pro))
+ taille = dim_s - size(s)
+ !
+ select case(taille)
+ !
+ case(0)
+ !
+ set_tot = 0
+ !
+ case(1)
+ !
+ allocate(set(1:taille))
+ b_pin = pminus(b_ref,b_pro)
+ set = unpackb(b_pin,countb(b_pin))
+ set_tot(1:2) = 0
+ set_tot(3) = set(1)
+ !
+ case(2)
+ !
+ allocate(set(1:taille))
+ b_pin = pminus(b_ref,b_pro)
+ set = unpackb(b_pin,countb(b_pin))
+ set_tot(1) = 0
+ set_tot(2:3) = set
+ !
+ case(3)
+ !
+ allocate(set(1:taille))
+ b_pin = pminus(b_ref,b_pro)
+ set = unpackb(b_pin,countb(b_pin))
+ set_tot = set
+ !
+ case default
+ !
+ set_tot = 0
+ taille = 0
+ !
+ end select
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ par_cache1 = z_param_out(1)
+ par_cache2 = z_param_out(2)
+ par_cache3 = z_param_out(3)
+ !
+ cache : if ( computed_f3p(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3) ) then
+ !
+ f3p_ra = results_f3p(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3,:)
+ !
+ else cache
+ !
+ f3p_ra = f3p_sc(s_mat_p,s,par_cache1,par_cache2,par_cache3)
+ !
+ computed_f3p(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3) = .true.
+ results_f3p(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3,:) = f3p_ra
+ !
+ end if cache
+ !
+ if (taille /= 0) deallocate(set)
+ !
+ end if
+ !
+ end function f3p_ra
+ !
+ !****f* src/integrals/three_point/generic_function_3p/f3p_sc
+ ! NAME
+ !
+ ! Function f3p_sc
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p_sc(s_mat,s,parf1,parf2,parf3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic three point function in n dimensions,
+ ! with or without Feynman parameters in the numerator without using a cache
+ !
+ ! INPUTS
+ !
+ ! * s_mat -- a real/complex (type ki)/s_matrix_poly array of rank 2, the S matrix
+ ! * s -- an integer array of rank 1 and shape 3, the set of the three unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 6
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+
+ function f3p_sc_p(s_mat_p,s,parf1,parf2,parf3)
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in), dimension(3) :: s
+ integer, intent(in), optional :: parf1, parf2, parf3
+ real(ki), dimension(6) :: f3p_sc_p
+ !
+ if (iand(s_mat_p%b_cmplx, packb(s)) .eq. 0 ) then
+ !
+ f3p_sc_p = f3p_sc_r(s_mat_p%pt_real, s, parf1=parf1,parf2=parf2,parf3=parf3)
+ !
+ else
+ !
+ f3p_sc_p = f3p_sc_c(s_mat_p%pt_cmplx, s, parf1=parf1,parf2=parf2,parf3=parf3)
+ !
+ end if
+ !
+ end function f3p_sc_p
+ !
+ function f3p_sc_r(s_mat_r,s,parf1,parf2,parf3)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in), dimension(3) :: s
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(6) :: f3p_sc_r
+ !
+ integer :: par1,par2,par3
+ integer, dimension(3) :: z_param_ini,z_param_out
+ real(ki) :: arg1,arg2,arg3,s1,s2,s3
+ real(ki) :: mass1,mass2,mass3
+ integer :: m1,m2,m3
+ logical, dimension(3) :: argz, mz,sz
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ if (present(parf3)) par3 = parf3
+ !
+ if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) ) then
+ !
+ f3p_sc_r(:) = 0._ki
+ !
+ else
+ ! symetrie: la place de z1,z2,z3 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ z_param_ini(1) = par1
+ z_param_ini(2) = par2
+ z_param_ini(3) = par3
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ !
+ arg1 = s_mat_r(m1,m2)
+ arg2 = s_mat_r(m2,m3)
+ arg3 = s_mat_r(m1,m3)
+ !
+ argz(1) = equal_real(arg1,zero)
+ argz(2) = equal_real(arg2,zero)
+ argz(3) = equal_real(arg3,zero)
+ !
+ ! internal masses
+ mass1 = -s_mat_r(m1,m1)/2._ki
+ mass2 = -s_mat_r(m2,m2)/2._ki
+ mass3 = -s_mat_r(m3,m3)/2._ki
+ !
+ mz(1) = equal_real(mass1,zero)
+ mz(2) = equal_real(mass2,zero)
+ mz(3) = equal_real(mass3,zero)
+ !
+ ! external p_i^2
+ s1=arg3+mass1+mass3
+ s2=arg1+mass1+mass2
+ s3=arg2+mass2+mass3
+ !
+ sz(1) = equal_real(s1,zero)
+ sz(2) = equal_real(s2,zero)
+ sz(3) = equal_real(s3,zero)
+ !
+ call cut_s(s1,mass1,mass3)
+ call cut_s(s2,mass1,mass2)
+ call cut_s(s3,mass2,mass3)
+ !
+ ! initialize all components
+ f3p_sc_r(:) = 0._ki
+ !
+ ! the integrals are classified by the off-shellness of the external legs
+ !
+ !~ case with one light-like, two massive on-shell legs: QL tri5
+ !
+ if ( ( argz(1) ) .and. ( argz(2) ) .and. ( argz(3) ) ) then
+ !
+ ! comment 11.08.10: single out call with s_matrix being zero:
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function generic_function_3p.f90:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'function call with all arguments zero!'
+ call catch_exception(1)
+ !
+ !
+ ! case with one internal mass, two on-shell massive legs
+ !~ QL tri5, two on-shell massive legs
+ !
+ else if ( ( .not.( mz(3) ) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ f3p_sc_r = f3p0m_1mi(mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( .not.( mz(1) ) ) .and. ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ f3p_sc_r = f3p0m_1mi(mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( .not.( mz(2) ) ) .and. ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ f3p_sc_r = f3p0m_1mi(mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! comment 11.08.10: only one internal mass possible kinematically!
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function generic_function_3p.f90:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'function call with one lightlike, two massive external legs &
+ & and more than one internal mass!'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'This should not be allowed kinematically!'
+ call catch_exception(1)
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end scan internal mass
+ !
+ !
+ ! cases with one off-shell leg (one argi nonzero):
+ !~ QL tri1,tri4,tri6
+ !
+ else if ( ( argz(1) ) .and. ( argz(2) ) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ !~ QL tri1
+ f3p_sc_r = f3p1m(arg3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ !~ case with one internal mass: QL tri4
+ !
+ else if ( ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_sc_r = f3p1m_1mi(arg3,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ call exchange_param(z_param_ini,(/1,3/),3,z_param_out)
+ !
+ f3p_sc_r = f3p1m_1mi(arg3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ ! no, this one is finite, corrected June 3, 2010
+ f3p_sc_r(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ !~ case with two internal masses: QL tri6
+ !
+ else if ( mz(2) ) then
+ !
+ f3p_sc_r = f3p1m_2mi(arg3,mass1,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ ! cyclic permutation of arguments
+ !
+ else if ( (argz(2)) .and. (argz(3)) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_sc_r = f3p1m(arg1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ f3p_sc_r = f3p1m_1mi(arg1,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(3) ) .and. ( mz(1) ) ) then
+ !
+ ! labels (/1,2/) -> (/2,3/) corrected 19.7.
+ call exchange_param(z_param_ini,(/2,3/),3,z_param_out)
+ !
+ f3p_sc_r = f3p1m_1mi(arg1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(1) ) ) then
+ !
+ ! finite
+ f3p_sc_r(3:6)=f3p_finite("ndi",s2,s3,s1,mass2,mass3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with two internal masses
+ !
+ else if ( mz(3) ) then
+ !
+ ! mass labels corrected 19.7.10
+ f3p_sc_r = f3p1m_2mi(arg1,mass2,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s2,s3,s1,mass2,mass3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ else if ( (argz(1)) .and. (argz(3)) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_sc_r = f3p1m(arg2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ f3p_sc_r = f3p1m_1mi(arg2,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(1) ) ) then
+ !
+ call exchange_param(z_param_ini,(/1,2/),3,z_param_out)
+ !
+ f3p_sc_r = f3p1m_1mi(arg2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ f3p_sc_r(3:6) = f3p_finite("ndi",s3,s1,s2,mass3,mass1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with two internal masses
+ !
+ else if ( mz(1) ) then
+ !
+ ! mass labels corrected 19.7.10
+ f3p_sc_r = f3p1m_2mi(arg2,mass3,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s3,s1,s2,mass3,mass1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ ! cases with two off-shell legs: QL tri2,tri3
+ !
+ else if ( (argz(1)) .and. (.not.(argz(2))) .and. (.not.(argz(3))) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ !~ QL tri2
+ f3p_sc_r = f3p2m(arg2,arg3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass: QL tri3
+ !
+ else if ( ( mz(1) ) .and. ( mz(2) ) .and. &
+ ! corrected 3.6.10
+ & (.not. equal_real(mass3,s1) ) .and. (.not. equal_real(mass3,s3) ) ) then
+ !
+ f3p_sc_r = f3p2m_1mi(arg2,arg3,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ ! permute arguments
+ else if ( (argz(2)) .and. (.not.(argz(1))) .and. (.not.(argz(3))) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_sc_r = f3p2m(arg3,arg1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass: QL tri3
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) .and. &
+ ! corrected 3.6.10
+ & (.not. equal_real(mass1,s2) ) .and. (.not. equal_real(mass1,s1) ) ) then
+ !
+ f3p_sc_r = f3p2m_1mi(arg3,arg1,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s2,s3,s1,mass2,mass3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ else if ( (argz(3)) .and. (.not.(argz(1))) .and. (.not.(argz(2))) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_sc_r = f3p2m(arg1,arg2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass: QL tri3
+ !
+ else if ( ( mz(1) ) .and. ( mz(3) ) .and. &
+ & (.not. equal_real(mass2,s3) ) .and. (.not. equal_real(mass2,s2) ) ) then
+ !
+ f3p_sc_r = f3p2m_1mi(arg1,arg2,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ ! finite triangle
+ f3p_sc_r(3:6)=f3p_finite("ndi",s3,s1,s2,mass3,mass1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ else if ( .not.(argz(3)) .and. (.not.(argz(1))) .and. (.not.(argz(2))) ) then
+ ! finite
+ !
+ if ( ( mz(1) ) .and. ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ if ( (abs(arg3) >= abs(arg1)) .and. (abs(arg3) >= abs(arg2)) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ f3p_sc_r(3:6) = f3p3m("ndi",arg3,arg1,arg2, &
+ z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( (abs(arg1) >= abs(arg3)) .and. (abs(arg1) >= abs(arg2)) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ f3p_sc_r(3:6) = f3p3m("ndi",arg1,arg2,arg3, &
+ z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( (abs(arg2) >= abs(arg3)) .and. (abs(arg2) >= abs(arg1)) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ f3p_sc_r(3:6) = f3p3m("ndi",arg2,arg3,arg1, &
+ z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end if scan abs(argi)
+ !
+ else ! internal masses present
+ !
+ ! finite triangle with internal masses
+ call tri_int3(z_param_ini,z_param_out)
+ f3p_sc_r(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end if 3-off-shell legs triangle
+ !
+ else ! other values of arg should not occur
+ !
+ ! finite triangle with internal masses
+ f3p_sc_r(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end if arg1, arg2,arg3 nonzero
+ !
+ end if ! end if par1==-1 ...
+ !
+ end function f3p_sc_r
+ !
+ function f3p_sc_c(s_mat_c,s,parf1,parf2,parf3)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in), dimension(3) :: s
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(6) :: f3p_sc_c
+ !
+ integer :: par1,par2,par3
+ integer, dimension(3) :: z_param_ini,z_param_out
+ complex(ki) :: arg1,arg2,arg3
+ real(ki) ::s1,s2,s3
+ complex(ki) :: mass1,mass2,mass3
+ integer :: m1,m2,m3
+ logical, dimension(3) :: argz, mz
+ logical :: finite = .true.
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ if (present(parf3)) par3 = parf3
+ !
+ !
+ if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) ) then
+ !
+ f3p_sc_c(:) = 0._ki
+ !
+ else
+ ! symetrie: la place de z1,z2,z3 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ z_param_ini(1) = par1
+ z_param_ini(2) = par2
+ z_param_ini(3) = par3
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ !
+ arg1 = s_mat_c(m1,m2)
+ arg2 = s_mat_c(m2,m3)
+ arg3 = s_mat_c(m1,m3)
+ !
+ argz(1) = equal_real(real(arg1,ki),zero) .and. equal_real(aimag(arg1),zero)
+ argz(2) = equal_real(real(arg2,ki),zero) .and. equal_real(aimag(arg2),zero)
+ argz(3) = equal_real(real(arg3,ki),zero) .and. equal_real(aimag(arg3),zero)
+ !
+ ! internal masses
+ mass1 = -s_mat_c(m1,m1)/2._ki
+ mass2 = -s_mat_c(m2,m2)/2._ki
+ mass3 = -s_mat_c(m3,m3)/2._ki
+ !
+ mz(1) = equal_real(real(mass1,ki),zero) .and. equal_real(aimag(mass1),zero)
+ mz(2) = equal_real(real(mass2,ki),zero) .and. equal_real(aimag(mass2),zero)
+ mz(3) = equal_real(real(mass3,ki),zero) .and. equal_real(aimag(mass3),zero)
+ !
+ ! external p_i^2
+ s1 = real(arg3+mass1+mass3,ki)
+ s2 = real(arg1+mass1+mass2,ki)
+ s3 = real(arg2+mass2+mass3,ki)
+ !
+ call cut_s(s1,mass1,mass3)
+ call cut_s(s2,mass1,mass2)
+ call cut_s(s3,mass2,mass3)
+ !
+ ! initialize all components
+ !
+ f3p_sc_c(:) = 0._ki
+ !
+ ! the integrals are classified by the off-shellness of the external legs
+ !
+ ! In complex case, there is only one divergent triangle, QL tri3
+ !
+ finite = .true.
+ !
+ if ( (argz(1)) .and. (.not.(argz(2))) .and. (.not.(argz(3))) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ if ( ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_sc_c = f3p2m_1mi(arg2,arg3,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ finite = .false.
+ !
+ end if
+ !
+ ! permute arguments
+ else if ( (argz(2)) .and. (.not.(argz(1))) .and. (.not.(argz(3))) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ f3p_sc_c = f3p2m_1mi(arg3,arg1,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ finite = .false.
+ !
+ end if
+ !
+ else if ( (argz(3)) .and. (.not.(argz(1))) .and. (.not.(argz(2))) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ ! .and. (.not. equal_real(s2,zero) )
+ !
+ f3p_sc_c = f3p2m_1mi(arg1,arg2,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ finite = .false.
+ !
+ end if
+ !
+ end if !argz
+ !
+ if (finite) then !finite triangle
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ f3p_sc_c(3:6)=f3p_finite("ndi",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end if call finite
+ !
+ end if ! end if par1==-1 ...
+ !
+ end function f3p_sc_c
+ !
+ !****f* src/integrals/three_point/generic_function_3p/f3p_np2
+ ! NAME
+ !
+ ! Function f3p_np2
+ !
+ ! USAGE
+ !
+ ! complex_dim2 = f3p_np2_ca(s_mat,b_pro,parf1,parf2,parf3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic three point function in n+2 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat -- a s_matrix_poly type object, the S matrix
+ ! * b_pro -- an integer whose digits represents the set of the three unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function f3p_np2(s_mat_p, b_pro,parf1,parf2,parf3)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2,parf3
+ complex(ki), dimension(2) :: f3p_np2
+ real(ki), dimension(4) :: f3p_np2_real
+ !
+ f3p_np2_real = f3p_np2_ra(s_mat_p,b_pro,parf1=parf1,parf2=parf2,parf3=parf3)
+ !
+ f3p_np2(1) = f3p_np2_real(1) + i_ * f3p_np2_real(2)
+ f3p_np2(2) = f3p_np2_real(3) + i_ * f3p_np2_real(4)
+ !
+ end function f3p_np2
+ !
+ function f3p_np2_ra(s_mat_p,b_pro,parf1,parf2,parf3)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(4) :: f3p_np2_ra
+ !
+ integer :: par1,par2,par3
+ integer :: par_cache1,par_cache2,par_cache3
+ integer, dimension(3) :: z_param_ini,z_param_out
+ integer :: taille
+ integer :: b_pin
+ integer, dimension(3) :: s
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ if (present(parf3)) par3 = parf3
+ !
+ !
+ z_param_ini = (/ par1,par2,par3 /)
+ !
+ where (z_param_ini /= 0)
+ !
+ z_param_ini = locateb(z_param_ini,b_pro)
+ !
+ elsewhere
+ !
+ z_param_ini = 0
+ !
+ end where
+ !
+ if ( minval(z_param_ini) == -1 ) then
+ !
+ f3p_np2_ra = 0._ki
+ !
+ else
+ !
+ s = unpackb(b_pro,countb(b_pro))
+ taille = dim_s - size(s)
+ !
+ select case(taille)
+ !
+ case(0)
+ !
+ set_tot = 0
+ !
+ case(1)
+ !
+ allocate(set(1:taille))
+ b_pin = pminus(b_ref,b_pro)
+ set = unpackb(b_pin,countb(b_pin))
+ set_tot(1:2) = 0
+ set_tot(3) = set(1)
+ !
+ case(2)
+ !
+ allocate(set(1:taille))
+ b_pin = pminus(b_ref,b_pro)
+ set = unpackb(b_pin,countb(b_pin))
+ set_tot(1) = 0
+ set_tot(2:3) = set
+ !
+ case(3)
+ !
+ allocate(set(1:taille))
+ b_pin = pminus(b_ref,b_pro)
+ set = unpackb(b_pin,countb(b_pin))
+ set_tot = set
+ !
+ case default
+ !
+ set_tot = 0
+ taille = 0
+ !
+ !
+ end select
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ par_cache1 = z_param_out(1)
+ par_cache2 = z_param_out(2)
+ par_cache3 = z_param_out(3)
+ !
+ cache : if ( computed_f3p_np2(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3) ) then
+ !
+ f3p_np2_ra = results_f3p_np2(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3,:)
+ !
+ else cache
+ !
+ f3p_np2_ra = f3p_np2_sc(s_mat_p,s,par_cache1,par_cache2,par_cache3)
+ !
+ computed_f3p_np2(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3) = .true.
+ results_f3p_np2(set_tot(1),set_tot(2),set_tot(3),&
+ &par_cache1,par_cache2,par_cache3,:) = f3p_np2_ra
+ !
+ end if cache
+ !
+ if (taille /= 0) deallocate(set)
+ !
+ end if
+ !
+ end function f3p_np2_ra
+ !
+ !****f* src/integrals/three_point/generic_function_3p/f3p_np2_sc
+ ! NAME
+ !
+ ! Function f3p_np2_sc
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p_np2_sc(s_mat,s,parf1,parf2,parf3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic three point function in n+2 dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat -- a real/complex (type ki)/s_matrix_poly array of rank 2, the S matrix
+ ! * s -- an integer array of rank 1 and shape 3, the set of the three unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ ! * parf3 -- an integer (optional), the label of the third Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 4
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f3p_np2_sc_p(s_mat_p,s,parf1,parf2,parf3)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent (in), dimension(3) :: s
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(4) :: f3p_np2_sc_p
+ !
+ if (iand(s_mat_p%b_cmplx, packb(s)) .eq. 0 ) then
+ !
+ f3p_np2_sc_p = f3p_np2_sc_r(s_mat_p%pt_real, s, parf1=parf1,parf2=parf2,parf3=parf3)
+ !
+ else
+ !
+ f3p_np2_sc_p = f3p_np2_sc_c(s_mat_p%pt_cmplx, s, parf1=parf1,parf2=parf2,parf3=parf3)
+ !
+ end if
+ !
+ end function f3p_np2_sc_p
+ !
+ function f3p_np2_sc_r(s_mat_r,s,parf1,parf2,parf3)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in), dimension(3) :: s
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(4) :: f3p_np2_sc_r
+ !
+ integer :: par1,par2,par3
+ integer, dimension(3) :: z_param_ini,z_param_out
+ real(ki) :: arg1,arg2,arg3
+ real(ki) :: mass1,mass2,mass3,s1,s2,s3
+ integer :: m1,m2,m3
+ logical, dimension(3) :: argz,mz
+ !
+! calls_f3p_np2_sc = calls_f3p_np2_sc + 1
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ if (present(parf3)) par3 = parf3
+ !
+ !
+ if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) ) then
+ !
+ f3p_np2_sc_r(:) = 0._ki
+ !
+ else
+ ! symetrie: la place de z1,z2,z3 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ z_param_ini(1) = par1
+ z_param_ini(2) = par2
+ z_param_ini(3) = par3
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ !
+ !
+ arg1 = s_mat_r(m1,m2)
+ arg2 = s_mat_r(m2,m3)
+ arg3 = s_mat_r(m1,m3)
+ !
+ argz(1) = equal_real(arg1,zero)
+ argz(2) = equal_real(arg2,zero)
+ argz(3) = equal_real(arg3,zero)
+ !
+ ! internal masses
+ mass1 = -s_mat_r(m1,m1)/2._ki
+ mass2 = -s_mat_r(m2,m2)/2._ki
+ mass3 = -s_mat_r(m3,m3)/2._ki
+ !
+ mz(1) = equal_real(mass1,zero)
+ mz(2) = equal_real(mass2,zero)
+ mz(3) = equal_real(mass3,zero)
+ !
+ !
+ s1=arg3+mass1+mass3
+ s2=arg1+mass1+mass2
+ s3=arg2+mass2+mass3
+ !
+ call cut_s(s1,mass1,mass3)
+ call cut_s(s2,mass1,mass2)
+ call cut_s(s3,mass2,mass3)
+ !
+ ! the integrals are classified by the off-shellness of the external legs
+ !
+ ! case with all external legs on shell
+ !
+ ! initialize all components
+ f3p_np2_sc_r(:) = 0._ki
+ !
+ !
+ if ( ( argz(1) ) .and. ( argz(2) ) .and. ( argz(3) ) ) then
+ !
+ ! zero internal mass
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function generic_function_3p.f90:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'function call with all arguments zero!'
+ call catch_exception(1)
+ !
+ ! case with one internal mass
+ !
+ else if ( ( .not.( mz(3) ) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ f3p_np2_sc_r = f3p0m_1mi_np2(mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( .not.( mz(1) ) ) .and. ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ f3p_np2_sc_r = f3p0m_1mi_np2(mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( .not.( mz(2) ) ) .and. ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ f3p_np2_sc_r = f3p0m_1mi_np2(mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ !
+ ! comment 11.08.10: only one internal mass possible kinematically!
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function generic_function_3p.f90:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'function call with one lightlike, two massive external legs &
+ & and more than one internal mass!'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'This should not be allowed kinematically!'
+ call catch_exception(1)
+ !
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ f3p_np2_sc_r=f3p_finite("n+2",s1,s2,s3,mass1,mass2,mass3, &
+ & z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ ! case with one external leg off shell
+ !
+ else if ( ( argz(1) ) .and. ( argz(2) ) ) then
+ !
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p1m_np2(arg3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p1m_1mi_np2(arg3,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ call exchange_param(z_param_ini,(/1,3/),3,z_param_out)
+ !
+ f3p_np2_sc_r = f3p1m_1mi_np2(arg3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ ! comment 11.08.10: this triangle is 'finite' (in 4dim).
+ f3p_np2_sc_r = f3p_finite("n+2",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with two internal masses
+ !
+ else if ( mz(2) ) then
+ !
+ f3p_np2_sc_r = f3p1m_2mi_np2(arg3,mass1,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ f3p_np2_sc_r=f3p_finite("n+2",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ else if ( (argz(2)) .and. (argz(3)) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p1m_np2(arg1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ f3p_np2_sc_r = f3p1m_1mi_np2(arg1,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(3) ) .and. ( mz(1) ) ) then
+ !
+ ! changed 11.08.10: (/1,2/) -> (/2,3/)
+ !
+ call exchange_param(z_param_ini,(/2,3/),3,z_param_out)
+ !
+ f3p_np2_sc_r = f3p1m_1mi_np2(arg1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(1) ) ) then
+ !
+ ! comment 11.08.10: this triangle is 'finite' (in 4dim)
+ f3p_np2_sc_r=f3p_finite("n+2",s2,s3,s1,mass2,mass3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with two internal masses
+ !
+ else if ( mz(3) ) then
+ ! comment 11.08.10: masses swapped!
+ f3p_np2_sc_r = f3p1m_2mi_np2(arg1,mass2,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ f3p_np2_sc_r=f3p_finite("n+2",s2,s3,s1,mass2,mass3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ else if ( (argz(1)) .and. (argz(3)) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p1m_np2(arg2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal masse
+ !
+ else if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ f3p_np2_sc_r = f3p1m_1mi_np2(arg2,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(1) ) ) then
+ !
+ call exchange_param(z_param_ini,(/1,2/),3,z_param_out)
+ !
+ f3p_np2_sc_r = f3p1m_1mi_np2(arg2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ ! comment 11.08.10: this triangle is 'finite' (in 4dim)
+ f3p_np2_sc_r=f3p_finite("n+2",s3,s1,s2,mass3,mass1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with two internal masses
+ !
+ else if ( mz(1) ) then
+ !
+ ! comment 11.08.10: masses swapped!
+ f3p_np2_sc_r = f3p1m_2mi_np2(arg2,mass3,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ f3p_np2_sc_r=f3p_finite("n+2",s3,s1,s2,mass3,mass1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ ! case with two external legs off shell
+ !
+ else if ( (argz(1)) .and. (.not.(argz(2))) .and. (.not.(argz(3))) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p2m_np2(arg2,arg3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p2m_1mi_np2(arg2,arg3,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ f3p_np2_sc_r=f3p_finite("n+2",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ else if ( (argz(2)) .and. (.not.(argz(1))) .and. (.not.(argz(3))) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p2m_np2(arg3,arg1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ f3p_np2_sc_r = f3p2m_1mi_np2(arg3,arg1,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ f3p_np2_sc_r=f3p_finite("n+2",s2,s3,s1,mass2,mass3,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ else if ( (argz(3)) .and. (.not.(argz(1))) .and. (.not.(argz(2))) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ if ( ( mz(3) ) .and. ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_r = f3p2m_np2(arg1,arg2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ ! case with one internal mass
+ !
+ else if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ f3p_np2_sc_r = f3p2m_1mi_np2(arg1,arg2,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else
+ f3p_np2_sc_r=f3p_finite("n+2",s3,s1,s2,mass3,mass1,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ !
+ else if ( .not.(argz(1)) .and. (.not.(argz(2))) .and. (.not.(argz(3))) ) then
+ !
+ if ( ( mz(1) ) .and. ( mz(2) ) .and. ( mz(3) ) ) then
+
+ if ( (abs(arg3) >= abs(arg1)) .and. (abs(arg3) >= abs(arg2)) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ f3p_np2_sc_r = f3p3m("n+2",arg3,arg1,arg2, &
+ z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( (abs(arg1) >= abs(arg3)) .and. (abs(arg1) >= abs(arg2)) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ f3p_np2_sc_r = f3p3m("n+2",arg1,arg2,arg3, &
+ z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ else if ( (abs(arg2) >= abs(arg3)) .and. (abs(arg2) >= abs(arg1)) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ f3p_np2_sc_r = f3p3m("n+2",arg2,arg3,arg1, &
+ z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if
+ !
+ else
+ call tri_int3(z_param_ini,z_param_out)
+ f3p_np2_sc_r=f3p_finite("n+2",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end scan internal masses
+ !
+ end if ! end scan argi
+ !
+ end if ! end if par1=-1...
+ !
+ end function f3p_np2_sc_r
+ !
+ function f3p_np2_sc_c(s_mat_c,s,parf1,parf2,parf3)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in), dimension(3) :: s
+ integer, intent (in), optional :: parf1,parf2,parf3
+ real(ki),dimension(4) :: f3p_np2_sc_c
+ !
+ integer :: par1,par2,par3
+ integer, dimension(3) :: z_param_ini,z_param_out
+ complex(ki) :: arg1,arg2,arg3
+ complex(ki) :: mass1, mass2, mass3
+ real(ki) :: s1,s2,s3
+ integer :: m1,m2,m3
+ logical, dimension(3) :: argz,mz
+ logical :: finite = .true.
+ !
+ !
+ par1 = 0
+ par2 = 0
+ par3 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ if (present(parf3)) par3 = parf3
+ !
+ !
+ if ( (par1 == -1) .or. (par2 == -1) .or. (par3 == -1) ) then
+ !
+ f3p_np2_sc_c(:) = 0._ki
+ !
+ else
+ ! symetrie: la place de z1,z2,z3 n'a pas d'importance, on les met
+ ! dans l'ordre croissant
+ z_param_ini(1) = par1
+ z_param_ini(2) = par2
+ z_param_ini(3) = par3
+ !
+ m1 = s(1)
+ m2 = s(2)
+ m3 = s(3)
+ !
+ !
+ arg1 = s_mat_c(m1,m2)
+ arg2 = s_mat_c(m2,m3)
+ arg3 = s_mat_c(m1,m3)
+ !
+ argz(1) = equal_real(real(arg1,ki),zero) .and. equal_real(aimag(arg1),zero)
+ argz(2) = equal_real(real(arg2,ki),zero) .and. equal_real(aimag(arg2),zero)
+ argz(3) = equal_real(real(arg3,ki),zero) .and. equal_real(aimag(arg3),zero)
+ !
+ ! internal masses
+ mass1 = -s_mat_c(m1,m1)/2._ki
+ mass2 = -s_mat_c(m2,m2)/2._ki
+ mass3 = -s_mat_c(m3,m3)/2._ki
+ !
+ mz(1) = equal_real(real(mass1,ki),zero) .and. equal_real(aimag(mass1),zero)
+ mz(2) = equal_real(real(mass2,ki),zero) .and. equal_real(aimag(mass2),zero)
+ mz(3) = equal_real(real(mass3,ki),zero) .and. equal_real(aimag(mass3),zero)
+ !
+ ! external p_i^2
+ s1 = real(arg3+mass1+mass3,ki)
+ s2 = real(arg1+mass1+mass2,ki)
+ s3 = real(arg2+mass2+mass3,ki)
+ !
+ call cut_s(s1,mass1,mass3)
+ call cut_s(s2,mass1,mass2)
+ call cut_s(s3,mass2,mass3)
+ !
+ ! initialize all components
+ f3p_np2_sc_c(:) = 0._ki
+ !
+ !
+ finite = .true.
+ ! Similar to 4dim case, there is only one triangle with singular S-matrix.
+ ! case with two external legs off shell
+ !
+ if ( (argz(1)) .and. (.not.(argz(2))) .and. (.not.(argz(3))) ) then
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ !
+ ! case with one internal mass
+ !
+ if ( ( mz(1) ) .and. ( mz(2) ) ) then
+ !
+ f3p_np2_sc_c = f3p2m_1mi_np2(arg2,arg3,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ finite = .false.
+ !
+ end if
+ !
+ else if ( (argz(2)) .and. (.not.(argz(1))) .and. (.not.(argz(3))) ) then
+ !
+ call shift_param(z_param_ini,2,3,z_param_out)
+ !
+ ! case with one internal mass
+ !
+ if ( ( mz(2) ) .and. ( mz(3) ) ) then
+ !
+ f3p_np2_sc_c = f3p2m_1mi_np2(arg3,arg1,mass1,z_param_out(1),z_param_out(2),z_param_out(3))
+ finite = .false.
+ !
+ end if
+ !
+ !
+ else if ( (argz(3)) .and. (.not.(argz(1))) .and. (.not.(argz(2))) ) then
+ !
+ call shift_param(z_param_ini,1,3,z_param_out)
+ !
+ ! case with one internal mass
+ !
+ if ( ( mz(1) ) .and. ( mz(3) ) ) then
+ !
+ f3p_np2_sc_c = f3p2m_1mi_np2(arg1,arg2,mass2,z_param_out(1),z_param_out(2),z_param_out(3))
+ finite = .false.
+ !
+ end if
+ !
+ end if !args
+ !
+ if (finite) then ! call to finite triangle
+ !
+ call tri_int3(z_param_ini,z_param_out)
+ f3p_np2_sc_c=f3p_finite("n+2",s1,s2,s3,mass1,mass2,mass3,z_param_out(1),z_param_out(2),z_param_out(3))
+ !
+ end if ! end finite
+ !
+ end if ! end if par1=-1...
+ !
+ end function f3p_np2_sc_c
+ !
+end module generic_function_3p
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.in (revision 119)
@@ -0,0 +1,624 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/integrals/three_point
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_integrals_three_point_la_LIBADD =
+am_libgolem95_integrals_three_point_la_OBJECTS = \
+ libgolem95_integrals_three_point_la-mod_gn.lo \
+ libgolem95_integrals_three_point_la-mod_h0.lo \
+ libgolem95_integrals_three_point_la-mod_he.lo \
+ libgolem95_integrals_three_point_la-mod_hf.lo \
+ libgolem95_integrals_three_point_la-function_3p0m_1mi.lo \
+ libgolem95_integrals_three_point_la-function_3p1m_1mi.lo \
+ libgolem95_integrals_three_point_la-function_3p1m_2mi.lo \
+ libgolem95_integrals_three_point_la-function_3p1m.lo \
+ libgolem95_integrals_three_point_la-function_3p2m_1mi.lo \
+ libgolem95_integrals_three_point_la-function_3p2m.lo \
+ libgolem95_integrals_three_point_la-function_3p3m.lo \
+ libgolem95_integrals_three_point_la-cas_merdique.lo \
+ libgolem95_integrals_three_point_la-function_3p_finite.lo \
+ libgolem95_integrals_three_point_la-generic_function_3p.lo
+libgolem95_integrals_three_point_la_OBJECTS = \
+ $(am_libgolem95_integrals_three_point_la_OBJECTS)
+libgolem95_integrals_three_point_la_LINK = $(LIBTOOL) --tag=FC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_integrals_three_point_la_SOURCES)
+DIST_SOURCES = $(libgolem95_integrals_three_point_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_integrals_three_point.la
+AM_FCFLAGS = \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical \
+ -I$(top_builddir)/src/integrals/one_point \
+ -I$(top_builddir)/src/integrals/two_point
+
+libgolem95_integrals_three_point_la_SOURCES = \
+ mod_gn.f90 mod_h0.f90 mod_he.f90 mod_hf.f90 \
+ function_3p0m_1mi.f90 function_3p1m_1mi.f90 function_3p1m_2mi.f90 \
+ function_3p1m.f90 function_3p2m_1mi.f90 function_3p2m.f90 \
+ function_3p3m.f90 cas_merdique.f90 function_3p_finite.f90 \
+ generic_function_3p.f90
+
+libgolem95_integrals_three_point_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = function_3p3m.mod generic_function_3p.mod \
+ function_3p1m_2mi.mod func_h0.mod func_he.mod \
+ function_3p2m_1mi.mod func_hf.mod function_3p_finite.mod \
+ func_gn.mod function_3p0m_1mi.mod function_3p1m_1mi.mod \
+ function_3p2m.mod function_3p1m.mod cas_merdique.mod
+
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/integrals/three_point/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/integrals/three_point/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_integrals_three_point.la: $(libgolem95_integrals_three_point_la_OBJECTS) $(libgolem95_integrals_three_point_la_DEPENDENCIES)
+ $(libgolem95_integrals_three_point_la_LINK) $(libgolem95_integrals_three_point_la_OBJECTS) $(libgolem95_integrals_three_point_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_integrals_three_point_la-mod_gn.lo: mod_gn.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-mod_gn.lo $(FCFLAGS_f90) `test -f 'mod_gn.f90' || echo '$(srcdir)/'`mod_gn.f90
+
+libgolem95_integrals_three_point_la-mod_h0.lo: mod_h0.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-mod_h0.lo $(FCFLAGS_f90) `test -f 'mod_h0.f90' || echo '$(srcdir)/'`mod_h0.f90
+
+libgolem95_integrals_three_point_la-mod_he.lo: mod_he.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-mod_he.lo $(FCFLAGS_f90) `test -f 'mod_he.f90' || echo '$(srcdir)/'`mod_he.f90
+
+libgolem95_integrals_three_point_la-mod_hf.lo: mod_hf.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-mod_hf.lo $(FCFLAGS_f90) `test -f 'mod_hf.f90' || echo '$(srcdir)/'`mod_hf.f90
+
+libgolem95_integrals_three_point_la-function_3p0m_1mi.lo: function_3p0m_1mi.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p0m_1mi.lo $(FCFLAGS_f90) `test -f 'function_3p0m_1mi.f90' || echo '$(srcdir)/'`function_3p0m_1mi.f90
+
+libgolem95_integrals_three_point_la-function_3p1m_1mi.lo: function_3p1m_1mi.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p1m_1mi.lo $(FCFLAGS_f90) `test -f 'function_3p1m_1mi.f90' || echo '$(srcdir)/'`function_3p1m_1mi.f90
+
+libgolem95_integrals_three_point_la-function_3p1m_2mi.lo: function_3p1m_2mi.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p1m_2mi.lo $(FCFLAGS_f90) `test -f 'function_3p1m_2mi.f90' || echo '$(srcdir)/'`function_3p1m_2mi.f90
+
+libgolem95_integrals_three_point_la-function_3p1m.lo: function_3p1m.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p1m.lo $(FCFLAGS_f90) `test -f 'function_3p1m.f90' || echo '$(srcdir)/'`function_3p1m.f90
+
+libgolem95_integrals_three_point_la-function_3p2m_1mi.lo: function_3p2m_1mi.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p2m_1mi.lo $(FCFLAGS_f90) `test -f 'function_3p2m_1mi.f90' || echo '$(srcdir)/'`function_3p2m_1mi.f90
+
+libgolem95_integrals_three_point_la-function_3p2m.lo: function_3p2m.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p2m.lo $(FCFLAGS_f90) `test -f 'function_3p2m.f90' || echo '$(srcdir)/'`function_3p2m.f90
+
+libgolem95_integrals_three_point_la-function_3p3m.lo: function_3p3m.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p3m.lo $(FCFLAGS_f90) `test -f 'function_3p3m.f90' || echo '$(srcdir)/'`function_3p3m.f90
+
+libgolem95_integrals_three_point_la-cas_merdique.lo: cas_merdique.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-cas_merdique.lo $(FCFLAGS_f90) `test -f 'cas_merdique.f90' || echo '$(srcdir)/'`cas_merdique.f90
+
+libgolem95_integrals_three_point_la-function_3p_finite.lo: function_3p_finite.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-function_3p_finite.lo $(FCFLAGS_f90) `test -f 'function_3p_finite.f90' || echo '$(srcdir)/'`function_3p_finite.f90
+
+libgolem95_integrals_three_point_la-generic_function_3p.lo: generic_function_3p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_three_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_three_point_la-generic_function_3p.lo $(FCFLAGS_f90) `test -f 'generic_function_3p.f90' || echo '$(srcdir)/'`generic_function_3p.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+function_3p1m.o: mod_h0.o
+function_3p1m.lo: mod_h0.lo
+function_3p1m.obj: mod_h0.obj
+function_3p1m_1mi.o: mod_he.o
+function_3p1m_1mi.lo: mod_he.lo
+function_3p1m_1mi.obj: mod_he.obj
+function_3p1m_2mi.o: mod_gn.o
+function_3p1m_2mi.lo: mod_gn.lo
+function_3p1m_2mi.obj: mod_gn.obj
+function_3p2m.o: mod_h0.o mod_he.o mod_hf.o
+function_3p2m.lo: mod_h0.lo mod_he.lo mod_hf.lo
+function_3p2m.obj: mod_h0.obj mod_he.obj mod_hf.obj
+function_3p2m_1mi.o: mod_he.o mod_hf.o
+function_3p2m_1mi.lo: mod_he.lo mod_hf.lo
+function_3p2m_1mi.obj: mod_he.obj mod_hf.obj
+function_3p_finite.o: cas_merdique.o
+function_3p_finite.lo: cas_merdique.lo
+function_3p_finite.obj: cas_merdique.obj
+generic_function_3p.o: function_3p0m_1mi.o function_3p1m.o function_3p1m_1mi.o \
+ function_3p1m_2mi.o function_3p2m.o function_3p2m_1mi.o \
+ function_3p3m.o function_3p_finite.o
+generic_function_3p.lo: function_3p0m_1mi.lo function_3p1m.lo \
+ function_3p1m_1mi.lo function_3p1m_2mi.lo function_3p2m.lo \
+ function_3p2m_1mi.lo function_3p3m.lo function_3p_finite.lo
+generic_function_3p.obj: function_3p0m_1mi.obj function_3p1m.obj \
+ function_3p1m_1mi.obj function_3p1m_2mi.obj function_3p2m.obj \
+ function_3p2m_1mi.obj function_3p3m.obj function_3p_finite.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m.f90 (revision 119)
@@ -0,0 +1,319 @@
+!
+!****h* src/integral/three_point/function_3p1m
+! NAME
+!
+! Module function_3p1m
+!
+! USAGE
+!
+! use function_3p1m
+!
+! DESCRIPTION
+!
+! This module is used to compute the one off-shell external leg three point function
+! with no internal mass with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * f3p1m -- a function for the computation of the one off-shell external three
+! point function with/without Feynman parameters in n dimensions
+! * f3p1m_np2 -- a function for the computation of the one off-shell external three
+! point function with/without Feynman parameters in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * func_h0 (src/integrals/three_point/mod_h0.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!*****
+module function_3p1m
+ !
+ use precision_golem
+ use logarithme
+ use func_h0
+ use sortie_erreur
+ implicit none
+ !
+ private
+ !
+ public :: f3p1m, f3p1m_np2
+ !
+ contains
+ !
+ !****f* src/integral/three_point/function_3p1m/f3p1m
+ ! NAME
+ !
+ ! Function f3p1m
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p1m(s13,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the one off-shell external three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ ! one mass three point function without Feynman parameters
+ ! f3p1m(s13,0,0,0)
+ ! with one Feynman parameter at the numerator z_1
+ ! f3p1m(s13,0,0,1)
+ ! with three Feynman parameters at the numerator z_2^2 z_3
+ ! f3p1m(s13,2,2,3)
+ !
+ !*****
+ function f3p1m(s13,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s13
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p1m
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p1m(1:2) = h0d(s13)
+ f3p1m(3:4) = h0e(s13)
+ f3p1m(5:6) = h0f(s13)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if ( (par3 == 1) .or. (par3 == 3) ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = h0d(s13)
+ f3p1m(5:6) = h0e(s13)-2._ki*h0d(s13)
+ !
+ else if (par3 == 2) then
+ !
+ f3p1m(1:2) = h0d(s13)
+ f3p1m(3:4) = h0e(s13)-2._ki*h0d(s13)
+ f3p1m(5:6) = h0f(s13)-2._ki*h0e(s13)+4._ki*h0d(s13)
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( par1 == 0 ) then
+ !
+ if ( ((par2 == 1) .and. (par3 == 1)) .or. &
+ ((par2 == 3) .and. (par3 == 3)) &
+ ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = h0d(s13)/2._ki
+ f3p1m(5:6) = h0e(s13)/2._ki-h0d(s13)
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p1m(1:2) = h0d(s13)
+ f3p1m(3:4) = h0e(s13)-3._ki*h0d(s13)
+ f3p1m(5:6) = h0f(s13)-3._ki*h0e(s13)+7._ki*h0d(s13)
+ !
+ else if ( ((par2 == 1) .and. (par3 == 2)) .or. &
+ ((par2 == 2) .and. (par3 == 3)) &
+ ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = h0d(s13)/2._ki
+ f3p1m(5:6) = h0e(s13)/2._ki-3._ki/2._ki*h0d(s13)
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = 0._ki
+ f3p1m(5:6) = h0d(s13)/2._ki
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( ((par1 == 1) .and. (par2 == 1) .and. (par3 == 1)) .or. &
+ ((par1 == 3) .and. (par2 == 3) .and. (par3 == 3)) &
+ ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = h0d(s13)/3._ki
+ f3p1m(5:6) = h0e(s13)/3._ki-13._ki/18._ki*h0d(s13)
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p1m(1:2) = h0d(s13)
+ f3p1m(3:4) = h0e(s13)-11._ki/3._ki*h0d(s13)
+ f3p1m(5:6) = h0f(s13)-11._ki/3._ki*h0e(s13)+85._ki/9._ki*h0d(s13)
+ !
+ else if ( ((par1 == 1) .and. (par2 == 1) .and. (par3 == 2)) .or. &
+ ((par1 == 2) .and. (par2 == 3) .and. (par3 == 3)) &
+ ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = h0d(s13)/6._ki
+ f3p1m(5:6) = h0e(s13)/6._ki-4._ki/9._ki*h0d(s13)
+ !
+ else if ( ((par1 == 1) .and. (par2 == 2) .and. (par3 == 2)) .or. &
+ ((par1 == 2) .and. (par2 == 2) .and. (par3 == 3)) &
+ ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = h0d(s13)/3._ki
+ f3p1m(5:6) = h0e(s13)/3._ki-11._ki/9._ki*h0d(s13)
+ !
+ else if ( ((par1 == 1) .and. (par2 == 1) .and. (par3 == 3)) .or. &
+ ((par1 == 1) .and. (par2 == 3) .and. (par3 == 3)) &
+ ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = 0._ki
+ f3p1m(5:6) = h0d(s13)/6._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p1m(1:2) = 0._ki
+ f3p1m(3:4) = 0._ki
+ f3p1m(5:6) = h0d(s13)/6._ki
+ !
+ end if
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ f3p1m(3:4) = -f3p1m(3:4)
+ !
+ end function f3p1m
+ !
+ !****f* src/integral/three_point/function_3p1m/f3p1m_np2
+ ! NAME
+ !
+ ! Function f3p1m_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p1m_np2(s13,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the one off-shell external three point function in n+2 dimensions.
+ ! with up to one Feynman parameter in the numerator.
+ ! It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ ! * par1 -- an integer, the label of the third Feynman parameter = 0
+ ! * par2 -- an integer, the label of the second Feynman parameter = 0
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ ! one mass three point function without Feynman parameters
+ ! f3p1m_np2(s13,0,0,0)
+ ! with one Feynman parameter at the numerator z_1
+ ! f3p1m_np2(s13,0,0,1)
+ !
+ !*****
+ function f3p1m_np2(s13,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s13
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p1m_np2
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p1m_np2(1) = -1._ki/2._ki
+ f3p1m_np2(2) = 0._ki
+ f3p1m_np2(3:4) = 1._ki/2._ki*h0e(s13)*s13
+ f3p1m_np2(3) = f3p1m_np2(3) - 3._ki/2._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f3p1m_np2(1) = -1._ki/6._ki
+ f3p1m_np2(2) = 0._ki
+ !
+ if ( (par3 == 1) .or. (par3 == 3) ) then
+ !
+ f3p1m_np2(3:4) = 1._ki/6._ki*h0e(s13)*s13
+ f3p1m_np2(3) = f3p1m_np2(3) - 4._ki/9._ki
+ !
+ else if (par3 == 2) then
+ !
+ f3p1m_np2(3:4) = 1._ki/6._ki*h0e(s13)*s13
+ f3p1m_np2(3) = f3p1m_np2(3) - 11._ki/18._ki
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in function f3p1m_np2'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of two mass six dimensional 3-point function &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'Feynman param 1: %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'Feynman param 2: %d1'
+ tab_erreur_par(4)%arg_int = par2
+ tab_erreur_par(5)%a_imprimer = .true.
+ tab_erreur_par(5)%chaine = 'Feynman param 3: %d1'
+ tab_erreur_par(5)%arg_int = par3
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function f3p1m_np2
+ !
+end module function_3p1m
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p_finite.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p_finite.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p_finite.f90 (revision 119)
@@ -0,0 +1,6778 @@
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !attention modif de plus_grand, de i3p3m_3mi, eval_numer_g0 et log_quad
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+!~ 13.5.2011: no need for LT, avh_olo any longer,
+!~ use own 3-point functions by JPhi,Eric
+!
+!****h* src/integral/three_point/function_3pC0i
+! NAME
+!
+! Module function_3p_finite
+!
+! USAGE
+!
+! use function_3p_finite
+!
+! DESCRIPTION
+!
+! This module is used to compute IR finite three point functions
+! with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports the functions:
+! * f3p_finite, C0 -- functions for the computation of IR finite
+! three-point functions with/without Feynman parameters in n, n+2 dimensions
+! * f3p_finite_c -- a function which computes the same thing as f3p_finite, only
+! the format of the return values is different
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90) ! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_2p (src/integrals/two_point/generic_function_2p.f90)
+! * multiply_div (src/module/multiply_div.f90)
+! * s_matrix_type (src/module/s_matrix_type.f90)
+! * cas_merdique (src/integrals/three_point/cas_merdiquem.f90)
+!
+!*****
+module function_3p_finite
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use equal
+ use sortie_erreur
+ use generic_function_2p
+ use multiply_div
+ use s_matrix_type
+ use matrice_s, only : prepare_s_matrix_local
+ use cas_merdique
+ implicit none
+ !
+ private
+ !
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob
+ character (len=3) :: dim_glob
+ !
+ real(ki), dimension(3) :: b_real
+ real(ki) :: sumb_real
+ real(ki), dimension(3,3) :: invs_real, s_mat_real
+ !
+ complex(ki), dimension(3) :: b_complex
+ complex(ki) :: sumb_complex
+ complex(ki), dimension(3,3) :: invs_complex, s_mat_complex
+ !
+ type (s_matrix_poly) :: s_mat_p_loc
+ !
+ integer, dimension(3) :: par
+ integer, dimension(3) :: s = (/1,2,3/)
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:), allocatable :: deja_calcule_c
+ complex(ki), dimension(:,:), allocatable :: resultat_c
+ !
+ logical, dimension(:,:), allocatable :: deja_calcule2
+ real(ki),dimension(:,:,:), allocatable :: resultat2
+ logical, dimension(:,:), allocatable :: deja_calcule2_c
+ complex(ki),dimension(:,:,:), allocatable :: resultat2_c
+ !
+ logical, dimension(:), allocatable :: deja_calcule_np2
+ real(ki),dimension(:,:), allocatable :: resultat_np2
+ logical, dimension(:), allocatable :: deja_calcule_np2_c
+ complex(ki),dimension(:,:), allocatable :: resultat_np2_c
+ !
+ logical, dimension(:,:,:), allocatable :: deja_calcule22
+ real(ki),dimension(:,:,:,:), allocatable :: resultat22
+ logical, dimension(:,:,:), allocatable :: deja_calcule22_c
+ complex(ki),dimension(:,:,:,:), allocatable :: resultat22_c
+ !
+ ! added by jpg 30/04/2011
+ real(ki) :: delta_glob !small imaginary part
+ complex(ki) :: det_s,num_b1,num_b2,num_b3,num_sumb
+ real(ki) :: det_g
+ complex(ki), dimension(3,3) :: g_glob
+ complex(ki) :: a,b,c,d,e,f
+ logical, dimension(3) :: tab_test_glob
+ logical, dimension(3) :: tab_test_g2_glob
+ real(ki) :: grand_glob
+ !
+ !
+ interface f3p_finite
+ !
+ module procedure f3p_finite_rarg
+ module procedure f3p_finite_carg
+ !
+ end interface
+ !
+ interface C0
+ !
+ module procedure C0_rarg
+ module procedure C0_carg
+ !
+ end interface
+ !
+ public :: f3p_finite,f3p_finite_c,C0
+ !
+ !
+ contains
+ !
+ !****f* src/integral/three_point/function_3p_finite/f3p_finite
+ ! NAME
+ !
+ ! Function f3p_finite
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p_finite(dim,s1,s2,s3,m1,m2,m3,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the IR finite three-point
+ ! function in n and n+2 dimensions.
+ !
+ ! INPUTS
+ !
+ ! * s1 -- a real (type ki), p1^2
+ ! * s2 -- a real (type ki), p2^2
+ ! * s3 -- a real (type ki), p3^2
+ ! * m1 -- a real/complex (type ki), the first mass squared
+ ! * m2 -- a real/complex (type ki), the second mass squared
+ ! * m3 -- a real/complex (type ki), the third mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6,
+ ! where the last two entries corresponding to
+ ! the real/imaginary part of the constant term.
+ ! the first 4 entries are always zero, but the shape should be
+ ! uniform for all triangles called in generic_function_3p
+ !
+ !*****
+ function f3p_finite_rarg(dim,s1,s2,s3,m1,m2,m3,par1,par2,par3)
+ implicit none
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p_finite_rarg
+ !
+ integer :: nb_par
+ real(ki) :: lamb, detS3
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: resto,abserro
+ complex(ki), dimension(3,3) :: s_mat_loc
+ integer :: i
+ real(ki) :: s1p,s2p,s3p,m1p,m2p,m3p
+ ! test
+ integer :: i1,i2
+ !
+ !write(6,*) 'MR f3p_finite_rarg',dim,s1,s2,s3,m1,m2,m3,par1,par2,par3
+ !
+ par = (/par1,par2,par3/)
+ !
+ s_mat_real(1,:) = (/-m1*2._ki,s2-m1-m2,s1-m1-m3/)
+ s_mat_real(2,:) = (/s2-m1-m2,-m2*2._ki,s3-m2-m3/)
+ s_mat_real(3,:) = (/s1-m1-m3,s3-m2-m3,-m3*2._ki/)
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ ! this can't be done if partly invariants instead of
+ ! s_mat_real are used as arguments
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = maxval(array=abs(s_mat_real))
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ !
+ s_mat_real = s_mat_real/plus_grand
+ !
+ s_mat_p_loc = assign_s_matrix(s_mat_real)
+ call prepare_s_matrix_local(s_mat_p_loc,s)
+ !
+ detS3 = -(s_mat_real(1, 3)**2*s_mat_real(2, 2)) + 2*s_mat_real(1, 2)*s_mat_real(1, 3)*s_mat_real(2, 3) - &
+ & s_mat_real(1, 2)**2*s_mat_real(3, 3) + s_mat_real(1, 1)*(-s_mat_real(2, 3)**2 + &
+ & s_mat_real(2, 2)*s_mat_real(3, 3))
+
+ b_real(1) = (-s_mat_real(2, 3)**2 + s_mat_real(1, 3)*(-s_mat_real(2, 2) + s_mat_real(2, 3)) + &
+ & s_mat_real(1, 2)*(s_mat_real(2, 3) - s_mat_real(3, 3)) + s_mat_real(2, 2)*s_mat_real(3, 3))/detS3
+ b_real(2) = (-s_mat_real(1, 3)**2 + s_mat_real(1, 3)*s_mat_real(2, 3) + &
+ & s_mat_real(1, 2)*(s_mat_real(1, 3) - s_mat_real(3, 3)) + &
+ & s_mat_real(1, 1)*(-s_mat_real(2, 3) + s_mat_real(3, 3)))/detS3
+ b_real(3) = (-s_mat_real(1, 2)**2 - s_mat_real(1, 3)*s_mat_real(2, 2) + &
+ & s_mat_real(1, 1)*(s_mat_real(2, 2) - s_mat_real(2, 3)) + &
+ & s_mat_real(1, 2)*(s_mat_real(1, 3) + s_mat_real(2, 3)))/detS3
+ !
+ sumb_real = (-s_mat_real(1, 2)**2 - s_mat_real(1, 3)**2 + s_mat_real(1, 1)*s_mat_real(2, 2) - &
+ & 2*s_mat_real(1, 3)*(s_mat_real(2, 2) - s_mat_real(2, 3)) - 2*s_mat_real(1, 1)*s_mat_real(2, 3) - &
+ & s_mat_real(2, 3)**2 + 2*s_mat_real(1, 2)*(s_mat_real(1, 3) + s_mat_real(2, 3) - s_mat_real(3, 3)) + &
+ & s_mat_real(1, 1)*s_mat_real(3, 3) + s_mat_real(2, 2)*s_mat_real(3, 3))/detS3
+ !
+ invs_real(1,1) = (-s_mat_real(2, 3)**2 + s_mat_real(2, 2)*s_mat_real(3, 3))/detS3
+ invs_real(1,2) = (s_mat_real(1, 3)*s_mat_real(2, 3) - s_mat_real(1, 2)*s_mat_real(3, 3))/detS3
+ invs_real(1,3) = (-(s_mat_real(1, 3)*s_mat_real(2, 2)) + s_mat_real(1, 2)*s_mat_real(2, 3))/detS3
+ invs_real(2,1) = invs_real(1,2)
+ invs_real(2,2) = (-s_mat_real(1, 3)**2 + s_mat_real(1, 1)*s_mat_real(3, 3))/detS3
+ invs_real(2,3) = (s_mat_real(1, 2)*s_mat_real(1, 3) - s_mat_real(1, 1)*s_mat_real(2, 3))/detS3
+ invs_real(3,1) = invs_real(1,3)
+ invs_real(3,2) = invs_real(2,3)
+ invs_real(3,3) = (-s_mat_real(1, 2)**2 + s_mat_real(1, 1)*s_mat_real(2, 2))/detS3
+ !
+ !lamb = 2._ki*s_mat_real(1,3)*s_mat_real(2,3)+2._ki*s_mat_real(1,2)*s_mat_real(2,3)&
+ !+2._ki*s_mat_real(1,3)*s_mat_real(1,2)-s_mat_real(1,3)*s_mat_real(1,3)-s_mat_real(1,2)*s_mat_real(1,2)&
+ !-s_mat_real(2,3)*s_mat_real(2,3)
+ lamb = (-s_mat_real(1, 2)**2 - s_mat_real(1, 3)**2 + s_mat_real(1, 1)*s_mat_real(2, 2) - &
+ & 2*s_mat_real(1, 3)*(s_mat_real(2, 2) - s_mat_real(2, 3)) - 2*s_mat_real(1, 1)*s_mat_real(2, 3) - &
+ & s_mat_real(2, 3)**2 + 2*s_mat_real(1, 2)*(s_mat_real(1, 3) + s_mat_real(2, 3) - s_mat_real(3, 3)) + &
+ & s_mat_real(1, 1)*s_mat_real(3, 3) + s_mat_real(2, 2)*s_mat_real(3, 3))
+ !
+ nb_par = count(mask=par/=0)
+ !
+ s_mat_loc = cmplx(s_mat_real,0._ki,ki)
+ !
+ m1p = -s_mat_loc(1,1)/2._ki
+ m2p = -s_mat_loc(2,2)/2._ki
+ m3p = -s_mat_loc(3,3)/2._ki
+ s1p = s_mat_loc(1,3) - (s_mat_loc(1,1)+s_mat_loc(3,3))/2._ki
+ s2p = s_mat_loc(1,2) - (s_mat_loc(1,1)+s_mat_loc(2,2))/2._ki
+ s3p = s_mat_loc(2,3) - (s_mat_loc(2,2)+s_mat_loc(3,3))/2._ki
+ !
+ a = s_mat_loc(1,3)-1._ki/2._ki*s_mat_loc(1,1)-1._ki/2._ki*s_mat_loc(3,3)
+ b = s_mat_loc(2,3)-1._ki/2._ki*s_mat_loc(2,2)-1._ki/2._ki*s_mat_loc(3,3)
+ c = s_mat_loc(1,2)-s_mat_loc(1,3)-s_mat_loc(2,3)+s_mat_loc(3,3)
+ d = -s_mat_loc(1,3)+s_mat_loc(1,1)
+ e = s_mat_loc(1,3)-s_mat_loc(1,2)
+ f = -1._ki/2._ki*s_mat_loc(1,1)
+ !
+ !write(*,*) 'test int_log 0:',b,s3
+ !
+ ! les coefficients des differentes formes quadratiques
+ g_glob(1,1) = b
+ g_glob(1,2) = c+e
+ g_glob(1,3) = a+d+f
+ g_glob(2,1) = a
+ g_glob(2,2) = d
+ g_glob(2,3) = f
+ g_glob(3,1) = a+b+c
+ g_glob(3,2) = d+e
+ g_glob(3,3) = f
+ !
+ do i=1,3
+ tab_test_glob(i) = equal_real(real(g_glob(i,1),ki),0._ki,1.e+1_ki) .and. equal_real(abs(g_glob(i,2)),0._ki,1.e5_ki)
+ end do
+ do i=1,3
+ tab_test_g2_glob(i) = equal_real(real(g_glob(i,1),ki),0._ki,1.e+1_ki) .and. .not.(equal_real(abs(g_glob(i,2)),0._ki,1.e5_ki))
+ end do
+ !
+ delta_glob = epsilon(1._ki)
+ !
+ call compute_deter(s_mat_loc(1,3),s_mat_loc(1,2),s_mat_loc(2,3),s_mat_loc(1,1),s_mat_loc(2,2),s_mat_loc(3,3))
+ !
+ if (nb_par == 0) then
+ !
+ norma = -1._ki/2._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = -1._ki/6._ki
+ !
+ else if (nb_par == 2) then
+ !
+ ! Different normalisations: depends on whether the feynman parameters are equal or not
+ ! Use the fact that the two parameters will be par2 and par3
+ if (par2==par3) then
+ norma = -1._ki/12._ki
+ else
+ norma = -1._ki/24._ki
+ endif
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(4))
+ allocate(resultat(4,2))
+ allocate(deja_calcule2(3,4))
+ allocate(resultat2(3,4,4))
+ allocate(deja_calcule_np2(4))
+ allocate(resultat_np2(4,4))
+ allocate(deja_calcule22(3,4,4))
+ allocate(resultat22(3,4,4,4))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule2 = .false.
+ resultat2 = 0._ki
+ deja_calcule_np2 = .false.
+ resultat_np2 = 0._ki
+ deja_calcule22 = .false.
+ resultat22 = 0._ki
+ !
+ !
+ f3p_finite_rarg = 0._ki
+ !
+ write(*,*) '-- test f3p_finite_rarg det_s,det_g :',det_s,det_g
+ write(*,*) '-- test f3p_finite_rarg lamb :',lamb," coup ",coupure_3p3m
+
+ !write(*,*) 'test for crappy: with lamb ',lamb,' so 100abslamb ',abs(lamb)*100.0_ki,' coupure_3p3m ',coupure_3p3m,&
+!&' and det_s ',det_s,' det_g ',det_g, ' and some eq masses ',(equal_real(m2,m3) .or. equal_real(m1,m2) .or. equal_real(m3,m1)),&
+!& ' and nb_par ',nb_par, ' and plus_grand ', plus_grand
+
+ !if ( ( (.not. of_order_of(abs(det_s),det_g) ) .and. (abs(lamb)*100._ki > coupure_3p3m) ) &
+ if ( ( (abs(lamb)*100._ki > coupure_3p3m) ) &
+ & .or. (count(mask=tab_test_glob) == 2) ) then
+ !
+ !write(*,*) 'test f3p_finite_rarg 1 analytic:',count(mask=tab_test_glob)
+ !do i1=1,3
+ !do i2=1,3
+ !!write(*,*) 'g_glob(',i1,',',i2,') = ',g_glob(i1,i2)
+ !end do
+ !end do
+ !
+ if (dim == "ndi") then
+ !
+ !f3p_finite_rarg(3:4)= a3pC0i_rarg(s1,s2,s3,m1,m2,m3,par1,par2,par3)&
+ f3p_finite_rarg(3:4)= a3pC0i_rarg(s1p,s2p,s3p,m1p,m2p,m3p,par1,par2,par3)&
+ &/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ !f3p_finite_rarg = a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,par1,par2,par3)
+ f3p_finite_rarg = a3pC0i_np2_rarg(s1p,s2p,s3p,m1p,m2p,m3p,par1,par2,par3)
+ f3p_finite_rarg(3) = f3p_finite_rarg(3)-log(plus_grand)*norma
+ ! mu2_scale_par is already contained in the bubbles,
+ ! scaling of s_mat_real does not enter here
+ !
+ end if
+ !
+! unremove
+! remove the crappy case for the moment .false. .and.
+ else if ( (of_order_of(abs(det_s),det_g)) .and. (abs(lamb)*100.0_ki <= coupure_3p3m) &
+& .and. ( equal_real(m2,m3) .or. equal_real(m1,m2) .or. equal_real(m3,m1) )&
+&.and. (nb_par == 0) ) then ! MR added nb_par restriction, as tensor cases not yet in place.
+! I have not yet considered whether the "right pair" of masses is coming out equal
+ !
+ write(*,*) '-- test f3p_finite_rarg 1 crappy:',det_s,det_g
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ !resto = crappy_case(dim,s1/plus_grand,s2/plus_grand,s3/plus_grand,&
+ !&cmplx(m1/plus_grand,0._ki,ki),cmplx(m2/plus_grand,0._ki,ki),cmplx(m3/plus_grand,0._ki,ki),&
+ !&par1,par2,par3)
+ resto = crappy_case(dim,s1p,s2p,s3p,&
+ &cmplx(m1p,0._ki,ki),cmplx(m2p,0._ki,ki),cmplx(m3p,0._ki,ki),&
+ &par1,par2,par3)
+ !write(*,*) 'test f3p_finite_rarg: crappy called and resto ',resto
+ !
+ if (dim == "ndi") then
+ !
+ resto = resto/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ f3p_finite_rarg(1) = norma
+ f3p_finite_rarg(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ !
+ end if
+ !
+ f3p_finite_rarg(3) = real(resto,ki)
+ f3p_finite_rarg(4) = aimag(resto)
+ !
+ else
+ !
+ ! numerical computation
+ !
+ !write(*,*) 'test f3p_finite_rarg 1 numeric:',count(mask=tab_test_glob)
+ !write(*,*) 'test f3p_finite_rarg 1 numeric: lamb ',lamb,' detS3 ',detS3,"of_order_of(abs(det_s),det_g) "&
+!&, of_order_of(abs(det_s),det_g)
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ origine_info_par = "f3p_finite, dimension "//dim
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = detS3
+ !
+ call generic_eval_numer(eval_numer_g0,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ !write(6,*) "MR says generic_eval_numer done resto ",resto," abserro ",abserro
+
+ if (dim == "ndi") then
+ !
+ resto = resto/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ f3p_finite_rarg(1) = norma
+ f3p_finite_rarg(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ !
+ end if
+ !
+ f3p_finite_rarg(3) = real(resto,ki)
+ f3p_finite_rarg(4) = aimag(resto)
+ !
+ end if ! end if analytic or numeric
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule2)
+ deallocate(resultat2)
+ deallocate(deja_calcule_np2)
+ deallocate(resultat_np2)
+ deallocate(deja_calcule22)
+ deallocate(resultat22)
+ !
+ call nullify_s_matrix(s_mat_p_loc)
+
+ !write(6,*) "MR says end function f3p_finite_rarg with ",f3p_finite_rarg
+ !
+ end function f3p_finite_rarg
+ !
+ function f3p_finite_carg(dim,s1r,s2r,s3r,m1,m2,m3,par1,par2,par3)
+ implicit none
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s1r, s2r, s3r
+ complex(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p_finite_carg
+ !
+ complex(ki) :: s1, s2, s3
+ integer :: nb_par
+ complex(ki) :: lamb, detS3
+ real(ki) :: plus_grand
+ complex(ki) :: norma
+ complex(ki) :: resto,abserro
+ complex(ki) :: temp0
+ complex(ki), dimension(2) :: temp
+ complex(ki), dimension(3,3) :: s_mat_loc
+ real(ki) :: s1rp,s2rp,s3rp
+ complex(ki) :: m1p,m2p,m3p
+ integer :: i
+ !
+ !write(6,*) 'MR f3p_finite_carg',dim,s1r,s2r,s3r,m1,m2,m3,par1,par2,par3
+ par = (/par1,par2,par3/)
+ !
+ s1 = cmplx(s1r, 0._ki,ki)
+ s2 = cmplx(s2r, 0._ki,ki)
+ s3 = cmplx(s3r, 0._ki,ki)
+ !
+ s_mat_complex(1,:) = (/-m1*2._ki,s2-m1-m2,s1-m1-m3/)
+ s_mat_complex(2,:) = (/s2-m1-m2,-m2*2._ki,s3-m2-m3/)
+ s_mat_complex(3,:) = (/s1-m1-m3,s3-m2-m3,-m3*2._ki/)
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ ! this can't be done if partly invariants instead of
+ ! s_mat_complex are used as arguments
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = maxval(array=abs(s_mat_complex))
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ s_mat_complex = s_mat_complex/plus_grand
+ !
+ s_mat_real = real(s_mat_complex,ki)
+ !
+ s_mat_p_loc = assign_s_matrix(s_mat_complex,s_mat_real)
+ call prepare_s_matrix_local(s_mat_p_loc, s)
+ !
+ detS3 = -(s_mat_complex(1, 3)**2*s_mat_complex(2, 2)) + 2*s_mat_complex(1, 2)*s_mat_complex(1, 3)*s_mat_complex(2, 3) - &
+ & s_mat_complex(1, 2)**2*s_mat_complex(3, 3) + s_mat_complex(1, 1)*(-s_mat_complex(2, 3)**2 + &
+ & s_mat_complex(2, 2)*s_mat_complex(3, 3))
+
+ b_complex(1) = (-s_mat_complex(2, 3)**2 + s_mat_complex(1, 3)*(-s_mat_complex(2, 2) + s_mat_complex(2, 3)) + &
+ & s_mat_complex(1, 2)*(s_mat_complex(2, 3) - s_mat_complex(3, 3)) + s_mat_complex(2, 2)*s_mat_complex(3, 3))/detS3
+ b_complex(2) = (-s_mat_complex(1, 3)**2 + s_mat_complex(1, 3)*s_mat_complex(2, 3) + &
+ & s_mat_complex(1, 2)*(s_mat_complex(1, 3) - s_mat_complex(3, 3)) + &
+ & s_mat_complex(1, 1)*(-s_mat_complex(2, 3) + s_mat_complex(3, 3)))/detS3
+ b_complex(3) = (-s_mat_complex(1, 2)**2 - s_mat_complex(1, 3)*s_mat_complex(2, 2) + &
+ & s_mat_complex(1, 1)*(s_mat_complex(2, 2) - s_mat_complex(2, 3)) + &
+ & s_mat_complex(1, 2)*(s_mat_complex(1, 3) + s_mat_complex(2, 3)))/detS3
+ !
+ sumb_complex = (-s_mat_complex(1, 2)**2 - s_mat_complex(1, 3)**2 + s_mat_complex(1, 1)*s_mat_complex(2, 2) - &
+ & 2*s_mat_complex(1, 3)*(s_mat_complex(2, 2) - s_mat_complex(2, 3)) - 2*s_mat_complex(1, 1)*s_mat_complex(2, 3) - &
+ & s_mat_complex(2, 3)**2 + 2*s_mat_complex(1, 2)*(s_mat_complex(1, 3) + s_mat_complex(2, 3) - s_mat_complex(3, 3)) + &
+ & s_mat_complex(1, 1)*s_mat_complex(3, 3) + s_mat_complex(2, 2)*s_mat_complex(3, 3))/detS3
+ !
+ invs_complex(1,1) = (-s_mat_complex(2, 3)**2 + s_mat_complex(2, 2)*s_mat_complex(3, 3))/detS3
+ invs_complex(1,2) = (s_mat_complex(1, 3)*s_mat_complex(2, 3) - s_mat_complex(1, 2)*s_mat_complex(3, 3))/detS3
+ invs_complex(1,3) = (-(s_mat_complex(1, 3)*s_mat_complex(2, 2)) + s_mat_complex(1, 2)*s_mat_complex(2, 3))/detS3
+ invs_complex(2,1) = invs_complex(1,2)
+ invs_complex(2,2) = (-s_mat_complex(1, 3)**2 + s_mat_complex(1, 1)*s_mat_complex(3, 3))/detS3
+ invs_complex(2,3) = (s_mat_complex(1, 2)*s_mat_complex(1, 3) - s_mat_complex(1, 1)*s_mat_complex(2, 3))/detS3
+ invs_complex(3,1) = invs_complex(1,3)
+ invs_complex(3,2) = invs_complex(2,3)
+ invs_complex(3,3) = (-s_mat_complex(1, 2)**2 + s_mat_complex(1, 1)*s_mat_complex(2, 2))/detS3
+ !
+ lamb = (-s_mat_complex(1, 2)**2 - s_mat_complex(1, 3)**2 + s_mat_complex(1, 1)*s_mat_complex(2, 2) - &
+ & 2*s_mat_complex(1, 3)*(s_mat_complex(2, 2) - s_mat_complex(2, 3)) - 2*s_mat_complex(1, 1)*s_mat_complex(2, 3) - &
+ & s_mat_complex(2, 3)**2 + 2*s_mat_complex(1, 2)*(s_mat_complex(1, 3) + s_mat_complex(2, 3) - s_mat_complex(3, 3)) + &
+ & s_mat_complex(1, 1)*s_mat_complex(3, 3) + s_mat_complex(2, 2)*s_mat_complex(3, 3))
+ !lamb = 2._ki*s_mat_complex(1,3)*s_mat_complex(2,3)+2._ki*s_mat_complex(1,2)*s_mat_complex(2,3)&
+ !+2._ki*s_mat_complex(1,3)*s_mat_complex(1,2)-s_mat_complex(1,3)*s_mat_complex(1,3)-s_mat_complex(1,2)*s_mat_complex(1,2)&
+ !-s_mat_complex(2,3)*s_mat_complex(2,3)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ s_mat_loc = s_mat_complex
+ !
+ m1p = m1/plus_grand
+ m2p = m2/plus_grand
+ m3p = m3/plus_grand
+ s1rp = s1r/plus_grand
+ s2rp = s2r/plus_grand
+ s3rp = s3r/plus_grand
+ !
+ a = s_mat_loc(1,3)-1._ki/2._ki*s_mat_loc(1,1)-1._ki/2._ki*s_mat_loc(3,3)
+ b = s_mat_loc(2,3)-1._ki/2._ki*s_mat_loc(2,2)-1._ki/2._ki*s_mat_loc(3,3)
+ c = s_mat_loc(1,2)-s_mat_loc(1,3)-s_mat_loc(2,3)+s_mat_loc(3,3)
+ d = -s_mat_loc(1,3)+s_mat_loc(1,1)
+ e = s_mat_loc(1,3)-s_mat_loc(1,2)
+ f = -1._ki/2._ki*s_mat_loc(1,1)
+ !
+ !
+ ! les coefficients des differentes formes quadratiques
+ g_glob(1,1) = b
+ g_glob(1,2) = c+e
+ g_glob(1,3) = a+d+f
+ g_glob(2,1) = a
+ g_glob(2,2) = d
+ g_glob(2,3) = f
+ g_glob(3,1) = a+b+c
+ g_glob(3,2) = d+e
+ g_glob(3,3) = f
+ !
+ do i=1,3
+ tab_test_glob(i) = equal_real(real(g_glob(i,1),ki),0._ki,1.e+1_ki) .and. equal_real(abs(g_glob(i,2)),0._ki,1.e5_ki)
+ end do
+ do i=1,3
+ tab_test_g2_glob(i) = equal_real(real(g_glob(i,1),ki),0._ki,1.e+1_ki) .and. .not.(equal_real(abs(g_glob(i,2)),0._ki,1.e5_ki))
+ end do
+ delta_glob = epsilon(1._ki)
+ !
+ call compute_deter(s_mat_loc(1,3),s_mat_loc(1,2),s_mat_loc(2,3),s_mat_loc(1,1),s_mat_loc(2,2),s_mat_loc(3,3))
+ !
+ !
+ if (nb_par == 0) then
+ !
+ norma = -1._ki/2._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = -1._ki/6._ki
+ !
+ else if (nb_par == 2) then
+ !
+ ! Different normalisations: depends on whether the feynman parameters are equal or not
+ ! Use the fact that the two parameters will be par2 and par3
+ if (par2==par3) then
+ norma = -1._ki/12._ki
+ else
+ norma = -1._ki/24._ki
+ endif
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule_c(4))
+ allocate(resultat_c(4,1) )
+ allocate(deja_calcule2_c(3,4))
+ allocate(resultat2_c(3,4,2))
+ allocate(deja_calcule_np2_c(4))
+ allocate(resultat_np2_c(4,2))
+ allocate(deja_calcule22_c(3,4,4))
+ allocate(resultat22_c(3,4,4,2))
+ !
+ ! initialisation
+ !
+ deja_calcule_c = .false.
+ resultat_c = czero
+ deja_calcule2_c = .false.
+ resultat2_c = czero
+ deja_calcule_np2_c = .false.
+ resultat_np2_c = czero
+ deja_calcule22_c = .false.
+ resultat22_c = czero
+ !
+ !
+ f3p_finite_carg(:) = 0._ki
+ !
+
+
+ !write(*,*) 'test for crappy: with lamb ',lamb,' so 100abslamb ',abs(lamb)*100.0_ki,' coupure_3p3m ',coupure_3p3m,&
+!&' and det_s ',det_s,' det_g ',det_g, ' and some eq masses ',(( equal_real(real(m2),real(m3)) &
+!&.and. equal_real(aimag(m2),aimag(m3)) )&
+!& .or. ( equal_real(real(m2),real(m1)) .and. equal_real(aimag(m2),aimag(m1)) )&
+!& .or. ( equal_real(real(m1),real(m3)) .and. equal_real(aimag(m1),aimag(m3)) )),&
+!& ' and nb_par ',nb_par, ' and plus_grand ', plus_grand
+
+ !write(*,*) 'test f3p_finite_carg :',of_order_of(abs(det_s),det_g),(abs(lamb)*100._ki > coupure_3p3m)
+ !if ( ( (.not. of_order_of(abs(det_s),det_g) ) .and. (abs(lamb)*100._ki > coupure_3p3m) ) &
+ if ( ( (abs(lamb)*100._ki > coupure_3p3m) ) &
+ & .or. (count(mask=tab_test_glob) == 2) ) then
+ !
+ ! always use analytic computation until massive numerical is implemented
+ !write(*,*) 'test f3p_finite_carg 1 analytic:',count(mask=tab_test_glob)
+ !
+ !
+ if (dim == "ndi") then
+ !
+ !temp0 = a3pC0i_carg(s1r,s2r,s3r,m1,m2,m3,par1,par2,par3)
+ !write(*,*) 'test f3p_finite_carg analytic -- call a3pC0i_carg(',s1rp,s2rp,s3rp,m1p,m2p,m3p,par1,par2,par3
+ temp0 = a3pC0i_carg(s1rp,s2rp,s3rp,m1p,m2p,m3p,par1,par2,par3)
+ !write(*,*) 'test f3p_finite_carg analytic -- a3pC0i_carg done, ',temp0
+ f3p_finite_carg(3) = real(temp0,ki)/plus_grand
+ f3p_finite_carg(4) = aimag(temp0)/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ !temp = a3pC0i_np2_carg(s1r,s2r,s3r,m1,m2,m3,par1,par2,par3)
+ temp = a3pC0i_np2_carg(s1rp,s2rp,s3rp,m1p,m2p,m3p,par1,par2,par3)
+ f3p_finite_carg(1) = real(temp(1),ki)
+ f3p_finite_carg(2) = aimag(temp(1))
+ f3p_finite_carg(3) = real(temp(2),ki)
+ f3p_finite_carg(4) = aimag(temp(2))
+ f3p_finite_carg(3) = f3p_finite_carg(3)-log(plus_grand)*norma
+ ! mu2_scale_par is already contained in the bubbles,
+ ! scaling of s_mat_complex does not enter here
+ !
+ end if
+ !
+ else if ( (of_order_of(abs(det_s),det_g)) .and. (abs(lamb)*100.0_ki <= coupure_3p3m) &
+& .and. ( ( equal_real(real(m2),real(m3)) .and. equal_real(aimag(m2),aimag(m3)) )&
+& .or. ( equal_real(real(m2),real(m1)) .and. equal_real(aimag(m2),aimag(m1)) )&
+& .or. ( equal_real(real(m1),real(m3)) .and. equal_real(aimag(m1),aimag(m3)) ) )&
+&.and. (nb_par == 0) ) then ! MR added nb_par restriction, as tensor cases not yet in place.
+! I have not yet considered whether the "right pair" of masses is coming out equal
+ !
+ !write(6,*) 'MR f3p_finite_carg, crappy ',dim,s1,s2,s3,m1,m2,m3,par1,par2,par3,f3p_finite_carg
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ !resto = crappy_case(dim,s1r/plus_grand,s2r/plus_grand,s3r/plus_grand,&
+ !&m1/plus_grand,m2/plus_grand,m3/plus_grand,par1,par2,par3)
+ resto = crappy_case(dim,s1rp,s2rp,s3rp,&
+ &m1p,m2p,m3p,par1,par2,par3)
+ !
+ if (dim == "ndi") then
+ !
+ resto = resto/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ f3p_finite_carg(1) = norma
+ f3p_finite_carg(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ !
+ end if
+ !
+ f3p_finite_carg(3) = real(resto,ki)
+ f3p_finite_carg(4) = aimag(resto)
+ !
+ else
+ !
+ ! numerical computation
+ !
+ !write(*,*) 'test f3p_finite_rarg 1 numeric:',count(mask=tab_test_glob)
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ origine_info_par = "f3p_finite, dimension "//dim
+ num_grand_b_info_par = real(lamb,ki)
+ denom_grand_b_info_par = real(detS3,ki)
+ !
+ call generic_eval_numer(eval_numer_g0,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ if (dim == "ndi") then
+ !
+ resto = resto/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ f3p_finite_carg(1) = norma
+ f3p_finite_carg(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ !
+ end if
+ !
+ f3p_finite_carg(3) = real(resto,ki)
+ f3p_finite_carg(4) = aimag(resto)
+ !
+ end if ! end if analytic or numeric
+ !
+ ! numerical computation disabled
+ !
+ deallocate(deja_calcule_c)
+ deallocate(resultat_c)
+ deallocate(deja_calcule2_c)
+ deallocate(resultat2_c)
+ deallocate(deja_calcule_np2_c)
+ deallocate(resultat_np2_c)
+ deallocate(deja_calcule22_c)
+ deallocate(resultat22_c)
+ !
+ call nullify_s_matrix(s_mat_p_loc)
+ !
+ !write(6,*) 'MR end f3p_finite_carg',dim,s1,s2,s3,m1,m2,m3,par1,par2,par3,f3p_finite_carg
+
+ end function f3p_finite_carg
+ !
+ !****f* src/integral/three_point/function_3pC0i/f3p_finite_c
+ ! NAME
+ !
+ ! Function f3p_finite_c
+ !
+ ! USAGE
+ !
+ ! complex_dim2 = f3p_finite_c(s1,s2,s3,m1,m2,m3,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! It computes the same as the function f3p_finite, but the returned
+ ! value is a complex (type ki) array of rank 1 and shape 2
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (length 3), to compute in n or n+2 dimensions
+ ! * s1 -- a real (type ki), p1^2
+ ! * s2 -- a real (type ki), p2^2
+ ! * s3 -- a real (type ki), p3^2
+ ! * m1 -- a real (type ki), the first mass^2
+ ! * m2 -- a real (type ki), the second mass^2
+ ! * m3 -- a real (type ki), the third mass^2
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An complex (type ki) array of rank 1 and shape 2 corresponding to
+ ! the (real part,imaginary part) of the coefficient of the 1/epsilon term
+ ! and the (real part,imaginary part) of the constant term. if par1 and/or par2
+ ! are different from zero for dim="n+2", an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f3p_finite_c(dim,s1,s2,s3,m1,m2,m3,par1,par2,par3)
+ !
+ use translate
+ implicit none
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: s1,s2,s3,m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ complex(ki), dimension(2) :: f3p_finite_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f3p_finite(dim,s1,s2,s3,m1,m2,m3,par1,par2,par3)
+ call to_complex(res4,f3p_finite_c)
+ !
+ end function f3p_finite_c
+ !
+ !****if* src/integral/three_point/function_3pC0i/a3pC0i
+ ! NAME
+ !
+ ! Function a3pC0i
+ !
+ ! USAGE
+ !
+ ! real_dim2 = a3pC0i_rarg(s1,s2,s3,m1r,m2r,m3r,par1,par2,par3)
+ ! complex_dim1 = a3pC0i_carg(s1,s2,s3,m1c,m2c,m3c,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This recursive function implements the formula of ref 1
+ !
+ ! INPUTS
+ !
+ ! * s1 -- a real (type ki), p1^2
+ ! * s2 -- a real (type ki), p2^2
+ ! * s3 -- a real (type ki), p3^2
+ ! * m1(r/c) -- a real/complex (type ki), the first internal mass squared
+ ! * m2(r/c) -- a real/complex (type ki), the second internal mass squared
+ ! * m3(r/c) -- a real/complex (type ki), the third internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! This function modifies the value of the local (for the module) variables:
+ ! * deja_calcule(_c), deja_calcule2, deja_calcule_np2(_c) and deja_calcule22
+ ! * resultat(_c), resultat2, resultat_np2(_c) and resultat22
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 2/1
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a3pC0i_rarg(s1,s2,s3,m1,m2,m3,par1,par2,par3) result(res_3pC0i_rarg)
+ !
+ implicit none
+ real(ki), intent (in) :: s1,s2,s3,m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(2) :: res_3pC0i_rarg
+ !
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(3) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ real(ki), dimension(4) :: temp10,temp11,temp12
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ ctemp = C0(s1,s2,s3,m1,m2,m3)
+ res_3pC0i_rarg(1) = real(ctemp,ki)
+ res_3pC0i_rarg(2) = aimag(ctemp)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a3pC0i_rarg(s1,s2,s3,m1,m2,m3,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2(j,1)) then
+ !
+ truc1 = resultat2(j,1,:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj) !returns real array!
+ resultat2(j,1,:) = truc1
+ deja_calcule2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b_real(j)*truc1
+ temp2 = temp2 + invs_real(j,par3)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_rarg(1) = b_real(par3)*(temp0(1) - temp1(3))/sumb_real + temp2(3)
+ res_3pC0i_rarg(2) = b_real(par3)*(temp0(2) - temp1(4))/sumb_real + temp2(4)
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule_np2(par_plus(3))) then
+ !
+ temp11 = resultat_np2(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,0,0,par3)
+ resultat_np2(par_plus(3),:) = temp11
+ deja_calcule_np2(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp10 = resultat_np2(1,:)
+ temp3 = invs_real(par2,par3)*temp10
+ temp1 = b_real(par2)*temp11
+ temp1 = mult_div(-2._ki/3._ki,temp1)*3._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule2(j,par_plus(3))) then
+ !
+ truc1 = resultat2(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj,par3) !returns real array!
+ resultat2(j,par_plus(3),:) = truc1
+ deja_calcule2(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs_real(j,par2)*truc1
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_rarg(1) = -temp3(3) + temp1(3) + temp2(3)
+ res_3pC0i_rarg(2) = -temp3(4) + temp1(4) + temp2(4)
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp12 = a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,0,par2,par3)
+ temp10 = resultat_np2(par_plus(3),:)
+ temp11 = resultat_np2(par_plus(2),:)
+ temp3 = invs_real(par1,par2)*temp10 &
+ + invs_real(par1,par3)*temp11
+ temp1 = b_real(par1)*temp12
+ temp1 = mult_div(-1._ki/2._ki,temp1)*4._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par3) .and. (j /= par2) ) then
+ !
+ truc1 = resultat22(j,par_plus(2),par_plus(3),:)
+ temp2 = temp2 + invs_real(j,par1)*truc1
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_rarg(1) = -temp3(3) + temp1(3) + temp2(3)
+ res_3pC0i_rarg(2) = -temp3(4) + temp1(4) + temp2(4)
+ !
+ end if
+ !
+ end function a3pC0i_rarg
+ !
+ recursive function a3pC0i_carg(s1,s2,s3,m1,m2,m3,par1,par2,par3) result(res_3pC0i_carg)
+ !
+ implicit none
+ real(ki), intent (in) :: s1,s2,s3
+ complex(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ complex(ki) :: res_3pC0i_carg
+ !
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(3) :: par_loc,par_plus
+ complex(ki), dimension(2) :: truc1_c
+ complex(ki) :: temp0
+ complex(ki), dimension(2) :: temp1, temp2, temp3
+ complex(ki), dimension(2) :: temp10, temp11, temp12
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ !write(6,*) "1A MR a3pC0i_carg( ",s1,s2,s3,m1,m2,m3,par1,par2,par3
+
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ ctemp = C0(s1,s2,s3,m1,m2,m3)
+ res_3pC0i_carg = ctemp
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ !write(6,*) "a3pC0i_carg( A",s1,s2,s3,m1,m2,m3,par1,par2,par3
+ if (deja_calcule_c(1)) then
+ !
+ temp0 = resultat_c(1,1)
+ !
+ else
+ !
+ temp0 = a3pC0i_carg(s1,s2,s3,m1,m2,m3,0,0,0)
+ resultat_c(1,1) = temp0
+ deja_calcule_c(1) = .true.
+ !
+ end if
+ !
+ temp1(:) = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2_c(j,1)) then
+ !
+ truc1_c = resultat2_c(j,1,:)
+ !
+ else
+ !
+ truc1_c = f2p(s_mat_p_loc,b_pro_mj) !returns complex array!
+ resultat2_c(j,1,:) = truc1_c
+ deja_calcule2_c(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b_complex(j)*truc1_c
+ temp2 = temp2 + invs_complex(j,par3)*truc1_c
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_carg = b_complex(par3)*(temp0 - temp1(2))/sumb_complex + temp2(2)
+ !write(6,*) "1MR a3pC0i_carg( B",s1,s2,s3,m1,m2,m3,par1,par2,par3," res ",res_3pC0i_carg
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ !write(6,*) "a3pC0i_carg( AA",s1,s2,s3,m1,m2,m3,par1,par2,par3
+ if (deja_calcule_np2_c(par_plus(3))) then
+ !
+ temp11 = resultat_np2_c(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a3pC0i_np2_carg(s1,s2,s3,m1,m2,m3,0,0,par3)
+ resultat_np2_c(par_plus(3),:) = temp11
+ deja_calcule_np2_c(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp10 = resultat_np2_c(1,:)
+ temp3 = invs_complex(par2,par3)*temp10
+ temp1 = b_complex(par2)*temp11
+ temp1 = mult_div(-2._ki/3._ki,temp1)*3._ki
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule2_c(j,par_plus(3))) then
+ !
+ truc1_c = resultat2_c(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1_c = f2p(s_mat_p_loc,b_pro_mj,par3) !returns complex array!
+ resultat2_c(j,par_plus(3),:) = truc1_c
+ deja_calcule2_c(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs_complex(j,par2)*truc1_c
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_carg = -temp3(2) + temp1(2) + temp2(2)
+ !write(6,*) "a3pC0i_carg( C",s1,s2,s3,m1,m2,m3,par1,par2,par3," res ",res_3pC0i_carg
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ !write(6,*) "a3pC0i_carg( Z ",s1,s2,s3,m1,m2,m3,par1,par2,par3
+
+ temp12 = a3pC0i_np2_carg(s1,s2,s3,m1,m2,m3,0,par2,par3)
+ temp10 = resultat_np2_c(par_plus(3),:)
+ temp11 = resultat_np2_c(par_plus(2),:)
+ temp3 = invs_complex(par1,par2)*temp10 &
+ + invs_complex(par1,par3)*temp11
+ temp1 = b_complex(par1)*temp12
+ temp1 = mult_div(-1._ki/2._ki,temp1)*4._ki
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par3) .and. (j /= par2) ) then
+ !
+ truc1_c = resultat22_c(j,par_plus(2),par_plus(3),:) !!returns complex array!
+ temp2 = temp2 + invs_complex(j,par1)*truc1_c
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_carg = -temp3(2) + temp1(2) + temp2(2)
+ !write(6,*) "a3pC0i_carg( C",s1,s2,s3,m1,m2,m3,par1,par2,par3," res ",res_3pC0i_carg
+ !
+ end if
+
+ !write(6,*) "1MR a3pC0i_carg( ",s1,s2,s3,m1,m2,m3,par1,par2,par3, " res ",res_3pC0i_carg
+ !
+ end function a3pC0i_carg
+ !
+ !****if* src/integral/three_point/function_3pC0i/a3pC0i_np2
+ ! NAME
+ !
+ ! Function a3pC0i_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = a3pC0i_np2_rarg(s1,s2,s3,m1r,m2r,m3r,par1,par2,par3)
+ ! complex_dim2 = a3pC0i_np2_carg(s1,s2,s3,m1c,m2c,m3c,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This recursive function implements the formula of ref 1
+ !
+ ! INPUTS
+ !
+ ! * s1 -- a real (type ki), p1^2
+ ! * s2 -- a real (type ki), p2^2
+ ! * s3 -- a real (type ki), p3^2
+ ! * m1(r/c) -- a real/complex (type ki), the first internal mass squared
+ ! * m2(r/c) -- a real/complex (type ki), the second internal mass squared
+ ! * m3(r/c) -- a real/complex (type ki), the third internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! This function modifies the value of the local (for the module) variables:
+ ! * deja_calcule(_c), deja_calcule2, deja_calcule_np2(_c) and deja_calcule22
+ ! * resultat(_c), resultat2, resultat_np2(_c) and resultat22
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 4/2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ recursive function a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,par1,par2,par3) result(res_3pC0i_np2_rarg)
+ !
+ implicit none
+
+ real(ki), intent (in) :: s1,s2,s3,m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: res_3pC0i_np2_rarg
+ !
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(3) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1,truc2
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ real(ki), dimension(4) :: temp10,temp11
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a3pC0i_rarg(s1,s2,s3,m1,m2,m3,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2(j,1)) then
+ !
+ truc1 = resultat2(j,1,:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj) !returns real array!
+ resultat2(j,1,:) = truc1
+ deja_calcule2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b_real(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_np2_rarg(1) = (- temp1(1))/sumb_real
+ res_3pC0i_np2_rarg(2) = (- temp1(2))/sumb_real
+ res_3pC0i_np2_rarg(3) = (temp0(1) - temp1(3))/sumb_real
+ res_3pC0i_np2_rarg(4) = (temp0(2) - temp1(4))/sumb_real
+ res_3pC0i_np2_rarg = mult_div(1._ki,res_3pC0i_np2_rarg)/2._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule_np2(1)) then
+ !
+ temp10 = resultat_np2(1,:)
+ !
+ else
+ !
+ temp10 = a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,0,0,0)
+ resultat_np2(1,:) = temp10
+ deja_calcule_np2(1) = .true.
+ !
+ end if
+ !
+ temp3 = b_real(par3)*temp10
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2(j,1)) then
+ !
+ truc1 = resultat2(j,1,:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj) !returns real array!
+ resultat2(j,1,:) = truc1
+ deja_calcule2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs_real(j,par3)*truc1
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule2(j,par_plus(3))) then
+ !
+ truc2 = resultat2(j,par_plus(3),:)
+ !
+ else
+ !
+ truc2 = f2p_ra(s_mat_p_loc,b_pro_mj,par3) !returns real array!
+ resultat2(j,par_plus(3),:) = truc2
+ deja_calcule2(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + b_real(j)*truc2
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ temp1 = mult_div(2._ki/3._ki,temp1)/3._ki
+ temp2 = mult_div(2._ki/3._ki,temp2)/3._ki
+ res_3pC0i_np2_rarg(1) = (temp3(1) + temp1(1) - temp2(1))/sumb_real
+ res_3pC0i_np2_rarg(2) = (temp3(2) + temp1(2) - temp2(2))/sumb_real
+ res_3pC0i_np2_rarg(3) = (temp3(3) + temp1(3) - temp2(3))/sumb_real
+ res_3pC0i_np2_rarg(4) = (temp3(4) + temp1(4) - temp2(4))/sumb_real
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ temp0 = a3pC0i_rarg(s1,s2,s3,m1,m2,m3,0,par2,par3)
+ !
+ if (deja_calcule_np2(par_plus(2))) then
+ !
+ temp10 = resultat_np2(par_plus(2),:)
+ !
+ else
+ !
+ temp10 = a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,0,0,par2)
+ resultat_np2(par_plus(2),:) = temp10
+ deja_calcule_np2(par_plus(2)) = .true.
+ !
+ end if
+ !
+ !
+ if (deja_calcule_np2(par_plus(3))) then
+ !
+ temp11 = resultat_np2(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a3pC0i_np2_rarg(s1,s2,s3,m1,m2,m3,0,0,par3)
+ resultat_np2(par_plus(3),:) = temp11
+ deja_calcule_np2(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp3 = b_real(par3)*temp10 + b_real(par2)*temp11
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ if (deja_calcule22(j,par_plus(2),par_plus(3))) then
+ !
+ truc1 = resultat22(j,par_plus(2),par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj,par2,par3) !returns real array!
+ resultat22(j,par_plus(2),par_plus(3),:) = truc1
+ deja_calcule22(j,par_plus(2),par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b_real(j)*truc1
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_np2_rarg(1) = (temp3(1) - temp1(1))/sumb_real
+ res_3pC0i_np2_rarg(2) = (temp3(2) - temp1(2))/sumb_real
+ res_3pC0i_np2_rarg(3) = (temp0(1) + temp3(3) - temp1(3))/sumb_real
+ res_3pC0i_np2_rarg(4) = (temp0(2) + temp3(4) - temp1(4))/sumb_real
+ res_3pC0i_np2_rarg = mult_div(1._ki/2._ki,res_3pC0i_np2_rarg)/4._ki
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'Error in f3p_finite:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'rank 3 6-dim 3-point function should not be needed'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a3pC0i_np2_rarg
+ !
+ recursive function a3pC0i_np2_carg(s1,s2,s3,m1,m2,m3,par1,par2,par3) result(res_3pC0i_np2_carg)
+ !
+ implicit none
+ !
+ real(ki), intent (in) :: s1,s2,s3
+ complex(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ complex(ki), dimension(2) :: res_3pC0i_np2_carg
+ !
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(3) :: par_loc,par_plus
+ complex(ki), dimension(2) :: truc1_c, truc2_c
+ complex(ki) :: temp0
+ complex(ki), dimension(2) :: temp1, temp2, temp3
+ complex(ki), dimension(2) :: temp10, temp11
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule_c(1)) then
+ !
+ temp0 = resultat_c(1,1)
+ !
+ else
+ !
+ temp0 = a3pC0i_carg(s1,s2,s3,m1,m2,m3,0,0,0)
+ resultat_c(1,1) = temp0
+ deja_calcule_c(1) = .true.
+ !
+ end if
+ !
+ temp1(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2_c(j,1)) then
+ !
+ truc1_c = resultat2_c(j,1,:)
+ !
+ else
+ !
+ truc1_c = f2p(s_mat_p_loc,b_pro_mj) !!! returns complex array!
+ resultat2_c(j,1,:) = truc1_c
+ deja_calcule2_c(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b_complex(j)*truc1_c
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_np2_carg(1) = (- temp1(1))/sumb_complex
+ res_3pC0i_np2_carg(2) = (temp0 - temp1(2))/sumb_complex
+ res_3pC0i_np2_carg = mult_div(1._ki,res_3pC0i_np2_carg)/2._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule_np2_c(1)) then
+ !
+ temp10 = resultat_np2_c(1,:)
+ !
+ else
+ !
+ temp10 = a3pC0i_np2_carg(s1,s2,s3,m1,m2,m3,0,0,0)
+ resultat_np2_c(1,:) = temp10
+ deja_calcule_np2_c(1) = .true.
+ !
+ end if
+ !
+ temp3 = b_complex(par3)*temp10
+ temp1(:) = czero
+ temp2(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2_c(j,1)) then
+ !
+ truc1_c = resultat2_c(j,1,:)
+ !
+ else
+ !
+ truc1_c = f2p(s_mat_p_loc,b_pro_mj) !!! returns complex array!
+ resultat2_c(j,1,:) = truc1_c
+ deja_calcule2_c(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs_complex(j,par3)*truc1_c
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule2_c(j,par_plus(3))) then
+ !
+ truc2_c = resultat2_c(j,par_plus(3),:)
+ !
+ else
+ !
+ truc2_c = f2p(s_mat_p_loc,b_pro_mj,par3) !!! returns complex array!
+ resultat2_c(j,par_plus(3),:) = truc2_c
+ deja_calcule2_c(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + b_complex(j)*truc2_c
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ temp1 = mult_div(2._ki/3._ki,temp1)/3._ki
+ temp2 = mult_div(2._ki/3._ki,temp2)/3._ki
+ res_3pC0i_np2_carg(1) = (temp3(1) + temp1(1) - temp2(1))/sumb_complex
+ res_3pC0i_np2_carg(2) = (temp3(2) + temp1(2) - temp2(2))/sumb_complex
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ temp0 = a3pC0i_carg(s1,s2,s3,m1,m2,m3,0,par2,par3)
+ !
+ if (deja_calcule_np2_c(par_plus(2))) then
+ !
+ temp10 = resultat_np2_c(par_plus(2),:)
+ !
+ else
+ !
+ temp10 = a3pC0i_np2_carg(s1,s2,s3,m1,m2,m3,0,0,par2)
+ resultat_np2_c(par_plus(2),:) = temp10
+ deja_calcule_np2_c(par_plus(2)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule_np2_c(par_plus(3))) then
+ !
+ temp11 = resultat_np2_c(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a3pC0i_np2_carg(s1,s2,s3,m1,m2,m3,0,0,par3)
+ resultat_np2_c(par_plus(3),:) = temp11
+ deja_calcule_np2_c(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp3 = b_complex(par3)*temp10 + b_complex(par2)*temp11
+ temp1(:) = czero
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ if (deja_calcule22_c(j,par_plus(2),par_plus(3))) then
+ !
+ truc1_c = resultat22_c(j,par_plus(2),par_plus(3),:)
+ !
+ else
+ !
+ truc1_c = f2p(s_mat_p_loc,b_pro_mj,par2,par3) !!!returns complex array
+ resultat22_c(j,par_plus(2),par_plus(3),:) = truc1_c
+ deja_calcule22_c(j,par_plus(2),par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b_complex(j)*truc1_c
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3pC0i_np2_carg(1) = (temp3(1) - temp1(1))/sumb_complex
+ res_3pC0i_np2_carg(2) = (temp0 + temp3(2) - temp1(2))/sumb_complex
+ res_3pC0i_np2_carg = mult_div(1._ki/2._ki,res_3pC0i_np2_carg)/4._ki
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'Error in f3p_finite:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'rank 3 6-dim 3-point function should not be needed'
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a3pC0i_np2_carg
+ !
+ !****f* src/integral/three_point/function_3pC0i/C0
+ ! NAME
+ !
+ ! Function C0
+ !
+ ! USAGE
+ !
+ ! complex = C0(s1,s2,s3,m1,m2,m3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes finite scalar three point functions
+ ! with internal masses in 4 dimensions
+ !
+ ! INPUTS
+ !
+ ! * s1 -- a real/complex (type ki), p1^2
+ ! * s2 -- a real/complex (type ki), p2^2
+ ! * s3 -- a real/complex (type ki), p3^2
+ ! * m1 -- a real/complex (type ki), the first internal mass squared
+ ! * m2 -- a real/complex (type ki), the second internal mass squared
+ ! * m3 -- a real/complex (type ki), the third internal mass squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ !
+ !*****
+ function C0_rarg(s1,s2,s3,m1sq,m2sq,m3sq)
+ implicit none
+ !
+ ! s1,s2,s3 = SQUARED external momenta
+ ! m1sq,m2sq,m3sq = SQUARED internal masses
+ real(ki), intent(in) :: s1,s2,s3,m1sq,m2sq,m3sq
+ real(ki) :: s1r,s2r,s3r
+ ! real(ki) :: del
+ complex(ki) :: C0_rarg
+ complex(ki) :: c0_golem
+ ! del = epsilon(1._ki)
+ !
+ s1r = s1
+ s2r = s2
+ s3r = s3
+ !
+! if (equal_real(s1r,zero) ) s1r = 0._ki
+! if (equal_real(s2r,zero) ) s2r = 0._ki
+! if (equal_real(s3r,zero) ) s3r = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ c0_golem = i3p3m_3mi()
+ !
+ C0_rarg=c0_golem
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ C0_rarg = czero
+ !
+ end if
+ !
+ end function C0_rarg
+ !
+ function C0_carg(s1,s2,s3,m1sq,m2sq,m3sq)
+ implicit none
+ !
+ ! s1,s2,s3 = SQUARED external momenta
+ ! m1sq,m2sq,m3sq = SQUARED internal complex masses
+ real(ki), intent(in) :: s1,s2,s3
+ complex(ki), intent(in) :: m1sq,m2sq,m3sq
+ complex(ki_avh) :: cp1,cp2,cp3,cm1,cm2,cm3
+ real(ki) :: s1r,s2r,s3r
+ ! real(ki) :: del
+ complex(ki) :: C0_carg
+ complex(ki) :: c0_golem
+ !integer :: i,j,k
+ ! del = epsilon(1._ki)
+ !
+ s1r = s1
+ s2r = s2
+ s3r = s3
+ !
+! if (equal_real(s1r,zero) ) s1r = 0._ki
+! if (equal_real(s2r,zero) ) s2r = 0._ki
+! if (equal_real(s3r,zero) ) s3r = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ !
+ cp1 = cmplx(s1r,0._ki_avh,kind=ki_avh)
+ cp2 = cmplx(s2r,0._ki_avh,kind=ki_avh)
+ cp3 = cmplx(s3r,0._ki_avh,kind=ki_avh)
+ !
+ cm1 = cmplx(m1sq,kind=ki_avh)
+ cm2 = cmplx(m2sq,kind=ki_avh)
+ cm3 = cmplx(m3sq,kind=ki_avh)
+ !
+ !
+ ! we use now the golem implementation of C0 (jpg)
+ c0_golem = i3p3m_3mi()
+ !
+ C0_carg=c0_golem
+ !
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ C0_carg = czero
+ !
+ end if
+ !
+ end function C0_carg
+ !
+ ! *************************************************
+ !added by jpg l2 30/04/2011
+ subroutine compute_deter(s13,s12,s23,s11,s22,s33)
+ !
+ complex(ki), intent(in) :: s13,s12,s23,s11,s22,s33
+ !
+ complex(ki) :: temp
+ !
+ det_s = s11*(s22*s33-s23**2)-s12*(s12*s33-s13*s23)+s13*(s12*s23-s13*s22)
+ !
+ num_b1 = s22*s33-s12*s33-s23**2+s13*s23+s12*s23-s13*s22
+ num_b2 = -s12*s33+s11*s33+s13*s23-s11*s23-s13**2+s12*s13
+ num_b3 = s12*s23-s11*s23-s13*s22+s11*s22+s12*s13-s12**2
+ num_sumb = s22*s33-2*s12*s33+s11*s33-s23**2+2._ki*s13*s23+2._ki*s12*s23-2._ki&
+ *s11*s23-2._ki*s13*s22+s11*s22-s13**2+2._ki*s12*s13-s12**2
+ !
+ temp = (-s33+2._ki*s13-s11)*(-s33+2._ki*s23-s22)-(-s33+s23+s13-s12)**2
+ det_g = real(temp,ki) ! det(G) is real by construction
+ !write(*,*) 'test compute_deter :',s13,s12,s23,s11,s22,s33
+ !
+ end subroutine compute_deter
+ !
+ function i3p3m_3mi()
+ !
+ complex(ki) :: i3p3m_3mi
+ real(ki), dimension(3) :: s
+ real(ki) :: s_alpha
+ real(ki) :: si1,si2,si3
+ !
+ si1 = sign(un,real(num_b1,ki))
+ si2 = sign(un,real(num_b2,ki))
+ si3 = sign(un,real(num_b3,ki))
+ !
+ s(1) = si1
+ s(2) = si2
+ s(3) = -si3
+ !write(*,*) 'differents s :',s(1),s(2),s(3)
+ !i3p3m_3mi = -(j3p3m_3mi(real(g_glob(1,1),ki),g_glob(1,2),g_glob(1,3),1,s(1))&
+ !&+j3p3m_3mi(real(g_glob(2,1),ki),g_glob(2,2),g_glob(2,3),2,s(2))&
+ !&+j3p3m_3mi(real(g_glob(3,1),ki),g_glob(3,2),g_glob(3,3),3,s(3)) )
+ i3p3m_3mi = -(j3p3m_3mi_p(real(g_glob(1,1),ki),g_glob(1,2),g_glob(1,3),1,s(1))&
+ &+j3p3m_3mi_p(real(g_glob(2,1),ki),g_glob(2,2),g_glob(2,3),2,s(2))&
+ &+j3p3m_3mi_p(real(g_glob(3,1),ki),g_glob(3,2),g_glob(3,3),3,s(3)) )
+ !write(*,*) 'test i3p3m_3mi :',i3p3m_3mi
+ !
+ end function i3p3m_3mi
+ !
+ function j3p3m_3mi(g2,g1,g0,i,s)
+ !
+ real(ki), intent(in) :: g2
+ complex(ki), intent(in) :: g1,g0
+ integer, intent(in) :: i
+ real(ki), intent(in) :: s
+ complex(ki) :: j3p3m_3mi
+ !
+ complex(ki) :: y0,num_b,coeff
+ complex(ki) :: part
+ real(ki) :: sb
+ !
+ !write(*,*) 'test j3p3m_3mi(',g2,g1,g0,i,s
+
+ grand_glob = 1.e+13_ki
+ !
+ select case(i)
+ !
+ case(1)
+ !
+ num_b = num_b1
+ !
+ case(2)
+ !
+ num_b = num_b2
+ !
+ case(3)
+ !
+ num_b = num_b3
+ !
+ end select
+ !
+ sb = sign(un,real(num_b,ki))
+ num_b = sb*num_b
+ !
+ ! we can have the case where g2=g1=0, in this case, the b_i corresponding is zero
+ !
+ if (tab_test_glob(i)) then
+ !
+ j3p3m_3mi = 0._ki
+ !
+ else
+ !
+ if (det_g < 0._ki) then
+ !
+ ! case where g2=0, this case appear only for det(g) < 0
+ !
+ if ( equal_real(sign(un,real(s*g1,ki)),-1._ki) ) then
+ !
+ !write(*,*) 'test j3p3m_3mi 1 :',g2,g1,g0
+ y0 = 2._ki*(g0+det_s/2._ki/det_g)/(-g1+s*num_b/sqrt(-det_g))
+ part = int_log(g2,g1,g0,y0,-det_s/det_g/2._ki-i_*delta_glob)
+ !
+ else
+ !
+ if (abs(g2) < 1.e-10_ki) then
+ !
+ y0 = -sign(un,real(g1,ki))*sign(un,g2)*grand_glob
+ !write(*,*) 'test j3p3m_3mi: call int_log_m',g2,g1,g0,y0,num_b/sqrt(-det_g),-det_s/det_g/2._ki-i_*delta_glob
+ part = int_log_m(g2,g1,g0,y0,num_b/sqrt(-det_g),-det_s/det_g/2._ki-i_*delta_glob)
+ !
+ else
+ !
+ !write(*,*) 'test j3p3m_3mi 3 :',g2,g1,g0
+ y0 = -g1/(2._ki*g2)-s*num_b/(2._ki*g2*sqrt(-det_g))
+ part = int_log(g2,g1,g0,y0,-det_s/det_g/2._ki-i_*delta_glob)
+ !
+ end if
+ !
+ end if
+ !
+ coeff = 1._ki/(2._ki*sqrt(-det_g))
+ !
+ else if (det_g > 0._ki) then
+ !
+ y0 = -g1/(2._ki*g2)-i_*s*num_b/(2._ki*abs(g2)*sqrt(det_g))
+ part = int_log(g2,g1,g0,y0,-det_s/det_g/2._ki-i_*delta_glob)
+ coeff = i_*sign(un,g2)/(2._ki*sqrt(det_g))
+ !write(*,*) 'test j3p3m_3mi 4 :',g2,g1,g0,sb,s,sign(un,g2)
+ !
+ end if
+ !
+ j3p3m_3mi = 2._ki*s*sb*coeff*part
+ !write(*,*) 'test j3p3m_3mi :',j3p3m_3mi
+ !write(*,*) 'test j3p3m_3mi :',y0,j3p3m_3mi,2._ki*s*sb*coeff,part
+ !write(*,*) 'test j3p3m_3mi detail :',2._ki*s*sb*coeff,det_g
+ !
+ end if
+ !
+ end function j3p3m_3mi
+ !
+ function j3p3m_3mi_p(g2,g1,g0,i,s)
+ !
+ real(ki), intent(in) :: g2
+ complex(ki), intent(in) :: g1,g0
+ integer, intent(in) :: i
+ real(ki), intent(in) :: s
+ complex(ki) :: j3p3m_3mi_p
+ !
+ complex(ki) :: y0,num_b,coeff
+ complex(ki) :: part
+ real(ki) :: sb
+ !
+ grand_glob = 1.e+13_ki
+ !
+ select case(i)
+ !
+ case(1)
+ !
+ num_b = num_b1
+ !
+ case(2)
+ !
+ num_b = num_b2
+ !
+ case(3)
+ !
+ num_b = num_b3
+ !
+ end select
+ !
+ sb = sign(un,real(num_b,ki))
+ num_b = sb*num_b
+ !
+ ! we can have the case where g2=g1=0, in this case, the b_i corresponding is zero
+ !
+ if (tab_test_glob(i)) then
+ !
+ j3p3m_3mi_p = 0._ki
+ !
+ else
+ !
+ if (det_g < 0._ki) then
+ !
+ !
+ !
+ !if ( (abs(g2) < 1.e-10_ki) .and. .not.(of_order_of(g2,abs(g1))) ) then
+ !if ( ( (abs(g2) < 1.e-10_ki) .and. (abs(g1) > 1.e-10_ki) ) &
+ !& .and. (s*sign(un,real(g1,ki)) > 0._ki) ) then
+ if ( (abs(g2) < 1.e-10_ki) .and. (abs(g1) > 1.e-10_ki) ) then
+ !
+ if (sign(un,real(s*g1,ki)) > 0._ki) then
+ !
+ !y0 = -sign(un,real(g1,ki))*sign(un,g2)*grand_glob
+ y0 = -g1/abs(g1)*sign(un,g2)*grand_glob
+ !write(*,*) 'test j3p3m_3mi 2 :',g2,g1,g0,y0
+ part = int_log_m(g2,g1,g0,y0,num_b/sqrt(-det_g),-det_s/det_g/2._ki-i_*delta_glob)
+ !write(*,*) 'test j3p3m_3mi 2 -- num_b ',num_b,' sqrt(-det_g) ',sqrt(-det_g)&
+!&,' -dets/detg/2-i_*del ',-det_s/det_g/2._ki-i_*delta_glob
+ !write(*,*) 'test j3p3m_3mi 2 part ',part
+ !
+ else
+ !
+ !write(*,*) 'test j3p3m_3mi 2A :',g2,g1,g0,y0
+ y0 = 2._ki*(g0+det_s/2._ki/det_g)/(-g1+s*num_b/sqrt(-det_g))
+ !part = int_log(g2,g1,g0,y0,-det_s/det_g/2._ki-i_*delta_glob)
+ part = int_log_m(g2,g1,g0,y0,num_b/sqrt(-det_g),-det_s/det_g/2._ki-i_*delta_glob)
+ !
+ end if
+ else
+ !
+ !write(*,*) 'test j3p3m_3mi 3 :',g2,g1,g0
+ !y0 = sign(un,g2)*(-g1/2._ki-s*num_b/(2._ki*sqrt(-det_g)))
+ !y0 = -g1/(2._ki*g2)-s*num_b/(2._ki*g2*sqrt(-det_g))
+ y0 = sign(un,g2)*(-g1/2._ki-s*num_b/(2._ki*sqrt(-det_g)))
+ part = int_log_p(g2,g1,g0,y0,-det_s/det_g/2._ki-i_*delta_glob)
+ !write(*,*) 'test j3p3m_3mi 3 -- y0 ',y0,' num_b ',num_b&
+!&,' -dets/detg/2-i_*del ',-det_s/det_g/2._ki-i_*delta_glob
+ !write(*,*) 'test j3p3m_3mi 3 part ',part
+ !
+ end if
+ !
+ coeff = 1._ki/(2._ki*sqrt(-det_g))
+ !
+ else if (det_g > 0._ki) then
+ !
+ !y0 = -g1/(2._ki*g2)-i_*s*num_b/(2._ki*abs(g2)*sqrt(det_g))
+ y0 = -g1*sign(un,g2)/2._ki-i_*s*num_b/(2._ki*sqrt(det_g))
+ part = int_log_p(g2,g1,g0,y0,-det_s/det_g/2._ki-i_*delta_glob)
+ coeff = i_*sign(un,g2)/(2._ki*sqrt(det_g))
+ !write(*,*) 'test j3p3m_3mi_p 4 :',g2,g1,g0,sb,s,sign(un,g2)
+ !
+ end if
+ !
+ j3p3m_3mi_p = 2._ki*s*sb*coeff*part
+ !write(*,*) 'test j3p3m_3mi_p :',j3p3m_3mi_p
+ !write(*,*) 'test j3p3m_3mi detail :',2._ki*s*sb*coeff,det_g
+ !
+ end if
+ !
+ end function j3p3m_3mi_p
+ !
+ ! compute the integral
+ ! \int^1_0 ds (ln(a*s^2 + b*s + c - i*\lambda)-ln(arg_c))/(s-z_1)
+ ! with arg_c = (a*z_1^2 + b*z_1 + c - i*\lambda)
+ ! analytically. In the case of complex masses, b and c become complex
+ ! but Im(b)*s+Im(c) are of the type (l1-l2)*s+l2 where l1,l2 are real
+ ! and have the same sign, so (l1-l2)*s+l2 has always the same sign when
+ ! s runs between 0 and 1 : the sign of l1 (or l2)
+ ! case where the wrong z1 (the one which goes to infinity when alpha_i -->0 )
+ !
+ !
+ function int_log_m(a,b,c,z1,discri,arg_c)
+ !
+ real(ki), intent(in) :: a
+ complex(ki), intent(in) :: b,c
+ complex(ki), intent(in) :: z1,discri,arg_c
+ complex(ki) :: int_log_m
+ !
+ complex(ki) :: s_plus,s_moins
+ complex(ki) :: arg_sqrt
+ real(ki) :: small
+ real(ki) :: epsilon_gv,delta_gv
+ complex(ki) :: rest,eta_part,delta
+ complex(ki) :: eta_temp
+ real(ki) :: z1_r,s_r_plus,s_r_moins,b_r,c_r
+ real(ki) :: grand
+ real(ki) :: eps_b
+ real(ki) :: arg1_r,arg2_r,arg3_r,arg4_r
+ complex(ki) :: arg1,arg2,arg3,arg4,argscale
+ complex(ki) :: part1,part2,part
+ !
+ grand = 1.e+13_ki
+ arg_sqrt = b*b - 4._ki*a*c
+ !write(*,*) 'test int_log_m : abc ',a,b,c," z1 ",z1," d ",discri," arg_c " ,arg_c," arg_sqrt",&
+!&arg_sqrt," re arg sqrt ",real(arg_sqrt,ki)
+ ! on suppose qu'il y a une petite patie imaginaire
+ ! negative : c --> c - i lambda
+ small = delta_glob
+ !delta_glob = 1.e-12_ki
+ !small = delta_glob*1.e+0_ki
+ !write(*,*) 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+ !write(*,*) 'test int_log_m :',a,b,c,z1,arg_c
+ !faire le cas ou a =0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ b_r = real(b,ki)
+ eps_b = sign(un,b_r)
+ !
+ if (equal_real(aimag(b),zero) .and. equal_real(aimag(c),zero) ) then
+ !
+ c_r = real(c,ki)
+ !
+ if ( equal_real(aimag(z1),zero) ) then ! z1 is real, no eta function in this case
+ !
+ z1_r = real(z1,ki)
+ !
+ if (real(arg_sqrt,ki) > zero) then ! positive discriminant
+ !
+ delta = sqrt(arg_sqrt)
+ !
+ if (b_r >= zero) then
+ !
+ s_plus = -2._ki*c/(b+delta)
+ !
+ if (abs(a) <= b_r/(grand+sign(un,a)*c_r/b_r) ) then
+ !
+ s_moins = -sign(un,a)*grand
+ !
+ else
+ !
+ s_moins = (-b - delta)/(2._ki*a)
+ !
+ end if
+ !
+ if (of_order_of(abs(z1_r),grand_glob)) then
+ !
+ arg1_r = (real(discri,ki)+b)/(real(discri,ki)+delta)
+ arg2_r = (real(discri,ki)+(b+2._ki*a))/(real(discri,ki)+delta)
+ arg3_r = (real(discri,ki)+(b+2._ki*a))/(real(discri,ki)+b)
+ arg4_r = det_s/det_g/(real(discri,ki)+delta) ! z1-y2
+ part1 = zdilog(arg1_r,sign(un,z1_r)) - zdilog(arg2_r,sign(un,z1_r-1._ki))
+ part2 = -zdilog(arg4_r/z1_r,-sign(un,z1_r)) + zdilog(arg4_r/(z1_r-1._ki),-sign(un,z1_r-1._ki))&
+ & + 1._ki/2._ki*q(1,1._ki/z1_r,-un)*(& !signe de la partie imaginaire arbitraire
+ &z_log((1._ki-z1_r)/arg4_r,-sign(un,1._ki-z1_r)) + z_log(-z1_r/arg4_r,sign(un,z1_r)) )/z1_r
+ rest = part1 + part2
+ !
+ else
+ !
+ s_r_plus = real(s_plus,ki)
+ s_r_moins = real(s_moins,ki)
+ !
+ rest = zdilog(z1_r/(z1_r-s_r_plus),sign(un,z1_r)) &
+ & - zdilog((z1_r-1._ki)/(z1_r-s_r_plus),sign(un,z1_r-1._ki)) &
+ & + zdilog(z1_r/(z1_r-s_r_moins),-sign(un,z1_r)) &
+ & - zdilog((z1_r-1._ki)/(z1_r-s_r_moins),-sign(un,z1_r-1._ki))
+ !
+ end if
+ !
+ else if (b_r < zero) then
+ !
+ s_moins = -2._ki*c/(b-delta)
+ !
+ if (abs(a) <= -b_r/(grand-sign(un,a)*c_r/b_r) ) then
+ !
+ s_plus = sign(un,a)*grand
+ !
+ else
+ !
+ s_plus = (-b + delta)/(2._ki*a)
+ !
+ end if
+ !
+ if (of_order_of(abs(z1_r),grand_glob)) then
+ !
+ arg1_r = (real(discri,ki)-b)/(real(discri,ki)+delta)
+ arg2_r = (real(discri,ki)-(b+2._ki*a))/(real(discri,ki)+delta)
+ arg3_r = (real(discri,ki)-(b+2._ki*a))/(real(discri,ki)-b)
+ arg4_r = -det_s/det_g/(real(discri,ki)+delta) ! z2-y1
+ part1 = -zdilog(arg4_r/z1_r,sign(un,z1_r)) + zdilog(arg4_r/(z1_r-1._ki),sign(un,z1_r-1._ki))&
+ & + 1._ki/2._ki*q(1,1._ki/z1_r,-un)*(& !signe de la partie imaginaire arbitraire
+ &z_log((1._ki-z1_r)/arg4_r,sign(un,1._ki-z1_r)) + z_log(-z1_r/arg4_r,-sign(un,z1_r)) )/z1_r
+ part2 = zdilog(arg1_r,-sign(un,z1_r)) - zdilog(arg2_r,-sign(un,z1_r-1._ki))
+ !write(*,*) 'test int_log_m 2 :',arg1_r,arg2_r,arg3_r,arg4_r
+ !write(*,*) 'test int_log_m 2p :',part1,part2
+ rest = part1 + part2
+ !
+ else
+ !
+ s_r_plus = real(s_plus,ki)
+ s_r_moins = real(s_moins,ki)
+ !
+ rest = zdilog(z1_r/(z1_r-s_r_plus),sign(un,z1_r)) &
+ & - zdilog((z1_r-1._ki)/(z1_r-s_r_plus),sign(un,z1_r-1._ki)) &
+ & + zdilog(z1_r/(z1_r-s_r_moins),-sign(un,z1_r)) &
+ & - zdilog((z1_r-1._ki)/(z1_r-s_r_moins),-sign(un,z1_r-1._ki))
+ !
+ end if
+ !
+ end if
+ !
+ int_log_m = rest
+ ! because there is no eta part, no argscale is needed
+ !
+ else
+ !error
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in int_log_m:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the discriminant must be positive and it is %z0'
+ tab_erreur_par(2)%arg_real = arg_sqrt
+ call catch_exception(0)
+ !
+ end if
+ !
+ else ! z1 is complex, s_plus and s_moins are still complex conjugate
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in int_log_m:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the z1 must be real and it is %z0'
+ tab_erreur_par(2)%arg_comp = z1
+ call catch_exception(0)
+ !
+ end if
+ !
+ else ! b,c and z1 are complexs
+ !
+ delta = sqrt(arg_sqrt)
+ !eps_b = real(exp(eta(b,b)/2._ki),ki)
+ ! treatement of the case where a --> 0
+ ! in the case whrere b is purely imaginary, since fortran95 used signed
+ ! zero, In Fortran95 we Trust.........
+ if (b_r == 0._ki) then
+ eps_b = 1._ki
+ else
+ eps_b = sign(un,b_r)
+ end if
+ !
+ if ( equal_real(eps_b,un) ) then
+ !
+ s_plus = -2._ki*c/(b+delta)
+ !
+ if (abs(a) <= abs(-b)/grand) then
+ !
+ s_moins = -grand*sign(un,a)*b
+ !
+ else
+ !
+ s_moins = (-b - delta)/(2._ki*a)
+ !
+ end if
+ !
+ if (of_order_of(abs(z1),grand_glob)) then
+ !
+ arg1 = (discri+b)/(discri+delta)
+ arg2 = (discri+(b+2._ki*a))/(discri+delta)
+ arg3 = (discri+(b+2._ki*a))/(discri+b)
+ arg4 = det_s/det_g/(discri+delta) ! z1-y2
+ argscale = arg3
+ part1 = cdilog(arg1) - cdilog(arg2) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(arg1) &
+ &- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log(arg2)
+ part2 = -cdilog(arg4/z1) + cdilog(arg4/(z1-1._ki))&
+ & + 1._ki/2._ki*q(1,1._ki/z1,-un)*(& !signe de la partie imaginaire arbitraire
+ &log((1._ki-z1)/arg4) + log(-z1/arg4) )/z1 - eta(-s_moins,1._ki/(z1-s_moins))* &
+ &log(arg3)
+ rest = part1 + part2
+ !
+ else
+ !
+ argscale = (z1-1._ki)/z1
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ & + eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ & - eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ & + cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ & + eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ !
+ end if
+ !
+ else if ( equal_real(eps_b,-un) ) then
+ !
+ s_moins = -2._ki*c/(b-delta)
+ !
+ if (abs(a) <= abs(-b)/grand) then
+ !
+ s_plus = -grand*sign(un,a)*b
+ !
+ else
+ !
+ s_plus = (-b + delta)/(2._ki*a)
+ !
+ end if
+ !
+ if (of_order_of(abs(z1),grand_glob)) then
+ !
+ arg1 = (discri-b)/(discri+delta)
+ arg2 = (discri-(b+2._ki*a))/(discri+delta)
+ arg3 = (discri-(b+2._ki*a))/(discri-b)
+ arg4 = -det_s/det_g/(discri+delta) ! z1-y2
+ argscale = arg3
+ part1 = -cdilog(arg4/z1) + cdilog(arg4/(z1-1._ki))&
+ & + 1._ki/2._ki*q(1,1._ki/z1,-un)*(& !signe de la partie imaginaire arbitraire
+ &log((1._ki-z1)/arg4) + log(-z1/arg4) )/z1 - eta(-s_plus,1._ki/(z1-s_plus))* &
+ &log(arg3)
+ part2 = cdilog(arg1) - cdilog(arg2) &
+ & + eta(-s_moins,1._ki/(z1-s_moins))*log(arg1) &
+ & - eta(1._ki-s_moins,1._ki/(z1-s_moins))*log(arg2)
+ rest = part1 + part2
+ !
+ else
+ !
+ argscale = (z1-1._ki)/z1
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ & + eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ & - eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ & + cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ & + eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ & - eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ !
+ end if
+ !
+ end if
+ !
+ epsilon_gv = un
+ delta_gv = -sign(un,aimag(arg_c))
+ !
+ eta_part = eta(-s_plus,-s_moins)-eta(z1-s_plus,z1-s_moins) &
+ & -eta(sign(un,a)-i_*small*epsilon_gv,1._ki/(sign(un,a)-i_*small*delta_gv))
+ !
+ eta_part = eta_part*log(argscale)
+ !
+ !rest = part
+ !!
+ int_log_m = rest + eta_part
+ !
+ end if
+ !
+ end function int_log_m
+ !
+ !
+ ! compute the integral
+ ! \int^1_0 ds (ln(a*s^2 + b*s + c - i*\lambda)-ln(arg_c))/(s-z_1)
+ ! with arg_c = (a*z_1^2 + b*z_1 + c - i*\lambda)
+ ! analytically. In the case of complex masses, b and c become complex
+ ! but Im(b)*s+Im(c) are of the type (l1-l2)*s+l2 where l1,l2 are real
+ ! and have the same sign, so (l1-l2)*s+l2 has always the same sign when
+ ! s runs between 0 and 1 : the sign of l1 (or l2)
+ !
+ !
+ function int_log(a,b,c,z1,arg_c)
+ !
+ real(ki), intent(in) :: a
+ complex(ki), intent(in) :: b,c
+ complex(ki), intent(in) :: z1,arg_c
+ complex(ki) :: int_log
+ !
+ complex(ki) :: s_plus,s_moins
+ complex(ki) :: arg_sqrt
+ real(ki) :: small
+ real(ki) :: epsilon_gv,delta_gv
+ complex(ki) :: rest,eta_part,delta
+ complex(ki) :: eta_temp
+ real(ki) :: z1_r,s_r_plus,s_r_moins,b_r,c_r
+ real(ki) :: grand
+ real(ki) :: eps_b
+ !
+ grand = 1.e+13_ki
+ arg_sqrt = b*b - 4._ki*a*c
+ ! on suppose qu'il y a une petite patie imaginaire
+ ! negative : c --> c - i lambda
+ small = delta_glob
+ !delta_glob = 1.e-12_ki
+ !small = delta_glob*1.e+0_ki
+ !write(*,*) 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+ !write(*,*) 'test int_log :',a,b,c,z1,arg_c
+ !faire le cas ou a =0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ b_r = real(b,ki)
+ !
+ if (equal_real(aimag(b),zero) .and. equal_real(aimag(c),zero) ) then
+ !
+ !b_r = real(b,ki)
+ c_r = real(c,ki)
+ !
+ if ( equal_real(aimag(z1),zero) ) then ! z1 is real, no eta function in this case
+ !
+ z1_r = real(z1,ki)
+ !
+ if (real(arg_sqrt,ki) <= zero) then ! negative discriminant
+ !
+ delta = i_*sqrt(abs(arg_sqrt))*sign(un,a)
+ !
+ s_plus= (-b + delta)/(2._ki*a)
+ s_moins = (-b - delta)/(2._ki*a)
+ !
+ !write(*,*) 'test int_log 2 :',z1,s_plus,s_moins
+ int_log = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins))
+ !write(*,*) 'test int_log 2 :',int_log
+ !
+ else ! positive discriminant
+ !
+ ! careful treatement of the case where a --> 0, one root is -c/b,
+ ! the other goes to infinity but is frozen if greater than grand
+ ! The fact that one root is infinite does not disturb the
+ ! computation of dilog for this root appear at the denominator.
+ ! Obiouvsly, if a-->0, the discriminant is positif, so we always
+ ! ended to this case
+ delta = sqrt(arg_sqrt)
+ !
+ if (b_r >= zero) then
+ !
+ s_plus = -2._ki*c/(b+delta)
+ !
+ if (abs(a) <= b_r/(grand+sign(un,a)*c_r/b_r) ) then
+ !
+ s_moins = -sign(un,a)*grand
+ !
+ else
+ !
+ s_moins = (-b - delta)/(2._ki*a)
+ !
+ end if
+ !
+ else if (b_r < zero) then
+ !
+ s_moins = -2._ki*c/(b-delta)
+ !
+ if (abs(a) <= -b_r/(grand-sign(un,a)*c_r/b_r) ) then
+ !
+ s_plus = sign(un,a)*grand
+ !
+ else
+ !
+ s_plus = (-b + delta)/(2._ki*a)
+ !
+ end if
+ !
+ end if
+ !s_plus= (-b + delta)/(2._ki*a)
+ !s_moins = (-b - delta)/(2._ki*a)
+ s_r_plus = real(s_plus,ki)
+ s_r_moins = real(s_moins,ki)
+ !
+ !int_log = zdilog(z1/(z1-s_plus),1._ki) - zdilog((z1-1._ki)/(z1-s_plus),1._ki) &
+ !&+ zdilog(z1/(z1-s_moins),-1._ki) - zdilog((z1-1._ki)/(z1-s_moins),-1._ki)
+ int_log = zdilog(z1_r/(z1_r-s_r_plus),sign(un,z1_r)) - zdilog((z1_r-1._ki)/(z1_r-s_r_plus),sign(un,z1_r-1._ki)) &
+ &+ zdilog(z1_r/(z1_r-s_r_moins),-sign(un,z1_r)) - zdilog((z1_r-1._ki)/(z1_r-s_r_moins),-sign(un,z1_r-1._ki))
+ !
+ end if
+ !
+ else ! z1 is complex, s_plus and s_moins are still complex conjugate
+ !
+ epsilon_gv = un
+ delta_gv = -sign(un,aimag(arg_c))
+ !
+ if (real(arg_sqrt,ki) <= zero) then ! negative discriminant
+ !
+ delta = i_*sqrt(abs(arg_sqrt))*sign(un,a)
+ !
+ ! be careful that for the case where z1 has a real part which is -b/2/a
+ ! we have to keep a small real part
+ s_plus = (-b + delta)/(2._ki*a) + small
+ s_moins = (-b - delta)/(2._ki*a) - small
+ !s_plus = (-b + delta)/(2._ki*a)
+ !s_moins = (-b - delta)/(2._ki*a)
+ !
+ ! we treat explicitely the case where Re(z1) = -b/2/a
+ !
+ if (equal_real(real(z1,ki),real(-b/2._ki/a,ki))) then
+ if ( (sign(un,aimag(z1-s_plus)) > 0._ki) .and. (sign(un,aimag(z1-s_moins)) > 0._ki) ) then
+ eta_temp = -2._ki*i_*pi
+ else
+ eta_temp = 0._ki
+ end if
+ else
+ eta_temp = eta(z1-s_plus,z1-s_moins)
+ end if
+ !
+ ! s_plus and s_moins are complex conjugate, so eta(-s_plus,-s_moins) = 0
+ eta_part = -eta_temp &
+ & -eta(a-i_*small*epsilon_gv,1._ki/(a-i_*small*delta_gv))
+ !
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ &- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ &+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ !
+ else ! positive discriminant
+ !
+ delta = sqrt(arg_sqrt)
+ ! we need the small imaginary part for z1 is complex when
+ ! Re(z1) = -b/2/a
+ if (b_r >= zero) then
+ s_plus = -2._ki*c/(b+delta)
+ if (abs(a) <= b_r/(grand+sign(un,a)*c_r/b_r) ) then
+ s_moins = -sign(un,a)*grand
+ else
+ s_moins = (-b - delta)/(2._ki*a)
+ end if
+ else if (b_r < zero) then
+ s_moins = -2._ki*c/(b-delta)
+ if (abs(a) <= -b_r/(grand-sign(un,a)*c_r/b_r) ) then
+ s_plus = sign(un,a)*grand
+ else
+ s_plus = (-b + delta)/(2._ki*a)
+ end if
+ end if
+ s_plus = s_plus + i_*small
+ s_moins = s_moins - i_*small
+ !s_plus= (-b + delta)/(2._ki*a)+i_*small
+ !s_moins = (-b - delta)/(2._ki*a)-i_*small
+ !
+ ! we treat explicitely the case where Re(z1) = -b/2/a
+ !
+ !write(*,*) 'test equal :',equal_real(real(z1,ki),real(-b/2._ki/a,ki))
+ if (equal_real(real(z1,ki),real(-b/2._ki/a,ki))) then
+ if (sign(un,a) == sign(un,aimag(z1))) then
+ eta_temp = -2._ki*i_*pi*sign(un,a)
+ else
+ eta_temp = 0._ki
+ end if
+ else
+ eta_temp = eta(z1-s_plus,z1-s_moins)
+ end if
+ !
+ ! s_plus and s_moins are complex conjugate, so eta(-s_plus,-s_moins) = 0
+ eta_part = -eta_temp &
+ & -eta(a-i_*small*epsilon_gv,1._ki/(a-i_*small*delta_gv))
+ !
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ &- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ &+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ !
+ end if
+ !
+ eta_part = eta_part*log((z1-1._ki)/z1)
+ !
+ int_log = rest + eta_part
+ !
+ end if
+ !
+ else ! b,c and z1 are complexs
+ !
+ delta = sqrt(arg_sqrt)
+ !eps_b = real(exp(eta(b,b)/2._ki),ki)
+ ! treatement of the case where a --> 0
+ ! in the case whrere b is purely imaginary, since fortran95 used signed
+ ! zero, In Fortran95 we Trust.........
+ if (b_r == 0._ki) then
+ eps_b = 1._ki
+ else
+ eps_b = sign(un,b_r)
+ end if
+ !
+ if ( equal_real(eps_b,un) ) then
+ !
+ s_plus = -2._ki*c/(b+delta)
+ !
+ if (abs(a) <= abs(-b)/grand) then
+ !
+ s_moins = -grand*sign(un,a)*b
+ !
+ else
+ !
+ s_moins = (-b - delta)/(2._ki*a)
+ !
+ end if
+ !
+ else if ( equal_real(eps_b,-un) ) then
+ !
+ s_moins = -2._ki*c/(b-delta)
+ !
+ if (abs(a) <= abs(-b)/grand) then
+ !
+ s_plus = -grand*sign(un,a)*b
+ !
+ else
+ !
+ s_plus = (-b + delta)/(2._ki*a)
+ !
+ end if
+ !
+ end if
+ !
+ epsilon_gv = un
+ delta_gv = -sign(un,aimag(arg_c))
+ !
+ eta_part = eta(-s_plus,-s_moins)-eta(z1-s_plus,z1-s_moins) &
+ & -eta(a-i_*small*epsilon_gv,1._ki/(a-i_*small*delta_gv))
+ !
+ eta_part = eta_part*log((z1-1._ki)/z1)
+ !
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ &- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ &+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ !
+ int_log = rest + eta_part
+ !
+ end if
+ !
+ end function int_log
+ !
+ !
+ ! compute the integral
+ ! \int^1_0 ds (ln(a*s^2 + b*s + c - i*\lambda)-ln(arg_c))/(s-z_1)
+ ! with arg_c = (a*z_1^2 + b*z_1 + c - i*\lambda)
+ ! analytically. In the case of complex masses, b and c become complex
+ ! but Im(b)*s+Im(c) are of the type (l1-l2)*s+l2 where l1,l2 are real
+ ! and have the same sign, so (l1-l2)*s+l2 has always the same sign when
+ ! s runs between 0 and 1 : the sign of l1 (or l2)
+ !
+ ! everything is * by abs(a)
+ !
+ !
+ function int_log_p(a,b,c,z1,arg_c)
+ !
+ real(ki), intent(in) :: a
+ complex(ki), intent(in) :: b,c
+ complex(ki), intent(in) :: z1,arg_c
+ complex(ki) :: int_log_p
+ !
+ complex(ki) :: s_plus,s_moins
+ complex(ki) :: arg_sqrt
+ real(ki) :: small
+ real(ki) :: epsilon_gv,delta_gv
+ complex(ki) :: rest,eta_part,delta
+ complex(ki) :: eta_temp
+ real(ki) :: z1_r,s_r_plus,s_r_moins,b_r,c_r
+ real(ki) :: grand
+ real(ki) :: eps_b
+ real(ki) :: val_a,si_a
+ !
+ grand = 1.e+13_ki
+ arg_sqrt = b*b - 4._ki*a*c
+ ! on suppose qu'il y a une petite patie imaginaire
+ ! negative : c --> c - i lambda
+ small = delta_glob
+ !delta_glob = 1.e-12_ki
+ !small = delta_glob*1.e+0_ki
+ !write(*,*) 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+ !write(*,*) 'test int_log_p :',a,b,c,z1,arg_c,' and arg_sqrt ',arg_sqrt
+ !faire le cas ou a =0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ b_r = real(b,ki)
+ val_a = abs(a)
+ si_a = sign(un,a)
+ !
+ if (equal_real(aimag(b),zero) .and. equal_real(aimag(c),zero) ) then
+ !
+ c_r = real(c,ki)
+ !
+ if ( equal_real(aimag(z1),zero) ) then ! z1 is real, no eta function in this case
+ !
+ z1_r = real(z1,ki)
+ !
+! if (real(arg_sqrt,ki) <= zero) then ! negative discriminant
+ !write(6,*) "Warning: MR breaks, possibly. arg_sqrt ",arg_sqrt," re ",real(arg_sqrt,ki)," small ",small
+ if (real(arg_sqrt,ki) <= -small) then ! negative discriminant
+ !
+ delta = i_*sqrt(abs(arg_sqrt))*si_a
+ !
+ !s_plus= (-b + delta)/(2._ki*a)
+ !s_moins = (-b - delta)/(2._ki*a)
+ s_plus= (-b + delta)*si_a/2._ki
+ s_moins = (-b - delta)*si_a/2._ki
+ !
+ !write(*,*) 'test int_log_p 2 :',z1,s_plus,s_moins
+ !int_log_p = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ !&+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins))
+ int_log_p = cdilog(z1/(z1-s_plus)) - cdilog((z1-val_a)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-val_a)/(z1-s_moins))
+ !write(*,*) 'test int_log_p 2 :',int_log_p
+ !
+ else ! positive discriminant
+ !
+ ! careful treatement of the case where a --> 0, one root is -c/b,
+ ! the other goes to infinity but is frozen if greater than grand
+ ! The fact that one root is infinite does not disturb the
+ ! computation of dilog for this root appear at the denominator.
+ ! Obiouvsly, if a-->0, the discriminant is positif, so we always
+ ! ended to this case
+ delta = sqrt(arg_sqrt)
+ !
+ !s_plus= (-b + delta)/(2._ki*a) + i*lambda
+ !s_moins = (-b - delta)/(2._ki*a) - i*lambda
+ s_plus= (-b + delta)*si_a/2._ki
+ s_moins = (-b - delta)*si_a/2._ki
+ s_r_plus = real(s_plus,ki)
+ s_r_moins = real(s_moins,ki)
+ !
+ !write(*,*) 'test int_log_p 1 :',z1_r,s_r_plus,s_r_moins
+ !int_log_p = zdilog(z1_r/(z1_r-s_r_plus),sign(un,z1_r)) - zdilog((z1_r-1._ki)/(z1_r-s_r_plus),sign(un,z1_r-1._ki)) &
+ !&+ zdilog(z1_r/(z1_r-s_r_moins),-sign(un,z1_r)) - zdilog((z1_r-1._ki)/(z1_r-s_r_moins),-sign(un,z1_r-1._ki))
+ int_log_p = zdilog(z1_r/(z1_r-s_r_plus),sign(un,z1_r)) - zdilog((z1_r-val_a)/(z1_r-s_r_plus),sign(un,z1_r-val_a)) &
+ &+ zdilog(z1_r/(z1_r-s_r_moins),-sign(un,z1_r)) - zdilog((z1_r-val_a)/(z1_r-s_r_moins),-sign(un,z1_r-val_a))
+ !
+ end if
+ !
+ else ! z1 is complex, s_plus and s_moins are still complex conjugate
+ !
+ epsilon_gv = un
+ delta_gv = -sign(un,aimag(arg_c))
+ !
+ if (real(arg_sqrt,ki) <= zero) then ! negative discriminant
+ !
+ delta = i_*sqrt(abs(arg_sqrt))*sign(un,a)
+ !
+ ! be careful that for the case where z1 has a real part which is -b/2/a
+ ! we have to keep a small real part
+ !s_plus = (-b + delta)/(2._ki*a) + small
+ !s_moins = (-b - delta)/(2._ki*a) - small
+ s_plus = (-b + delta)*si_a/2._ki + small
+ s_moins = (-b - delta)*si_a/2._ki - small
+ !
+ ! we treat explicitely the case where Re(z1) = -b/2/a
+ !
+ !if (equal_real(real(z1,ki),real(-b/2._ki/a,ki))) then
+ if (equal_real(real(z1,ki),real(-b*si_a/2._ki,ki))) then
+ if ( (sign(un,aimag(z1-s_plus)) > 0._ki) .and. (sign(un,aimag(z1-s_moins)) > 0._ki) ) then
+ eta_temp = -2._ki*i_*pi
+ else
+ eta_temp = 0._ki
+ end if
+ else
+ eta_temp = eta(z1-s_plus,z1-s_moins)
+ end if
+ !
+ ! s_plus and s_moins are complex conjugate, so eta(-s_plus,-s_moins) = 0
+ !eta_part = -eta_temp &
+ !& -eta(a-i_*small*epsilon_gv,1._ki/(a-i_*small*delta_gv))
+ eta_part = -eta_temp
+ !
+ !rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ !&+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ !&- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ !&+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ !&+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ !&- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-val_a)/(z1-s_plus)) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ &- eta(val_a-s_plus,1._ki/(z1-s_plus))*log((z1-val_a)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-val_a)/(z1-s_moins)) &
+ &+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(val_a-s_moins,1._ki/(z1-s_moins))*log((z1-val_a)/(z1-s_moins))
+ !
+ else ! positive discriminant
+ !
+ delta = sqrt(arg_sqrt)
+ ! we need the small imaginary part for z1 is complex when
+ ! Re(z1) = -b/2/a
+ !s_plus= (-b + delta)/(2._ki*a)+i_*small
+ !s_moins = (-b - delta)/(2._ki*a)-i_*small
+ s_plus= (-b + delta)*sign(un,a)/2._ki+i_*small
+ s_moins = (-b - delta)*sign(un,a)/2._ki-i_*small
+ !
+ ! we treat explicitely the case where Re(z1) = -b/2/a
+ !
+ !write(*,*) 'test equal :',equal_real(real(z1,ki),real(-b/2._ki/a,ki))
+ !if (equal_real(real(z1,ki),real(-b/2._ki/a,ki))) then
+ if (equal_real(real(z1,ki),real(-b*si_a/2._ki,ki))) then
+ if (sign(un,a) == sign(un,aimag(z1))) then
+ eta_temp = -2._ki*i_*pi*sign(un,a)
+ else
+ eta_temp = 0._ki
+ end if
+ else
+ eta_temp = eta(z1-s_plus,z1-s_moins)
+ end if
+ !
+ ! s_plus and s_moins are complex conjugate, so eta(-s_plus,-s_moins) = 0
+ !eta_part = -eta_temp &
+ !& -eta(a-i_*small*epsilon_gv,1._ki/(a-i_*small*delta_gv))
+ eta_part = -eta_temp
+ !
+ !rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ !&+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ !&- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ !&+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ !&+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ !&- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-val_a)/(z1-s_plus)) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ &- eta(val_a-s_plus,1._ki/(z1-s_plus))*log((z1-val_a)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-val_a)/(z1-s_moins)) &
+ &+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(val_a-s_moins,1._ki/(z1-s_moins))*log((z1-val_a)/(z1-s_moins))
+ !
+ end if
+ !
+ !eta_part = eta_part*log((z1-1._ki)/z1)
+ eta_part = eta_part*log((z1-val_a)/z1)
+ !
+ int_log_p = rest + eta_part
+ !
+ end if
+ !
+ else ! b,c and z1 are complexs
+ !
+ delta = sqrt(arg_sqrt)
+ !eps_b = real(exp(eta(b,b)/2._ki),ki)
+ ! treatement of the case where a --> 0
+ ! in the case whrere b is purely imaginary, since fortran95 used signed
+ ! zero, In Fortran95 we Trust.........
+ !
+ !s_moins = (-b - delta)/(2._ki*a)
+ !!
+ !s_plus = (-b + delta)/(2._ki*a)
+ s_moins = (-b - delta)*sign(un,a)/2._ki
+ !
+ s_plus = (-b + delta)*sign(un,a)/2._ki
+ !
+ !
+ epsilon_gv = un
+ delta_gv = -sign(un,aimag(arg_c))
+ !
+ !eta_part = eta(-s_plus,-s_moins)-eta(z1-s_plus,z1-s_moins) &
+ !& -eta(a-i_*small*epsilon_gv,1._ki/(a-i_*small*delta_gv))
+ eta_part = eta(-s_plus,-s_moins)-eta(z1-s_plus,z1-s_moins) &
+ & -eta(sign(un,a)-i_*small*epsilon_gv,1._ki/(sign(un,a)-i_*small*delta_gv))
+ !
+ !eta_part = eta_part*log((z1-1._ki)/z1)
+ eta_part = eta_part*log((z1-val_a)/z1)
+ !
+ !rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-1._ki)/(z1-s_plus)) &
+ !&+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ !&- eta(1._ki-s_plus,1._ki/(z1-s_plus))*log((z1-1._ki)/(z1-s_plus)) &
+ !&+ cdilog(z1/(z1-s_moins)) - cdilog((z1-1._ki)/(z1-s_moins)) &
+ !&+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ !&- eta(1._ki-s_moins,1._ki/(z1-s_moins))*log((z1-1._ki)/(z1-s_moins))
+ rest = cdilog(z1/(z1-s_plus)) - cdilog((z1-val_a)/(z1-s_plus)) &
+ &+ eta(-s_plus,1._ki/(z1-s_plus))*log(z1/(z1-s_plus)) &
+ &- eta(val_a-s_plus,1._ki/(z1-s_plus))*log((z1-val_a)/(z1-s_plus)) &
+ &+ cdilog(z1/(z1-s_moins)) - cdilog((z1-val_a)/(z1-s_moins)) &
+ &+ eta(-s_moins,1._ki/(z1-s_moins))*log(z1/(z1-s_moins)) &
+ &- eta(val_a-s_moins,1._ki/(z1-s_moins))*log((z1-val_a)/(z1-s_moins))
+ !
+ int_log_p = rest + eta_part
+ !
+ end if
+ !
+ end function int_log_p
+ !
+ function eval_numer_g0(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_g0
+ !
+ real(ki) :: x,y
+ complex(ki) :: z1,jacob1
+ complex(ki) :: z2,jacob2
+ !
+ eval_numer_g0 = ( &
+ &+log_quad(real(g_glob(1,1),ki),g_glob(1,2),g_glob(1,3),1,par1_glob,par2_glob,par3_glob,dim_glob,u) &
+ &+log_quad(real(g_glob(2,1),ki),g_glob(2,2),g_glob(2,3),2,par1_glob,par2_glob,par3_glob,dim_glob,u) &
+ &+log_quad(real(g_glob(3,1),ki),g_glob(3,2),g_glob(3,3),3,par1_glob,par2_glob,par3_glob,dim_glob,u) &
+ & +rat_part(par1_glob,par2_glob,par3_glob,dim_glob,u))
+ !
+ end function eval_numer_g0
+ !
+ ! integrale du type :
+ ! g(u)*log(a*u^2+b*u+c-i*lamb)/D(u)
+ ! lorsque z = u + i*f(u)*eps, la partie imaginaire de l'argument du log
+ ! est : (2*a*u+b)*eps*u*f(u) - lamb
+ ! 2*a*u+b > 0 si u > \Sigma et a > 0 ou u < \Sigma et a < 0
+ ! 2*a*u+b < 0 si u > \Sigma et a < 0 ou u < \Sigma et a > 0
+ ! il faut donc que eps*f(u) soit de signe oppose a 2*a*u+b
+ ! Or le Re(pole) est dehors de [0,1], donc seule la coupure du log importe
+ ! Ca marche aussi si nous avons des masses imaginaires : dans ce cas
+ ! la partie imaginaire de l'argument du log devient:
+ ! (2*a*u+Re(b))*eps*u*f(u) + Im(b)*u+Im(c)
+ ! Mais les masses internes ont toutes des parties imaginaires de meme signe (<0)
+ ! donc Im(b)*u+Im(c) est < 0 quand u varie entre 0 et 1, on est donc
+ ! ramene au cas precedent
+ !
+ function log_quad(a,b,c,flag,par1,par2,par3,dim,u)
+ !
+ real(ki), intent(in) :: a
+ complex(ki), intent(in) :: b,c
+ real(ki), intent(in) :: u
+ integer, intent(in) :: flag
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: log_quad
+ !
+ real(ki) :: small
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ real(ki) :: sigma
+ !
+ !
+ small = delta_glob
+ !
+ sigma = -real(b,ki)/a/2._ki
+ !
+ x = u
+ !
+ if ( (sigma <= 1._ki) .and. (sigma >= 0._ki) ) then
+ !
+ y = lambda_par*sign(un,a)*u*(u-1._ki)*(u-sigma)
+ z = x + i_*y
+ jacob = 1._ki + i_*lambda_par*sign(un,a)*( (u-1._ki)*(u-sigma) + u*(u-1._ki) + u*(u-sigma) )
+ !
+ else
+ !
+ y = lambda_par*sign(un,a*sigma)*u*(u-1._ki)
+ z = x - i_*y
+ jacob = 1._ki - i_*lambda_par*sign(un,a*sigma)*( (u-1._ki) + u )
+ !
+ end if
+ !
+ log_quad = ( log(a*z*z+b*z+c)*fg(z,flag,par1,par2,par3,dim) )*jacob
+ !
+ !
+ end function log_quad
+ !
+ function rat_part(par1,par2,par3,dim,u)
+ !
+ real(ki), intent(in) :: u
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: rat_part
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ ! for this part, the sign of the contour does matter
+ ! because there is no pole in it
+ !
+ x = u
+ y = lambda_par*u*(u-1._ki)
+ z = x - i_*y
+ jacob = 1._ki - i_*lambda_par*( (u-1._ki) + u )
+ !
+ rat_part = fg(z,4,par1,par2,par3,dim)*jacob
+ !
+ end function rat_part
+ !
+ function fg(z,flag,par1,par2,par3,dim)
+ !
+ complex(ki), intent(in) :: z
+ integer, intent(in) :: flag
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(3) :: par
+ integer :: nb_par
+ complex(ki) :: g1,g2,g3
+ complex(ki) :: den1,den2,den3
+ !
+ complex(ki) ::&
+ &tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7,tmp8,tmp9,tmp10,&
+ &tmp11,tmp12,tmp13,tmp14,tmp15,tmp16,tmp17,tmp18,tmp19,tmp20,&
+ &tmp21,tmp22,tmp23,tmp24,tmp25,tmp26,tmp27,tmp28,tmp29,tmp30,&
+ &tmp31,tmp32,tmp33,tmp34,tmp35,tmp36,tmp37,tmp38,tmp39,tmp40,&
+ &tmp41,tmp42,tmp43,tmp44,tmp45,tmp46,tmp47,tmp48,tmp49,tmp50,&
+ &tmp51,tmp52,tmp53,tmp54,tmp55,tmp56,tmp57,tmp58,tmp59,tmp60,&
+ &tmp61,tmp62
+ !
+ !write(6,*) "MR: fin fg ",z,flag,par1,par2,par3,dim
+
+ par = (/par1,par2,par3/)
+ nb_par = count(mask=par/=0)
+ !
+ g1 = b*z*z+(c+e)*z+a+d+f
+ g2 = a*z*z+d*z+f
+ g3 = (a+b+c)*z*z+(d+e)*z+f
+ !
+ den1 = 2._ki*det_g*g1+det_s
+ den2 = 2._ki*det_g*g2+det_s
+ den3 = 2._ki*det_g*g3+det_s
+
+ !write(6,*) "MR: fin fg ",par,nb_par," gs ",g1,g2,g3," dens ",den1,den2,den3
+
+ !
+ if (dim == "ndi") then
+ !
+ if (nb_par == 0) then
+ !
+ select case (flag)
+ !
+ case(1)
+ !
+ fg = -num_b1/(2._ki*det_g*g1+det_s)
+ !
+ case(2)
+ !
+ fg = -num_b2/(2._ki*det_g*g2+det_s)
+ !
+ case(3)
+ !
+ fg = -num_b3/(2._ki*det_g*g3+det_s)
+ !
+ case(4)
+ !
+ fg = 0._ki
+ !
+ end select
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=2._ki*b*g1/den1-2._ki*num_b1*g1*(-c**2+4._ki*a*b+2._ki*b*d-c*e&
+ &)/den1**2
+ !
+ case(2)
+ !
+ fg=(-num_b2+c*g2+num_b2*z)/den2-2._ki*num_b2*g2*(-det_g+4._ki*a*b&
+ &-c**2+det_g*z-c*e+2._ki*b*d)/den2**2
+ !
+ case(3)
+ !
+ fg=(-num_b3-g3*c-2._ki*g3*b+num_b3*z)/den3-2._ki*num_b3*g3*(-det_&
+ &g+4._ki*a*b-c**2+det_g*z-c*e+2._ki*b*d)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b3*(-1._ki+z)/den3+num_b2*(-1._ki+z)/den2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(c*g1-num_b1*z)/den1+2._ki*num_b1*g1*(det_g*z-c*d+2._ki*a*e)/d&
+ &en1**2
+ !
+ case(2)
+ !
+ fg=2._ki*a*g2/den2+2._ki*num_b2*(-c*d+2._ki*a*e)*g2/den2**2
+ !
+ case(3)
+ !
+ fg=(-g3*c-2._ki*g3*a-num_b3*z)/den3+2._ki*num_b3*g3*(det_g*z-c*d+&
+ &2._ki*a*e)/den3**2
+ !
+ case(4)
+ !
+ fg=-num_b3*z/den3-num_b1*z/den1
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(-2._ki*b*g1-num_b1-c*g1+num_b1*z)/den1-2._ki*num_b1*g1*(-det_&
+ &g+c*e-2._ki*b*d+det_g*z-c*d+2._ki*a*e)/den1**2
+ !
+ case(2)
+ !
+ fg=(-c*g2-num_b2*z-2._ki*a*g2)/den2-2._ki*num_b2*g2*(-det_g*z+c*e&
+ &-2._ki*b*d-c*d+2._ki*a*e)/den2**2
+ !
+ case(3)
+ !
+ fg=2._ki*g3*(c+a+b)/den3-2._ki*num_b3*g3*(-c*d-2._ki*b*d+c*e+2._k&
+ &i*a*e)/den3**2
+ !
+ case(4)
+ !
+ fg=-num_b2*z/den2+num_b1*(-1._ki+z)/den1
+ !
+ end select
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-2._ki*num_b1*g1*(-4._ki*b*g1+4._ki*b*d+4._ki*b*f+4._ki*b*a-2.&
+ &_ki*c*e-c**2-e**2)/den1**2
+ !
+ case(2)
+ !
+ fg=(-num_b2+2._ki*c*g2+2._ki*e*g2+2._ki*num_b2*z-num_b2*z**2)/den&
+ &2-2._ki*num_b2*g2*(-4._ki*b*g2+2._ki*det_g*z-2._ki*c*e+4._ki*b*&
+ &d-det_g+4._ki*b*a-c**2-det_g*z**2+4._ki*b*f-e**2)/den2**2
+ !
+ case(3)
+ !
+ fg=(-num_b3-2._ki*c*g3-4._ki*b*g3-2._ki*e*g3+2._ki*num_b3*z-num_b&
+ &3*z**2)/den3-2._ki*num_b3*g3*(-4._ki*b*g3+2._ki*det_g*z-2._ki*c&
+ &*e+4._ki*b*d-det_g+4._ki*b*a-c**2-det_g*z**2+4._ki*b*f-e**2)/de&
+ &n3**2
+ !
+ case(4)
+ !
+ fg=-num_b3*(z-1._ki)**2/den3-num_b2*(z-1._ki)**2/den2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-g1*(e+c)/den1+2._ki*num_b1*g1*(2._ki*c*g1-c*d+2._ki*e*a+e*d-2&
+ &._ki*c*f)/den1**2
+ !
+ case(2)
+ !
+ fg=g2*(2._ki*a+d)/den2+2._ki*num_b2*g2*(2._ki*c*g2-c*d+2._ki*e*a+&
+ &e*d-2._ki*c*f)/den2**2
+ !
+ case(3)
+ !
+ fg=(-2._ki*a*g3-c*g3-num_b3*z-d*g3+e*g3+num_b3*z**2)/den3+2._ki*n&
+ &um_b3*g3*(2._ki*c*g3+det_g*z-c*d+2._ki*e*a-det_g*z**2+e*d-2._ki&
+ &*c*f)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b3*z*(z-1._ki)/den3
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=g1*(c+e+2._ki*b)/den1-2._ki*num_b1*g1*(2._ki*c*g1+4._ki*b*g1-c&
+ &*d+2._ki*e*a+c*e-2._ki*b*d+e*d-4._ki*b*f+e**2-2._ki*c*f)/den1**&
+ &2
+ !
+ case(2)
+ !
+ fg=(-c*g2-2._ki*e*g2-num_b2*z+num_b2*z**2-2._ki*a*g2-d*g2)/den2-2&
+ &._ki*num_b2*g2*(2._ki*c*g2+4._ki*b*g2-det_g*z+c*e-2._ki*b*d-c*d&
+ &+det_g*z**2-4._ki*b*f+e**2-2._ki*c*f+2._ki*e*a+e*d)/den2**2
+ !
+ case(3)
+ !
+ fg=g3*(2._ki*c+2._ki*b+e+2._ki*a+d)/den3-2._ki*num_b3*g3*(2._ki*c&
+ &*g3+4._ki*b*g3-c*d+2._ki*e*a+c*e-2._ki*b*d+e*d-4._ki*b*f+e**2-2&
+ &._ki*c*f)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b2*z*(z-1._ki)/den2
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-g1*(e+c)/den1+2._ki*num_b1*g1*(2._ki*c*g1-c*d+2._ki*e*a+e*d-2&
+ &._ki*c*f)/den1**2
+ !
+ case(2)
+ !
+ fg=g2*(2._ki*a+d)/den2+2._ki*num_b2*g2*(2._ki*c*g2-c*d+2._ki*e*a+&
+ &e*d-2._ki*c*f)/den2**2
+ !
+ case(3)
+ !
+ fg=(-2._ki*a*g3-c*g3-num_b3*z-d*g3+e*g3+num_b3*z**2)/den3+2._ki*n&
+ &um_b3*g3*(2._ki*c*g3+det_g*z-c*d+2._ki*e*a-det_g*z**2+e*d-2._ki&
+ &*c*f)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b3*z*(z-1._ki)/den3
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(-2._ki*g1*d-4._ki*a*g1-num_b1*z**2)/den1-2._ki*num_b1*g1*(-4.&
+ &_ki*a*g1-det_g*z**2+4._ki*a*f-d**2)/den1**2
+ !
+ case(2)
+ !
+ fg=-2._ki*num_b2*g2*(-4._ki*a*g2+4._ki*a*f-d**2)/den2**2
+ !
+ case(3)
+ !
+ fg=(2._ki*d*g3-num_b3*z**2)/den3-2._ki*num_b3*g3*(-4._ki*a*g3-det&
+ &_g*z**2+4._ki*a*f-d**2)/den3**2
+ !
+ case(4)
+ !
+ fg=-num_b3*z**2/den3-num_b1*z**2/den1
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(g1*e+2._ki*c*g1-num_b1*z+2._ki*g1*d+4._ki*a*g1+num_b1*z**2)/d&
+ &en1+2._ki*num_b1*g1*(-2._ki*c*g1-4._ki*a*g1+det_g*z-e*d+2._ki*c&
+ &*f-det_g*z**2+4._ki*a*f-d**2)/den1**2
+ !
+ case(2)
+ !
+ fg=-d*g2/den2+2._ki*num_b2*g2*(-2._ki*c*g2-4._ki*a*g2+4._ki*a*f-e&
+ &*d+2._ki*c*f-d**2)/den2**2
+ !
+ case(3)
+ !
+ fg=-g3*(e+d)/den3+2._ki*num_b3*g3*(-2._ki*c*g3-4._ki*a*g3+4._ki*a&
+ &*f-e*d+2._ki*c*f-d**2)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b1*z*(z-1._ki)/den1
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=g1*(c+e+2._ki*b)/den1-2._ki*num_b1*g1*(2._ki*c*g1+4._ki*b*g1-c&
+ &*d+2._ki*e*a+c*e-2._ki*b*d+e*d-4._ki*b*f+e**2-2._ki*c*f)/den1**&
+ &2
+ !
+ case(2)
+ !
+ fg=(-c*g2-2._ki*e*g2-num_b2*z+num_b2*z**2-2._ki*a*g2-d*g2)/den2-2&
+ &._ki*num_b2*g2*(2._ki*c*g2+4._ki*b*g2-det_g*z+c*e-2._ki*b*d-c*d&
+ &+det_g*z**2-4._ki*b*f+e**2-2._ki*c*f+2._ki*e*a+e*d)/den2**2
+ !
+ case(3)
+ !
+ fg=g3*(2._ki*c+2._ki*b+e+2._ki*a+d)/den3-2._ki*num_b3*g3*(2._ki*c&
+ &*g3+4._ki*b*g3-c*d+2._ki*e*a+c*e-2._ki*b*d+e*d-4._ki*b*f+e**2-2&
+ &._ki*c*f)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b2*z*(z-1._ki)/den2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(g1*e+2._ki*c*g1-num_b1*z+2._ki*g1*d+4._ki*a*g1+num_b1*z**2)/d&
+ &en1+2._ki*num_b1*g1*(-2._ki*c*g1-4._ki*a*g1+det_g*z-e*d+2._ki*c&
+ &*f-det_g*z**2+4._ki*a*f-d**2)/den1**2
+ !
+ case(2)
+ !
+ fg=-d*g2/den2+2._ki*num_b2*g2*(-2._ki*c*g2-4._ki*a*g2+4._ki*a*f-e&
+ &*d+2._ki*c*f-d**2)/den2**2
+ !
+ case(3)
+ !
+ fg=-g3*(e+d)/den3+2._ki*num_b3*g3*(-2._ki*c*g3-4._ki*a*g3+4._ki*a&
+ &*f-e*d+2._ki*c*f-d**2)/den3**2
+ !
+ case(4)
+ !
+ fg=num_b1*z*(z-1._ki)/den1
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=(-2._ki*g1*e-4._ki*c*g1-4._ki*b*g1-2._ki*g1*d-4._ki*a*g1-num_b&
+ &1*z**2+2._ki*num_b1*z-num_b1)/den1-2._ki*num_b1*g1*(-4._ki*b*g1&
+ &-4._ki*c*g1-4._ki*a*g1-det_g+4._ki*b*f-e**2+2._ki*det_g*z-2._ki&
+ &*e*d+4._ki*c*f-det_g*z**2+4._ki*a*f-d**2)/den1**2
+ !
+ case(2)
+ !
+ fg=(2._ki*e*g2-num_b2*z**2+2._ki*d*g2)/den2-2._ki*num_b2*g2*(-4._&
+ &ki*b*g2-4._ki*c*g2-4._ki*a*g2+4._ki*a*f-det_g*z**2+4._ki*b*f-e*&
+ &*2-2._ki*e*d+4._ki*c*f-d**2)/den2**2
+ !
+ case(3)
+ !
+ fg=-2._ki*num_b3*g3*(-4._ki*b*g3-4._ki*c*g3-4._ki*a*g3-2._ki*e*d+&
+ &4._ki*a*f+4._ki*c*f+4._ki*b*f-d**2-e**2)/den3**2
+ !
+ case(4)
+ !
+ fg=-num_b2*z**2/den2-num_b1*(z-1._ki)**2/den1
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par1)
+ !
+ case(1)
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*d
+ tmp2 = b*f
+ tmp3 = b*g1
+ tmp4 = b*b
+ tmp5 = c*e
+ tmp6 = e*e
+ tmp7 = den1*den1
+ fg = (2.0_ki*(-(2.0_ki*(4.0_ki*(tmp2-tmp3)-(det_g+tmp6))*(2.0_ki*tmp1+det_g-tmp5&
+ &)/(tmp7*den1)*g1*num_b1+(3.0_ki*(b*det_g*g1-2.0_ki*tmp3*num_b1)+2.0_ki*(-(b*c*e&
+ &*g1+tmp6*num_b1))+4.0_ki*(2.0_ki*(tmp1*num_b1+tmp2*num_b1)+tmp3*tmp3+tmp4*d*g1+&
+ &a*b*num_b1-(tmp4*f*g1+tmp5*num_b1))+tmp3*tmp6+det_g*num_b1-c*c*num_b1)/tmp7))*g&
+ &1)
+ !
+ case(2)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b2
+ tmp3 = b*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = b*d
+ tmp6 = tmp5*num_b2
+ tmp7 = e*e
+ tmp8 = c*e
+ tmp9 = tmp8*num_b2
+ tmp10 = det_g*num_b2
+ tmp11 = tmp10*z
+ tmp12 = z*z
+ tmp13 = b*c
+ tmp14 = c*g2
+ tmp15 = num_b2*z
+ tmp16 = den2*den2
+ tmp17 = e*g2
+ fg = ((-(4.0_ki*(4.0_ki*(tmp1-tmp3)-(tmp12*det_g+tmp7))*(2.0_ki*tmp5+det_g*z-tmp&
+ &8)/(tmp16*den2)*g2*num_b2+(24.0_ki*(tmp2-tmp4)+12.0_ki*(tmp6+tmp4*z)+8.0_ki*(a*&
+ &b*num_b2-tmp2*z)+6.0_ki*(tmp11-(tmp7*num_b2+tmp10*tmp12+tmp9))+2.0_ki*(tmp15*tm&
+ &p7-(det_g*e*g2*z+c*c*num_b2+tmp12*tmp9+tmp10))+4.0_ki*(tmp11*tmp12+tmp12*tmp6+t&
+ &mp13*g2*g2-(tmp5*e*g2+tmp13*f*g2))+3.0_ki*tmp14*tmp7+tmp12*c*det_g*g2)/tmp16))*&
+ &g2+(3.0_ki*(tmp14+tmp15+2.0_ki*tmp17-tmp12*num_b2)+tmp12*tmp14+tmp12*tmp15-(2.0&
+ &_ki*tmp17*z+num_b2))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*d
+ tmp6 = tmp5*num_b3
+ tmp7 = e*e
+ tmp8 = c*e
+ tmp9 = tmp8*num_b3
+ tmp10 = det_g*num_b3
+ tmp11 = tmp10*z
+ tmp12 = z*z
+ tmp13 = b*c
+ tmp14 = c*g3
+ tmp15 = num_b3*z
+ tmp16 = den3*den3
+ tmp17 = e*g3
+ fg = ((-(4.0_ki*(4.0_ki*(tmp1-tmp3)-(tmp12*det_g+tmp7))*(2.0_ki*tmp5+det_g*z-tmp&
+ &8)/(tmp16*den3)*g3*num_b3+(24.0_ki*(tmp2-tmp4)+12.0_ki*(tmp6+tmp4*z)+6.0_ki*(tm&
+ &p11-(tmp7*num_b3+tmp10*tmp12+tmp9))+8.0_ki*(a*b*num_b3+b*b*f*g3-(tmp2*z+tmp3*tm&
+ &p3))+4.0_ki*(tmp11*tmp12+tmp12*tmp6+tmp13*f*g3+tmp5*e*g3-tmp13*g3*g3)+2.0_ki*(t&
+ &mp15*tmp7+det_g*e*g3*z-(tmp12*b*det_g*g3+c*c*num_b3+tmp3*tmp7+tmp12*tmp9+tmp10)&
+ &)-(tmp12*c*det_g*g3+3.0_ki*tmp14*tmp7))/tmp16))*g3+(6.0_ki*(-(tmp3+tmp17))+2.0_&
+ &ki*(tmp17*z-tmp12*tmp3)+3.0_ki*(tmp15-(tmp12*num_b3+tmp14))+tmp12*tmp15-(tmp12*&
+ &tmp14+num_b3))/den3)
+ !
+ case(4)
+ !
+ tmp1 = b*g1
+ tmp2 = num_b2*z
+ tmp3 = z*z
+ tmp4 = num_b3*z
+ tmp5 = b*g3
+ tmp6 = b*f
+ tmp7 = b*d
+ tmp8 = e*e
+ tmp9 = c*e
+ tmp10 = 2.0_ki*(tmp3*det_g+tmp7*z)
+ tmp11 = tmp9*z
+ fg = ((3.0_ki*tmp1+1.0_ki/2.0_ki*num_b1)/den1+(3.0_ki*(tmp2-tmp3*num_b2)+3.0_ki/&
+ &2.0_ki*tmp2*tmp3+1.0_ki/2.0_ki*tmp3*c*g2-(e*g2*z+num_b2))/den2+(3.0_ki*(tmp4-tm&
+ &p3*num_b3)+3.0_ki/2.0_ki*tmp3*tmp4+e*g3*z-(1.0_ki/2.0_ki*tmp3*c*g3+tmp3*tmp5+nu&
+ &m_b3))/den3-((4.0_ki*(b*g2-tmp6)+tmp10+tmp8-tmp11)/(den2*den2)*g2*num_b2*z+(4.0&
+ &_ki*(tmp5-tmp6)+tmp10+tmp8-tmp11)/(den3*den3)*g3*num_b3*z+(4.0_ki*(tmp1-tmp6)+2&
+ &.0_ki*(tmp7+det_g)+tmp8-tmp9)/(den1*den1)*g1*num_b1))
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*c
+ tmp2 = c*f
+ tmp3 = b*d
+ tmp4 = c*g1
+ tmp5 = e*g1
+ tmp6 = d*e
+ tmp7 = c*e
+ tmp8 = den1*den1
+ fg = (((4.0_ki*(tmp1*f*g1+tmp3*num_b1*z+a*e*num_b1-(tmp3*e*g1+tmp1*d*g1+tmp2*num&
+ &_b1+tmp1*g1*g1))+2.0_ki*(tmp4*num_b1+tmp5*c*c+tmp6*num_b1+det_g*num_b1*z+b*det_&
+ &g*g1*z-(c*det_g*g1+c*d*num_b1+tmp7*num_b1*z))+tmp4*e*e-(det_g*e*g1+tmp5*num_b1)&
+ &)/tmp8-(4.0_ki*(2.0_ki*(tmp2-tmp4)+det_g*z-tmp6)*(2.0_ki*tmp3+det_g-tmp7)/(tmp8&
+ &*den1)*g1*num_b1+(c+e+2.0_ki*b*z)/den1))*g1)
+ !
+ case(2)
+ !
+ tmp1 = c*f
+ tmp2 = tmp1*num_b2
+ tmp3 = c*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = d*e
+ tmp6 = tmp5*num_b2
+ tmp7 = c*d
+ tmp8 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(4.0_ki*(a+d)-(2.0_ki*d*z+g2))/den2+(4.0_ki*(2.0_ki*(tmp4-t&
+ &mp2)+tmp6+tmp2*z+a*e*num_b2)+2.0_ki*(b*d*d*g2+c*c*f*g2-(tmp7*e*g2+tmp7*num_b2+t&
+ &mp6*z+3.0_ki*tmp4*z+tmp3*tmp3))+d*det_g*g2*z-e*g2*num_b2)/tmp8-4.0_ki*(2.0_ki*(&
+ &tmp1-tmp3)-tmp5)*(2.0_ki*b*d+det_g*z-c*e)/(tmp8*den2)*g2*num_b2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = c*f
+ tmp2 = tmp1*num_b3
+ tmp3 = c*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*c
+ tmp6 = g3*g3
+ tmp7 = d*e
+ tmp8 = tmp7*num_b3
+ tmp9 = det_g*num_b3
+ tmp10 = z*z
+ tmp11 = tmp9*z
+ tmp12 = b*d
+ tmp13 = b*g3
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = e*g3
+ tmp17 = den3*den3
+ tmp18 = d*g3
+ tmp19 = num_b3*z
+ fg = (((8.0_ki*(tmp4-tmp2)+4.0_ki*(tmp8+tmp10*tmp11+tmp2*z+tmp5*tmp6+tmp10*tmp12&
+ &*num_b3+tmp12*e*g3+a*e*num_b3-(tmp5*f*g3+tmp10*tmp9))+2.0_ki*(tmp11+tmp3*tmp3+t&
+ &mp14*e*g3-(tmp10*b*det_g*g3+c*c*f*g3+tmp10*tmp15*num_b3+tmp8*z+3.0_ki*tmp4*z+tm&
+ &p14*num_b3+tmp13*d*d))+det_g*e*g3*z-(d*det_g*g3*z+tmp10*c*det_g*g3+tmp3*e*e+tmp&
+ &16*num_b3))/tmp17-4.0_ki*(2.0_ki*(tmp1-tmp3)+tmp10*det_g-tmp7)*(2.0_ki*tmp12+de&
+ &t_g*z-tmp15)/(tmp17*den3)*g3*num_b3)*g3+(2.0_ki*(tmp16+tmp10*tmp13+tmp10*num_b3&
+ &-(a*g3+tmp18))+1.0_ki/2.0_ki*tmp6+tmp10*tmp3+tmp18*z-(tmp16*z+tmp10*tmp19+tmp3+&
+ &tmp19))/den3)
+ !
+ case(4)
+ !
+ tmp1 = c*g1
+ tmp2 = c*f
+ tmp3 = b*d*z
+ tmp4 = d*e
+ tmp5 = c*e*z
+ tmp6 = c*g3
+ tmp7 = z*z
+ fg = (((2.0_ki*(tmp2-c*g2)-tmp4)/(den2*den2)*num_b2*z-1.0_ki/2.0_ki*d/den2*z)*g2&
+ &+(tmp1+1.0_ki/2.0_ki*e*g1-(b*g1*z+1.0_ki/2.0_ki*num_b1*z))/den1+1.0_ki/2.0_ki*(&
+ &2.0_ki*(2.0_ki*num_b3*z+b*g3*z-num_b3)+tmp6*z+d*g3-(e*g3+3.0_ki*tmp7*num_b3))/d&
+ &en3*z+(2.0_ki*(tmp2+tmp3+det_g*z-tmp1)-(tmp5+tmp4))/(den1*den1)*g1*num_b1+(2.0_&
+ &ki*(tmp2+tmp3+tmp7*det_g-tmp6)-(tmp5+tmp4))/(den3*den3)*g3*num_b3*z)
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*g1
+ tmp2 = b*d
+ tmp3 = tmp2*num_b1
+ tmp4 = b*f
+ tmp5 = b*b
+ tmp6 = b*c
+ tmp7 = c*e
+ tmp8 = tmp7*num_b1
+ tmp9 = c*f
+ tmp10 = det_g*num_b1
+ tmp11 = e*e
+ tmp12 = b*det_g*g1
+ tmp13 = c*g1
+ tmp14 = e*g1
+ tmp15 = d*e
+ tmp16 = den1*den1
+ fg = (((c+e+2.0_ki*b*z)/den1+4.0_ki*(2.0_ki*tmp2+det_g-tmp7)*(4.0_ki*(tmp4-tmp1)&
+ &+2.0_ki*(tmp9-tmp13)+det_g*z-(det_g+tmp15+tmp11))/(tmp16*den1)*g1*num_b1-(8.0_k&
+ &i*(tmp5*f*g1-(tmp5*d*g1+tmp4*num_b1+tmp3+tmp1*tmp1))+4.0_ki*(tmp8+tmp1*num_b1+t&
+ &mp3*z+tmp6*e*g1+tmp6*f*g1+a*e*num_b1-(tmp6*d*g1+tmp2*e*g1+tmp9*num_b1+tmp6*g1*g&
+ &1))+2.0_ki*(tmp10*z+tmp11*num_b1+tmp12*z+tmp13*num_b1+tmp14*c*c+tmp15*num_b1-(c&
+ &*det_g*g1+c*d*num_b1+tmp8*z+tmp1*tmp11+3.0_ki*tmp12+tmp10))+tmp11*tmp13-(det_g*&
+ &e*g1+tmp14*num_b1))/tmp16)*g1)
+ !
+ case(2)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b2
+ tmp3 = b*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = c*f
+ tmp6 = tmp5*num_b2
+ tmp7 = c*g2
+ tmp8 = tmp7*num_b2
+ tmp9 = e*e
+ tmp10 = b*c
+ tmp11 = g2*g2
+ tmp12 = b*d
+ tmp13 = tmp12*num_b2
+ tmp14 = d*e
+ tmp15 = tmp14*num_b2
+ tmp16 = det_g*num_b2
+ tmp17 = z*z
+ tmp18 = tmp16*z
+ tmp19 = c*d
+ tmp20 = c*e
+ tmp21 = tmp20*num_b2
+ tmp22 = num_b2*z
+ tmp23 = e*g2
+ tmp24 = den2*den2
+ tmp25 = d*g2
+ fg = ((4.0_ki*(2.0_ki*tmp12+det_g*z-tmp20)*(4.0_ki*(tmp1-tmp3)+2.0_ki*(tmp5-tmp7&
+ &)-(tmp17*det_g+tmp9+tmp14))/(tmp24*den2)*g2*num_b2-(16.0_ki*(tmp4-tmp2)+6.0_ki*&
+ &(-(tmp8*z+2.0_ki*tmp4*z))+8.0_ki*(tmp8+tmp2*z-tmp6)+4.0_ki*(tmp15+tmp16*tmp17+t&
+ &mp6*z+tmp9*num_b2+tmp10*f*g2+tmp12*e*g2+a*e*num_b2-(tmp17*tmp18+tmp13*tmp17+tmp&
+ &10*tmp11+tmp13))+2.0_ki*(tmp21+tmp17*tmp21+tmp3*d*d+c*c*f*g2+det_g*e*g2*z-(tmp1&
+ &9*e*g2+tmp22*tmp9+tmp19*num_b2+tmp15*z+tmp7*tmp7+tmp18))+d*det_g*g2*z-(tmp17*c*&
+ &det_g*g2+3.0_ki*tmp7*tmp9+tmp23*num_b2))/tmp24)*g2+(2.0_ki*(tmp17*num_b2+tmp23*&
+ &z-(a*g2+tmp25+2.0_ki*tmp23))+1.0_ki/2.0_ki*tmp11+tmp25*z-(tmp17*tmp7+tmp17*tmp2&
+ &2+tmp7+tmp22))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*c
+ tmp6 = f*g3
+ tmp7 = c*f
+ tmp8 = tmp7*num_b3
+ tmp9 = c*g3
+ tmp10 = tmp9*num_b3
+ tmp11 = e*e
+ tmp12 = b*d
+ tmp13 = d*e
+ tmp14 = tmp13*num_b3
+ tmp15 = c*d
+ tmp16 = c*e
+ tmp17 = den3*den3
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(-(e*z+d*z))+4.0_ki*(a+b+c+d+e)-g3)/den3+4.0_ki*(2.&
+ &0_ki*(2.0_ki*(tmp1-tmp3)+tmp7-tmp9)-(tmp13+tmp11))*(2.0_ki*tmp12+det_g*z-tmp16)&
+ &/(tmp17*den3)*g3*num_b3-(4.0_ki*(tmp14+tmp11*num_b3+tmp8*z+a*e*num_b3-tmp12*num&
+ &_b3)+8.0_ki*(2.0_ki*(tmp4-tmp2)+tmp10+tmp3*tmp3+tmp2*z+tmp5*g3*g3-(tmp5*f*g3+tm&
+ &p6*b*b+tmp8))+2.0_ki*(3.0_ki*(-(2.0_ki*tmp4*z+tmp10*z))+tmp9*tmp9+tmp11*tmp3+tm&
+ &p11*tmp9+tmp16*num_b3+tmp15*e*g3-(tmp11*num_b3*z+tmp6*c*c+tmp3*d*d+tmp15*num_b3&
+ &+tmp14*z))-(det_g*e*g3*z+d*det_g*g3*z+e*g3*num_b3))/tmp17)*g3)
+ !
+ case(4)
+ !
+ tmp1 = b*g1
+ tmp2 = c*g1
+ tmp3 = b*f
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = tmp4*z
+ tmp7 = e*e
+ tmp8 = c*e
+ tmp9 = d*e
+ tmp10 = tmp8*z
+ tmp11 = c*g2
+ tmp12 = z*z
+ fg = ((-((4.0_ki*(tmp3-b*g3)+2.0_ki*(tmp5-c*g3)-(tmp9+tmp7))/(den3*den3)*num_b3*&
+ &z+1.0_ki/2.0_ki*(d+e)/den3*z))*g3+(tmp1*z+1.0_ki/2.0_ki*num_b1*z-(1.0_ki/2.0_ki&
+ &*e*g1+1.0_ki/2.0_ki*num_b1+tmp2+3.0_ki*tmp1))/den1+(2.0_ki*(2.0_ki*(b*g2-tmp3)+&
+ &tmp11+tmp6+tmp12*det_g-tmp5)+tmp7+tmp9-tmp10)/(den2*den2)*g2*num_b2*z-((2.0_ki*&
+ &(2.0_ki*(tmp3-tmp1)+tmp5+tmp6+det_g*z-(det_g+tmp4+tmp2))+tmp8-(tmp9+tmp7+tmp10)&
+ &)/(den1*den1)*g1*num_b1+1.0_ki/2.0_ki*(2.0_ki*(num_b2-(2.0_ki*num_b2*z+e*g2))+t&
+ &mp11*z+3.0_ki*tmp12*num_b2-d*g2)/den2*z))
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*c
+ tmp2 = c*f
+ tmp3 = b*d
+ tmp4 = c*g1
+ tmp5 = e*g1
+ tmp6 = d*e
+ tmp7 = c*e
+ tmp8 = den1*den1
+ fg = (((4.0_ki*(tmp1*f*g1+tmp3*num_b1*z+a*e*num_b1-(tmp3*e*g1+tmp1*d*g1+tmp2*num&
+ &_b1+tmp1*g1*g1))+2.0_ki*(tmp4*num_b1+tmp5*c*c+tmp6*num_b1+det_g*num_b1*z+b*det_&
+ &g*g1*z-(c*det_g*g1+c*d*num_b1+tmp7*num_b1*z))+tmp4*e*e-(det_g*e*g1+tmp5*num_b1)&
+ &)/tmp8-(4.0_ki*(2.0_ki*(tmp2-tmp4)+det_g*z-tmp6)*(2.0_ki*tmp3+det_g-tmp7)/(tmp8&
+ &*den1)*g1*num_b1+(c+e+2.0_ki*b*z)/den1))*g1)
+ !
+ case(2)
+ !
+ tmp1 = c*f
+ tmp2 = tmp1*num_b2
+ tmp3 = c*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = d*e
+ tmp6 = tmp5*num_b2
+ tmp7 = c*d
+ tmp8 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(4.0_ki*(a+d)-(2.0_ki*d*z+g2))/den2+(4.0_ki*(2.0_ki*(tmp4-t&
+ &mp2)+tmp6+tmp2*z+a*e*num_b2)+2.0_ki*(b*d*d*g2+c*c*f*g2-(tmp7*e*g2+tmp7*num_b2+t&
+ &mp6*z+3.0_ki*tmp4*z+tmp3*tmp3))+d*det_g*g2*z-e*g2*num_b2)/tmp8-4.0_ki*(2.0_ki*(&
+ &tmp1-tmp3)-tmp5)*(2.0_ki*b*d+det_g*z-c*e)/(tmp8*den2)*g2*num_b2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = c*f
+ tmp2 = tmp1*num_b3
+ tmp3 = c*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*c
+ tmp6 = g3*g3
+ tmp7 = d*e
+ tmp8 = tmp7*num_b3
+ tmp9 = det_g*num_b3
+ tmp10 = z*z
+ tmp11 = tmp9*z
+ tmp12 = b*d
+ tmp13 = b*g3
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = e*g3
+ tmp17 = den3*den3
+ tmp18 = d*g3
+ tmp19 = num_b3*z
+ fg = (((8.0_ki*(tmp4-tmp2)+4.0_ki*(tmp8+tmp10*tmp11+tmp2*z+tmp5*tmp6+tmp10*tmp12&
+ &*num_b3+tmp12*e*g3+a*e*num_b3-(tmp5*f*g3+tmp10*tmp9))+2.0_ki*(tmp11+tmp3*tmp3+t&
+ &mp14*e*g3-(tmp10*b*det_g*g3+c*c*f*g3+tmp10*tmp15*num_b3+tmp8*z+3.0_ki*tmp4*z+tm&
+ &p14*num_b3+tmp13*d*d))+det_g*e*g3*z-(d*det_g*g3*z+tmp10*c*det_g*g3+tmp3*e*e+tmp&
+ &16*num_b3))/tmp17-4.0_ki*(2.0_ki*(tmp1-tmp3)+tmp10*det_g-tmp7)*(2.0_ki*tmp12+de&
+ &t_g*z-tmp15)/(tmp17*den3)*g3*num_b3)*g3+(2.0_ki*(tmp16+tmp10*tmp13+tmp10*num_b3&
+ &-(a*g3+tmp18))+1.0_ki/2.0_ki*tmp6+tmp10*tmp3+tmp18*z-(tmp16*z+tmp10*tmp19+tmp3+&
+ &tmp19))/den3)
+ !
+ case(4)
+ !
+ tmp1 = c*g1
+ tmp2 = c*f
+ tmp3 = b*d*z
+ tmp4 = d*e
+ tmp5 = c*e*z
+ tmp6 = c*g3
+ tmp7 = z*z
+ fg = (((2.0_ki*(tmp2-c*g2)-tmp4)/(den2*den2)*num_b2*z-1.0_ki/2.0_ki*d/den2*z)*g2&
+ &+(tmp1+1.0_ki/2.0_ki*e*g1-(b*g1*z+1.0_ki/2.0_ki*num_b1*z))/den1+1.0_ki/2.0_ki*(&
+ &2.0_ki*(2.0_ki*num_b3*z+b*g3*z-num_b3)+tmp6*z+d*g3-(e*g3+3.0_ki*tmp7*num_b3))/d&
+ &en3*z+(2.0_ki*(tmp2+tmp3+det_g*z-tmp1)-(tmp5+tmp4))/(den1*den1)*g1*num_b1+(2.0_&
+ &ki*(tmp2+tmp3+tmp7*det_g-tmp6)-(tmp5+tmp4))/(den3*den3)*g3*num_b3*z)
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = a*e
+ tmp3 = c*f
+ tmp4 = c*g1
+ tmp5 = d*g1
+ tmp6 = c*c
+ tmp7 = c*d
+ tmp8 = d*e
+ tmp9 = den1*den1
+ tmp10 = det_g*z
+ fg = (((3.0_ki*(2.0_ki*tmp4*num_b1*z+c*det_g*g1*z)+4.0_ki*(2.0_ki*(tmp1*num_b1-a&
+ &*f*num_b1)+a*c*e*g1-(tmp3*num_b1*z+tmp2*num_b1*z))+2.0_ki*(tmp1*e*e+d*d*num_b1+&
+ &tmp6*f*g1+tmp7*num_b1*z+tmp8*num_b1*z-(det_g*num_b1*z*z+tmp7*e*g1+tmp5*tmp6+tmp&
+ &4*tmp4))+tmp5*num_b1+det_g*e*g1*z)/tmp9+4.0_ki*(2.0_ki*(tmp3-tmp4)+tmp10-tmp8)*&
+ &(tmp10+2.0_ki*tmp2-tmp7)/(tmp9*den1)*g1*num_b1-1.0_ki/2.0_ki*(4.0_ki*(2.0_ki*a+&
+ &d)+2.0_ki*(3.0_ki*c*z+e*z)+g1)/den1)*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = d*d
+ tmp3 = c*g2
+ tmp4 = den2*den2
+ fg = (((8.0_ki*(a*g2*num_b2-a*f*num_b2)+4.0_ki*(tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2))&
+ &+tmp2*tmp3+2.0_ki*tmp2*num_b2+d*g2*num_b2)/tmp4+4.0_ki*(2.0_ki*(c*f-tmp3)-d*e)*&
+ &(2.0_ki*a*e-c*d)/(tmp4*den2)*g2*num_b2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*c
+ tmp3 = g3*g3
+ tmp4 = det_g*num_b3
+ tmp5 = z*z
+ tmp6 = a*e
+ tmp7 = c*f
+ tmp8 = c*g3
+ tmp9 = d*d
+ tmp10 = c*d
+ tmp11 = d*e
+ tmp12 = d*g3
+ tmp13 = den3*den3
+ fg = ((4.0_ki*(2.0_ki*(tmp7-tmp8)+tmp5*det_g-tmp11)*(2.0_ki*tmp6+det_g*z-tmp10)/&
+ &(tmp13*den3)*g3*num_b3-(8.0_ki*(a*f*num_b3-tmp1*num_b3)+4.0_ki*(tmp2*f*g3+tmp4*&
+ &tmp5*z+tmp5*tmp6*num_b3+tmp7*num_b3*z-(a*d*e*g3+tmp2*tmp3))+2.0_ki*(tmp1*e*e+c*&
+ &c*f*g3+tmp5*a*det_g*g3-(3.0_ki*tmp8*num_b3*z+tmp11*num_b3*z+tmp10*e*g3+tmp10*tm&
+ &p5*num_b3+tmp9*num_b3+tmp4*tmp5+tmp8*tmp8))+tmp8*tmp9+tmp5*c*det_g*g3+det_g*e*g&
+ &3*z-(d*det_g*g3*z+tmp12*num_b3))/tmp13)*g3+(2.0_ki*(tmp12+tmp1*tmp5)+1.0_ki/2.0&
+ &_ki*tmp3+tmp5*tmp8+tmp5*num_b3*z+e*g3*z-(tmp5*num_b3+tmp12*z))/den3)
+ !
+ case(4)
+ !
+ tmp1 = a*e
+ tmp2 = c*f
+ tmp3 = c*g1
+ tmp4 = c*d
+ tmp5 = d*e
+ tmp6 = c*g3
+ tmp7 = z*z
+ fg = (1.0_ki/2.0_ki*(2.0_ki*(a*g3*z-num_b3*z)+tmp6*z+3.0_ki*tmp7*num_b3+e*g3-d*g&
+ &3)/den3*z-((2.0_ki*(tmp2+tmp1*z+tmp7*det_g-tmp6)-(tmp4*z+tmp5))/(den3*den3)*g3*&
+ &num_b3*z+(2.0_ki*(tmp1+tmp2+det_g*z-tmp3)-(tmp5+tmp4))/(den1*den1)*g1*num_b1*z+&
+ &1.0_ki/2.0_ki*(3.0_ki*tmp3+e*g1-num_b1*z)/den1*z))
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = b*c
+ tmp3 = a*e
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = c*g1
+ tmp7 = e*e
+ tmp8 = c*det_g*g1
+ tmp9 = tmp6*num_b1
+ tmp10 = d*g1
+ tmp11 = c*c
+ tmp12 = e*g1
+ tmp13 = det_g*num_b1
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = d*e
+ tmp17 = det_g*e*g1
+ tmp18 = den1*den1
+ tmp19 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(3.0_ki*c*z+e*z)+4.0_ki*(2.0_ki*a+d+b*z)+g1)/den1-(&
+ &4.0_ki*(2.0_ki*(tmp5-tmp6)+tmp19-tmp16)*(2.0_ki*(tmp3-tmp4)+tmp15+tmp19-(det_g+&
+ &tmp14))/(tmp18*den1)*g1*num_b1+(3.0_ki*(tmp8*z+2.0_ki*tmp9*z)+4.0_ki*(2.0_ki*(t&
+ &mp1*num_b1-a*f*num_b1)+tmp2*f*g1+tmp4*num_b1*z+a*c*e*g1-(tmp5*num_b1*z+tmp4*e*g&
+ &1+tmp3*num_b1*z+tmp2*d*g1+tmp2*g1*g1))+2.0_ki*(tmp1*tmp7+tmp11*tmp12+tmp13*z+d*&
+ &d*num_b1+tmp11*f*g1+tmp14*num_b1*z+tmp16*num_b1*z+b*det_g*g1*z-(tmp15*num_b1*z+&
+ &tmp14*e*g1+tmp13*z*z+tmp10*tmp11+tmp9+tmp8+tmp6*tmp6))+tmp10*num_b1+tmp17*z+tmp&
+ &6*tmp7-(tmp12*num_b1+tmp17))/tmp18))*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = c*f
+ tmp3 = tmp2*num_b2
+ tmp4 = c*g2
+ tmp5 = tmp4*num_b2
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = tmp7*num_b2
+ tmp9 = c*d
+ tmp10 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z-d)+g2)/den2-(4.0_ki*(2.0_ki*(tmp2-tmp4)-tmp7)*&
+ &(2.0_ki*(a*e-b*d)+c*e-(det_g*z+tmp9))/(tmp10*den2)*g2*num_b2+(4.0_ki*(2.0_ki*(a&
+ &*g2*num_b2-a*f*num_b2)+tmp5+tmp3*z+tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2+tmp3))+2.0_ki&
+ &*(tmp8+tmp6*num_b2+tmp6*b*g2+c*c*f*g2-(tmp9*e*g2+tmp8*z+3.0_ki*tmp5*z+tmp4*tmp4&
+ &))+tmp4*tmp6+d*g2*num_b2+d*det_g*g2*z-e*g2*num_b2)/tmp10))*g2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*g3
+ tmp3 = c*g3
+ tmp4 = a*c
+ tmp5 = g3*g3
+ tmp6 = b*c
+ tmp7 = c*f
+ tmp8 = a*e
+ tmp9 = b*d
+ tmp10 = c*d
+ tmp11 = d*d
+ tmp12 = e*e
+ tmp13 = d*e
+ tmp14 = c*e
+ tmp15 = den3*den3
+ fg = (((8.0_ki*(a*f*num_b3-tmp2*num_b3)+2.0_ki*(tmp12*tmp2+tmp1*tmp14*num_b3+tmp&
+ &11*b*g3+tmp1*a*det_g*g3+tmp1*b*det_g*g3+tmp1*c*det_g*g3-(tmp1*tmp10*num_b3+tmp1&
+ &3*num_b3+tmp11*num_b3))+4.0_ki*(tmp7*num_b3+tmp1*tmp8*num_b3+tmp4*f*g3+tmp6*f*g&
+ &3+c*c*f*g3-(a*d*e*g3+tmp9*e*g3+tmp10*e*g3+tmp1*tmp9*num_b3+tmp5*tmp6+tmp4*tmp5+&
+ &tmp3*num_b3+tmp3*tmp3))+tmp11*tmp3+tmp12*tmp3+e*g3*num_b3-d*g3*num_b3)/tmp15-(4&
+ &.0_ki*(2.0_ki*(tmp7-tmp3)+tmp1*det_g-tmp13)*(2.0_ki*(tmp8-tmp9)+tmp14-tmp10)/(t&
+ &mp15*den3)*g3*num_b3+(2.0_ki*(tmp1*a+tmp1*b+tmp1*c)+d+e+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = z*z
+ tmp2 = a*e
+ tmp3 = b*d
+ tmp4 = c*d
+ tmp5 = c*e
+ tmp6 = c*f
+ tmp7 = d*e
+ tmp8 = c*g1
+ tmp9 = e*g1
+ tmp10 = tmp8*z
+ fg = (((2.0_ki*(tmp2-tmp3)+tmp5-tmp4)/(den3*den3)*tmp1*num_b3-(a+b+c)*tmp1/den3)&
+ &*g3+(1.0_ki/2.0_ki*d/den2*z-(2.0_ki*(tmp6-c*g2)-tmp7)/(den2*den2)*num_b2*z)*g2+&
+ &(3.0_ki/2.0_ki*tmp10+1.0_ki/2.0_ki*tmp9*z+1.0_ki/2.0_ki*num_b1*z+b*g1*z-(1.0_ki&
+ &/2.0_ki*tmp1*num_b1+1.0_ki/2.0_ki*tmp9+tmp8))/den1+(2.0_ki*(tmp8+tmp1*det_g+tmp&
+ &2*z+tmp6*z-(det_g*z+tmp3*z+tmp6+tmp10))+tmp7+tmp5*z-(tmp7*z+tmp4*z))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*g1
+ tmp2 = b*d
+ tmp3 = tmp2*num_b1
+ tmp4 = b*f
+ tmp5 = b*b
+ tmp6 = b*c
+ tmp7 = c*e
+ tmp8 = tmp7*num_b1
+ tmp9 = c*f
+ tmp10 = det_g*num_b1
+ tmp11 = e*e
+ tmp12 = b*det_g*g1
+ tmp13 = c*g1
+ tmp14 = e*g1
+ tmp15 = d*e
+ tmp16 = den1*den1
+ fg = (((c+e+2.0_ki*b*z)/den1+4.0_ki*(2.0_ki*tmp2+det_g-tmp7)*(4.0_ki*(tmp4-tmp1)&
+ &+2.0_ki*(tmp9-tmp13)+det_g*z-(det_g+tmp15+tmp11))/(tmp16*den1)*g1*num_b1-(8.0_k&
+ &i*(tmp5*f*g1-(tmp5*d*g1+tmp4*num_b1+tmp3+tmp1*tmp1))+4.0_ki*(tmp8+tmp1*num_b1+t&
+ &mp3*z+tmp6*e*g1+tmp6*f*g1+a*e*num_b1-(tmp6*d*g1+tmp2*e*g1+tmp9*num_b1+tmp6*g1*g&
+ &1))+2.0_ki*(tmp10*z+tmp11*num_b1+tmp12*z+tmp13*num_b1+tmp14*c*c+tmp15*num_b1-(c&
+ &*det_g*g1+c*d*num_b1+tmp8*z+tmp1*tmp11+3.0_ki*tmp12+tmp10))+tmp11*tmp13-(det_g*&
+ &e*g1+tmp14*num_b1))/tmp16)*g1)
+ !
+ case(2)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b2
+ tmp3 = b*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = c*f
+ tmp6 = tmp5*num_b2
+ tmp7 = c*g2
+ tmp8 = tmp7*num_b2
+ tmp9 = e*e
+ tmp10 = b*c
+ tmp11 = g2*g2
+ tmp12 = b*d
+ tmp13 = tmp12*num_b2
+ tmp14 = d*e
+ tmp15 = tmp14*num_b2
+ tmp16 = det_g*num_b2
+ tmp17 = z*z
+ tmp18 = tmp16*z
+ tmp19 = c*d
+ tmp20 = c*e
+ tmp21 = tmp20*num_b2
+ tmp22 = num_b2*z
+ tmp23 = e*g2
+ tmp24 = den2*den2
+ tmp25 = d*g2
+ fg = ((4.0_ki*(2.0_ki*tmp12+det_g*z-tmp20)*(4.0_ki*(tmp1-tmp3)+2.0_ki*(tmp5-tmp7&
+ &)-(tmp17*det_g+tmp9+tmp14))/(tmp24*den2)*g2*num_b2-(16.0_ki*(tmp4-tmp2)+6.0_ki*&
+ &(-(tmp8*z+2.0_ki*tmp4*z))+8.0_ki*(tmp8+tmp2*z-tmp6)+4.0_ki*(tmp15+tmp16*tmp17+t&
+ &mp6*z+tmp9*num_b2+tmp10*f*g2+tmp12*e*g2+a*e*num_b2-(tmp17*tmp18+tmp13*tmp17+tmp&
+ &10*tmp11+tmp13))+2.0_ki*(tmp21+tmp17*tmp21+tmp3*d*d+c*c*f*g2+det_g*e*g2*z-(tmp1&
+ &9*e*g2+tmp22*tmp9+tmp19*num_b2+tmp15*z+tmp7*tmp7+tmp18))+d*det_g*g2*z-(tmp17*c*&
+ &det_g*g2+3.0_ki*tmp7*tmp9+tmp23*num_b2))/tmp24)*g2+(2.0_ki*(tmp17*num_b2+tmp23*&
+ &z-(a*g2+tmp25+2.0_ki*tmp23))+1.0_ki/2.0_ki*tmp11+tmp25*z-(tmp17*tmp7+tmp17*tmp2&
+ &2+tmp7+tmp22))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*c
+ tmp6 = f*g3
+ tmp7 = c*f
+ tmp8 = tmp7*num_b3
+ tmp9 = c*g3
+ tmp10 = tmp9*num_b3
+ tmp11 = e*e
+ tmp12 = b*d
+ tmp13 = d*e
+ tmp14 = tmp13*num_b3
+ tmp15 = c*d
+ tmp16 = c*e
+ tmp17 = den3*den3
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(-(e*z+d*z))+4.0_ki*(a+b+c+d+e)-g3)/den3+4.0_ki*(2.&
+ &0_ki*(2.0_ki*(tmp1-tmp3)+tmp7-tmp9)-(tmp13+tmp11))*(2.0_ki*tmp12+det_g*z-tmp16)&
+ &/(tmp17*den3)*g3*num_b3-(4.0_ki*(tmp14+tmp11*num_b3+tmp8*z+a*e*num_b3-tmp12*num&
+ &_b3)+8.0_ki*(2.0_ki*(tmp4-tmp2)+tmp10+tmp3*tmp3+tmp2*z+tmp5*g3*g3-(tmp5*f*g3+tm&
+ &p6*b*b+tmp8))+2.0_ki*(3.0_ki*(-(2.0_ki*tmp4*z+tmp10*z))+tmp9*tmp9+tmp11*tmp3+tm&
+ &p11*tmp9+tmp16*num_b3+tmp15*e*g3-(tmp11*num_b3*z+tmp6*c*c+tmp3*d*d+tmp15*num_b3&
+ &+tmp14*z))-(det_g*e*g3*z+d*det_g*g3*z+e*g3*num_b3))/tmp17)*g3)
+ !
+ case(4)
+ !
+ tmp1 = b*g1
+ tmp2 = c*g1
+ tmp3 = b*f
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = tmp4*z
+ tmp7 = e*e
+ tmp8 = c*e
+ tmp9 = d*e
+ tmp10 = tmp8*z
+ tmp11 = c*g2
+ tmp12 = z*z
+ fg = ((-((4.0_ki*(tmp3-b*g3)+2.0_ki*(tmp5-c*g3)-(tmp9+tmp7))/(den3*den3)*num_b3*&
+ &z+1.0_ki/2.0_ki*(d+e)/den3*z))*g3+(tmp1*z+1.0_ki/2.0_ki*num_b1*z-(1.0_ki/2.0_ki&
+ &*e*g1+1.0_ki/2.0_ki*num_b1+tmp2+3.0_ki*tmp1))/den1+(2.0_ki*(2.0_ki*(b*g2-tmp3)+&
+ &tmp11+tmp6+tmp12*det_g-tmp5)+tmp7+tmp9-tmp10)/(den2*den2)*g2*num_b2*z-((2.0_ki*&
+ &(2.0_ki*(tmp3-tmp1)+tmp5+tmp6+det_g*z-(det_g+tmp4+tmp2))+tmp8-(tmp9+tmp7+tmp10)&
+ &)/(den1*den1)*g1*num_b1+1.0_ki/2.0_ki*(2.0_ki*(num_b2-(2.0_ki*num_b2*z+e*g2))+t&
+ &mp11*z+3.0_ki*tmp12*num_b2-d*g2)/den2*z))
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = b*c
+ tmp3 = a*e
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = c*g1
+ tmp7 = e*e
+ tmp8 = c*det_g*g1
+ tmp9 = tmp6*num_b1
+ tmp10 = d*g1
+ tmp11 = c*c
+ tmp12 = e*g1
+ tmp13 = det_g*num_b1
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = d*e
+ tmp17 = det_g*e*g1
+ tmp18 = den1*den1
+ tmp19 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(3.0_ki*c*z+e*z)+4.0_ki*(2.0_ki*a+d+b*z)+g1)/den1-(&
+ &4.0_ki*(2.0_ki*(tmp5-tmp6)+tmp19-tmp16)*(2.0_ki*(tmp3-tmp4)+tmp15+tmp19-(det_g+&
+ &tmp14))/(tmp18*den1)*g1*num_b1+(3.0_ki*(tmp8*z+2.0_ki*tmp9*z)+4.0_ki*(2.0_ki*(t&
+ &mp1*num_b1-a*f*num_b1)+tmp2*f*g1+tmp4*num_b1*z+a*c*e*g1-(tmp5*num_b1*z+tmp4*e*g&
+ &1+tmp3*num_b1*z+tmp2*d*g1+tmp2*g1*g1))+2.0_ki*(tmp1*tmp7+tmp11*tmp12+tmp13*z+d*&
+ &d*num_b1+tmp11*f*g1+tmp14*num_b1*z+tmp16*num_b1*z+b*det_g*g1*z-(tmp15*num_b1*z+&
+ &tmp14*e*g1+tmp13*z*z+tmp10*tmp11+tmp9+tmp8+tmp6*tmp6))+tmp10*num_b1+tmp17*z+tmp&
+ &6*tmp7-(tmp12*num_b1+tmp17))/tmp18))*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = c*f
+ tmp3 = tmp2*num_b2
+ tmp4 = c*g2
+ tmp5 = tmp4*num_b2
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = tmp7*num_b2
+ tmp9 = c*d
+ tmp10 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z-d)+g2)/den2-(4.0_ki*(2.0_ki*(tmp2-tmp4)-tmp7)*&
+ &(2.0_ki*(a*e-b*d)+c*e-(det_g*z+tmp9))/(tmp10*den2)*g2*num_b2+(4.0_ki*(2.0_ki*(a&
+ &*g2*num_b2-a*f*num_b2)+tmp5+tmp3*z+tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2+tmp3))+2.0_ki&
+ &*(tmp8+tmp6*num_b2+tmp6*b*g2+c*c*f*g2-(tmp9*e*g2+tmp8*z+3.0_ki*tmp5*z+tmp4*tmp4&
+ &))+tmp4*tmp6+d*g2*num_b2+d*det_g*g2*z-e*g2*num_b2)/tmp10))*g2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*g3
+ tmp3 = c*g3
+ tmp4 = a*c
+ tmp5 = g3*g3
+ tmp6 = b*c
+ tmp7 = c*f
+ tmp8 = a*e
+ tmp9 = b*d
+ tmp10 = c*d
+ tmp11 = d*d
+ tmp12 = e*e
+ tmp13 = d*e
+ tmp14 = c*e
+ tmp15 = den3*den3
+ fg = (((8.0_ki*(a*f*num_b3-tmp2*num_b3)+2.0_ki*(tmp12*tmp2+tmp1*tmp14*num_b3+tmp&
+ &11*b*g3+tmp1*a*det_g*g3+tmp1*b*det_g*g3+tmp1*c*det_g*g3-(tmp1*tmp10*num_b3+tmp1&
+ &3*num_b3+tmp11*num_b3))+4.0_ki*(tmp7*num_b3+tmp1*tmp8*num_b3+tmp4*f*g3+tmp6*f*g&
+ &3+c*c*f*g3-(a*d*e*g3+tmp9*e*g3+tmp10*e*g3+tmp1*tmp9*num_b3+tmp5*tmp6+tmp4*tmp5+&
+ &tmp3*num_b3+tmp3*tmp3))+tmp11*tmp3+tmp12*tmp3+e*g3*num_b3-d*g3*num_b3)/tmp15-(4&
+ &.0_ki*(2.0_ki*(tmp7-tmp3)+tmp1*det_g-tmp13)*(2.0_ki*(tmp8-tmp9)+tmp14-tmp10)/(t&
+ &mp15*den3)*g3*num_b3+(2.0_ki*(tmp1*a+tmp1*b+tmp1*c)+d+e+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = z*z
+ tmp2 = a*e
+ tmp3 = b*d
+ tmp4 = c*d
+ tmp5 = c*e
+ tmp6 = c*f
+ tmp7 = d*e
+ tmp8 = c*g1
+ tmp9 = e*g1
+ tmp10 = tmp8*z
+ fg = (((2.0_ki*(tmp2-tmp3)+tmp5-tmp4)/(den3*den3)*tmp1*num_b3-(a+b+c)*tmp1/den3)&
+ &*g3+(1.0_ki/2.0_ki*d/den2*z-(2.0_ki*(tmp6-c*g2)-tmp7)/(den2*den2)*num_b2*z)*g2+&
+ &(3.0_ki/2.0_ki*tmp10+1.0_ki/2.0_ki*tmp9*z+1.0_ki/2.0_ki*num_b1*z+b*g1*z-(1.0_ki&
+ &/2.0_ki*tmp1*num_b1+1.0_ki/2.0_ki*tmp9+tmp8))/den1+(2.0_ki*(tmp8+tmp1*det_g+tmp&
+ &2*z+tmp6*z-(det_g*z+tmp3*z+tmp6+tmp10))+tmp7+tmp5*z-(tmp7*z+tmp4*z))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*g1
+ tmp2 = a*g1
+ tmp3 = b*c
+ tmp4 = d*g1
+ tmp5 = b*b
+ tmp6 = tmp4*tmp5
+ tmp7 = f*g1
+ tmp8 = tmp3*d
+ tmp9 = tmp8*g1
+ tmp10 = b*d
+ tmp11 = tmp10*num_b1
+ tmp12 = c*det_g
+ tmp13 = tmp12*g1
+ tmp14 = c*g1
+ tmp15 = tmp14*num_b1
+ tmp16 = e*g1
+ tmp17 = c*c
+ tmp18 = tmp16*tmp17
+ tmp19 = det_g*num_b1
+ tmp20 = a*c*e
+ tmp21 = tmp20*g1
+ tmp22 = tmp3*e
+ tmp23 = tmp22*g1
+ tmp24 = b*det_g
+ tmp25 = tmp24*g1
+ tmp26 = c*e
+ tmp27 = tmp26*num_b1
+ tmp28 = tmp13*z
+ tmp29 = d*d
+ tmp30 = e*e
+ tmp31 = tmp17*tmp4
+ tmp32 = det_g*e*g1
+ tmp33 = c*d
+ tmp34 = den1*den1
+ tmp35 = d*f
+ tmp36 = tmp12*f
+ tmp37 = tmp10*det_g
+ tmp38 = det_g*det_g
+ tmp39 = d*det_g*e
+ tmp12 = tmp12*e
+ tmp40 = det_g*z
+ fg = (((3.0_ki*(2.0_ki*(tmp15*z-tmp25)+tmp28)+4.0_ki*(2.0_ki*(tmp11*z+tmp2*num_b&
+ &1+tmp5*tmp7+tmp3*f*g1-(a*f*num_b1+tmp10*e*g1+tmp3*g1*g1+tmp9+tmp6+tmp1*tmp1))+t&
+ &mp18+tmp21+tmp23+tmp19*z+tmp25*z-(c*f*num_b1*z+a*e*num_b1*z+tmp27*z+tmp1*num_b1&
+ &+tmp15+tmp13+tmp11))+2.0_ki*(tmp27+tmp14*tmp30+tmp17*tmp7+tmp2*tmp30+tmp29*num_&
+ &b1+tmp33*num_b1*z+d*e*num_b1*z-(tmp33*e*g1+tmp19*z*z+tmp16*num_b1+tmp1*tmp30+tm&
+ &p32+tmp31+tmp19+tmp14*tmp14))+tmp32*z+tmp4*num_b1)/tmp34+4.0_ki*(2.0_ki*(tmp31+&
+ &tmp37+tmp39+tmp10*tmp30+tmp12*z+tmp36*z+a*det_g*e*z-(tmp30*a*d+tmp38*z+tmp30*tm&
+ &p33+tmp17*tmp35+tmp28))+4.0_ki*(2.0_ki*(tmp6+tmp9-(tmp8*f+tmp35*tmp5))+tmp13+tm&
+ &p25+tmp20*f+tmp22*f+tmp17*e*f+tmp29*b*e-(tmp37*z+tmp24*f+tmp36+tmp23+tmp21+tmp1&
+ &8))+tmp38+tmp40*tmp40+tmp26*tmp29+tmp30*det_g-(tmp33*det_g*z+tmp39*z+tmp26*tmp3&
+ &0+tmp12))/(tmp34*den1)*g1*num_b1-1.0_ki/2.0_ki*(8.0_ki*(a+b*z)+4.0_ki*(d-b)+2.0&
+ &_ki*(3.0_ki*c*z+e*z)+g1)/den1)*g1)
+ !
+ case(2)
+ !
+ tmp1 = b*g2
+ tmp2 = tmp1*num_b2
+ tmp3 = c*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = b*f*num_b2
+ tmp6 = c*f*num_b2
+ tmp7 = a*c
+ tmp8 = g2*g2
+ tmp9 = b*c
+ tmp10 = d*d
+ tmp11 = c*c
+ tmp12 = d*e*num_b2
+ tmp13 = det_g*num_b2
+ tmp14 = z*z
+ tmp15 = a*d
+ tmp16 = b*d
+ tmp17 = c*d
+ tmp18 = e*e
+ tmp19 = e*g2
+ tmp20 = num_b2*z
+ tmp21 = c*e
+ tmp22 = d*det_g
+ tmp23 = d*g2
+ tmp24 = c*det_g
+ tmp25 = tmp24*g2
+ tmp26 = den2*den2
+ tmp27 = d*f
+ tmp28 = b*b
+ tmp29 = tmp9*d
+ tmp30 = tmp7*e
+ tmp31 = tmp9*e
+ tmp32 = b*det_g
+ tmp33 = det_g*z
+ fg = (((12.0_ki*(-(tmp4*z+tmp2*z))+8.0_ki*(tmp2+tmp4+tmp5*z+tmp6*z+a*g2*num_b2-(&
+ &a*f*num_b2+tmp6+tmp5))+2.0_ki*(tmp10*num_b2+tmp13*tmp14+tmp18*num_b2+tmp14*tmp2&
+ &1*num_b2+tmp22*g2*z+det_g*e*g2*z-(tmp19*num_b2+tmp18*tmp20))+4.0_ki*(tmp12+tmp1&
+ &*tmp10+tmp11*f*g2+tmp16*e*g2+tmp7*f*g2+tmp9*f*g2-(tmp17*e*g2+tmp15*e*g2+tmp14*t&
+ &mp16*num_b2+tmp13*tmp14*z+tmp8*tmp9+tmp7*tmp8+tmp12*z+tmp3*tmp3))+tmp10*tmp3+tm&
+ &p23*num_b2-(3.0_ki*tmp18*tmp3+tmp14*tmp25))/tmp26+4.0_ki*(8.0_ki*(tmp23*tmp28+t&
+ &mp29*g2-(tmp29*f+tmp27*tmp28))+2.0_ki*(tmp11*tmp23+tmp16*tmp18+tmp14*tmp16*det_&
+ &g+tmp22*e*z-(tmp17*tmp18+tmp15*tmp18+tmp11*tmp27))+4.0_ki*(tmp25*z+tmp30*f+tmp3&
+ &1*f+tmp10*b*e+tmp11*e*f+tmp32*g2*z-(tmp32*f*z+tmp24*f*z+tmp31*g2+tmp30*g2+tmp11&
+ &*tmp19))+tmp10*tmp21+tmp18*tmp33+tmp33*tmp33*z-(tmp14*tmp24*e+tmp18*tmp21))/(tm&
+ &p26*den2)*g2*num_b2)*g2+(2.0_ki*(tmp19+tmp23-(tmp23*z+tmp19*z))+tmp14*tmp20+tmp&
+ &14*tmp3-(tmp14*num_b2+tmp8))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*c
+ tmp2 = g3*g3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = c*g3
+ tmp6 = f*g3
+ tmp7 = c*c
+ tmp8 = c*d
+ tmp9 = tmp5*num_b3
+ tmp10 = a*g3
+ tmp11 = b*f*num_b3
+ tmp12 = b*b
+ tmp13 = c*f*num_b3
+ tmp14 = a*c
+ tmp15 = d*d
+ tmp16 = d*e*num_b3
+ tmp17 = a*d
+ tmp18 = z*z
+ tmp19 = b*d
+ tmp20 = e*e
+ tmp21 = e*g3
+ tmp22 = a*det_g
+ tmp23 = b*det_g
+ tmp24 = tmp23*g3
+ tmp25 = c*det_g
+ tmp26 = tmp25*g3
+ tmp27 = c*e
+ tmp28 = d*g3
+ tmp29 = d*det_g
+ tmp30 = den3*den3
+ tmp31 = d*f
+ tmp32 = tmp1*d
+ tmp33 = tmp14*e
+ tmp34 = tmp1*e
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+4.0_ki*(tmp18*a+tmp18*b+tmp18*c)+3.0_ki*g&
+ &3)/den3+4.0_ki*(2.0_ki*(tmp19*tmp20+tmp26*z+tmp28*tmp7+tmp18*tmp22*e-(tmp25*f*z&
+ &+tmp18*tmp19*det_g+tmp31*tmp7+tmp20*tmp8+tmp17*tmp20))+4.0_ki*(2.0_ki*(tmp12*tm&
+ &p28+tmp32*g3-(tmp32*f+tmp12*tmp31))+tmp24*z+tmp33*f+tmp34*f+tmp15*b*e+tmp7*e*f-&
+ &(tmp23*f*z+tmp34*g3+tmp33*g3+tmp21*tmp7))+tmp15*tmp27+tmp18*tmp25*e+tmp20*det_g&
+ &*z+tmp29*e*z-(tmp18*tmp8*det_g+tmp20*tmp27))/(tmp30*den3)*g3*num_b3-(6.0_ki*(2.&
+ &0_ki*(tmp4*z+tmp1*f*g3-tmp1*tmp2)+tmp6*tmp7+tmp9*z-(tmp8*e*g3+tmp5*tmp5))+4.0_k&
+ &i*(2.0_ki*(tmp11+tmp13+tmp12*tmp6+a*f*num_b3-(tmp11*z+tmp10*num_b3+tmp9+tmp4+tm&
+ &p3*tmp3))+tmp15*tmp3+tmp14*f*g3+tmp18*a*e*num_b3-(tmp19*e*g3+tmp18*tmp19*num_b3&
+ &+tmp17*e*g3+tmp14*tmp2+tmp13*z+tmp16))+2.0_ki*(tmp10*tmp20+tmp16*z+tmp18*tmp24+&
+ &tmp18*tmp26+tmp21*num_b3+tmp18*tmp22*g3+tmp18*tmp27*num_b3+tmp20*num_b3*z-(tmp1&
+ &8*tmp8*num_b3+tmp20*num_b3+tmp20*tmp3+tmp15*num_b3))+tmp15*tmp5+tmp29*g3*z+det_&
+ &g*e*g3*z-(tmp28*num_b3+tmp20*tmp5))/tmp30)*g3)
+ !
+ case(4)
+ !
+ tmp1 = c*g1
+ tmp2 = b*g1
+ tmp3 = e*g1
+ tmp4 = tmp1*z
+ tmp5 = z*z
+ tmp6 = b*f
+ tmp7 = c*f
+ tmp8 = b*d
+ tmp9 = tmp8*z
+ tmp10 = d*e
+ tmp11 = tmp5*det_g
+ tmp12 = a*e*z
+ tmp13 = c*e
+ tmp14 = tmp13*z
+ tmp15 = e*e
+ tmp16 = c*d*z
+ tmp17 = c*g2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z-(4.0_ki*(b*g3-tmp6)+2.0_k&
+ &i*(tmp12+c*g3-(tmp9+tmp7))+tmp10+tmp14+tmp15-tmp16)/(den3*den3)*num_b3*z)*g3+(2&
+ &.0_ki*(tmp1-tmp2*z)+3.0_ki/2.0_ki*(2.0_ki*tmp2-tmp4)+tmp3+1.0_ki/2.0_ki*num_b1+&
+ &1.0_ki/2.0_ki*tmp5*num_b1-(num_b1*z+1.0_ki/2.0_ki*tmp3*z))/den1+1.0_ki/2.0_ki*(&
+ &2.0_ki*(-(num_b2*z+e*g2+d*g2))+tmp17*z+3.0_ki*tmp5*num_b2)/den2*z-((2.0_ki*(2.0&
+ &_ki*(tmp17+b*g2-(tmp7+tmp6))+tmp10+tmp11+tmp9)+tmp15-tmp14)/(den2*den2)*g2*num_&
+ &b2*z+(2.0_ki*(2.0_ki*(tmp1+tmp2-(det_g*z+tmp9+tmp7+tmp6))+tmp10+tmp11+tmp12+tmp&
+ &14+tmp8+det_g+tmp7*z-tmp4)+tmp15-(tmp10*z+tmp16+tmp13))/(den1*den1)*g1*num_b1))
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*c
+ tmp2 = c*f
+ tmp3 = b*d
+ tmp4 = c*g1
+ tmp5 = e*g1
+ tmp6 = d*e
+ tmp7 = c*e
+ tmp8 = den1*den1
+ fg = (((4.0_ki*(tmp1*f*g1+tmp3*num_b1*z+a*e*num_b1-(tmp3*e*g1+tmp1*d*g1+tmp2*num&
+ &_b1+tmp1*g1*g1))+2.0_ki*(tmp4*num_b1+tmp5*c*c+tmp6*num_b1+det_g*num_b1*z+b*det_&
+ &g*g1*z-(c*det_g*g1+c*d*num_b1+tmp7*num_b1*z))+tmp4*e*e-(det_g*e*g1+tmp5*num_b1)&
+ &)/tmp8-(4.0_ki*(2.0_ki*(tmp2-tmp4)+det_g*z-tmp6)*(2.0_ki*tmp3+det_g-tmp7)/(tmp8&
+ &*den1)*g1*num_b1+(c+e+2.0_ki*b*z)/den1))*g1)
+ !
+ case(2)
+ !
+ tmp1 = c*f
+ tmp2 = tmp1*num_b2
+ tmp3 = c*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = d*e
+ tmp6 = tmp5*num_b2
+ tmp7 = c*d
+ tmp8 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(4.0_ki*(a+d)-(2.0_ki*d*z+g2))/den2+(4.0_ki*(2.0_ki*(tmp4-t&
+ &mp2)+tmp6+tmp2*z+a*e*num_b2)+2.0_ki*(b*d*d*g2+c*c*f*g2-(tmp7*e*g2+tmp7*num_b2+t&
+ &mp6*z+3.0_ki*tmp4*z+tmp3*tmp3))+d*det_g*g2*z-e*g2*num_b2)/tmp8-4.0_ki*(2.0_ki*(&
+ &tmp1-tmp3)-tmp5)*(2.0_ki*b*d+det_g*z-c*e)/(tmp8*den2)*g2*num_b2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = c*f
+ tmp2 = tmp1*num_b3
+ tmp3 = c*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*c
+ tmp6 = g3*g3
+ tmp7 = d*e
+ tmp8 = tmp7*num_b3
+ tmp9 = det_g*num_b3
+ tmp10 = z*z
+ tmp11 = tmp9*z
+ tmp12 = b*d
+ tmp13 = b*g3
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = e*g3
+ tmp17 = den3*den3
+ tmp18 = d*g3
+ tmp19 = num_b3*z
+ fg = (((8.0_ki*(tmp4-tmp2)+4.0_ki*(tmp8+tmp10*tmp11+tmp2*z+tmp5*tmp6+tmp10*tmp12&
+ &*num_b3+tmp12*e*g3+a*e*num_b3-(tmp5*f*g3+tmp10*tmp9))+2.0_ki*(tmp11+tmp3*tmp3+t&
+ &mp14*e*g3-(tmp10*b*det_g*g3+c*c*f*g3+tmp10*tmp15*num_b3+tmp8*z+3.0_ki*tmp4*z+tm&
+ &p14*num_b3+tmp13*d*d))+det_g*e*g3*z-(d*det_g*g3*z+tmp10*c*det_g*g3+tmp3*e*e+tmp&
+ &16*num_b3))/tmp17-4.0_ki*(2.0_ki*(tmp1-tmp3)+tmp10*det_g-tmp7)*(2.0_ki*tmp12+de&
+ &t_g*z-tmp15)/(tmp17*den3)*g3*num_b3)*g3+(2.0_ki*(tmp16+tmp10*tmp13+tmp10*num_b3&
+ &-(a*g3+tmp18))+1.0_ki/2.0_ki*tmp6+tmp10*tmp3+tmp18*z-(tmp16*z+tmp10*tmp19+tmp3+&
+ &tmp19))/den3)
+ !
+ case(4)
+ !
+ tmp1 = c*g1
+ tmp2 = c*f
+ tmp3 = b*d*z
+ tmp4 = d*e
+ tmp5 = c*e*z
+ tmp6 = c*g3
+ tmp7 = z*z
+ fg = (((2.0_ki*(tmp2-c*g2)-tmp4)/(den2*den2)*num_b2*z-1.0_ki/2.0_ki*d/den2*z)*g2&
+ &+(tmp1+1.0_ki/2.0_ki*e*g1-(b*g1*z+1.0_ki/2.0_ki*num_b1*z))/den1+1.0_ki/2.0_ki*(&
+ &2.0_ki*(2.0_ki*num_b3*z+b*g3*z-num_b3)+tmp6*z+d*g3-(e*g3+3.0_ki*tmp7*num_b3))/d&
+ &en3*z+(2.0_ki*(tmp2+tmp3+det_g*z-tmp1)-(tmp5+tmp4))/(den1*den1)*g1*num_b1+(2.0_&
+ &ki*(tmp2+tmp3+tmp7*det_g-tmp6)-(tmp5+tmp4))/(den3*den3)*g3*num_b3*z)
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = a*e
+ tmp3 = c*f
+ tmp4 = c*g1
+ tmp5 = d*g1
+ tmp6 = c*c
+ tmp7 = c*d
+ tmp8 = d*e
+ tmp9 = den1*den1
+ tmp10 = det_g*z
+ fg = (((3.0_ki*(2.0_ki*tmp4*num_b1*z+c*det_g*g1*z)+4.0_ki*(2.0_ki*(tmp1*num_b1-a&
+ &*f*num_b1)+a*c*e*g1-(tmp3*num_b1*z+tmp2*num_b1*z))+2.0_ki*(tmp1*e*e+d*d*num_b1+&
+ &tmp6*f*g1+tmp7*num_b1*z+tmp8*num_b1*z-(det_g*num_b1*z*z+tmp7*e*g1+tmp5*tmp6+tmp&
+ &4*tmp4))+tmp5*num_b1+det_g*e*g1*z)/tmp9+4.0_ki*(2.0_ki*(tmp3-tmp4)+tmp10-tmp8)*&
+ &(tmp10+2.0_ki*tmp2-tmp7)/(tmp9*den1)*g1*num_b1-1.0_ki/2.0_ki*(4.0_ki*(2.0_ki*a+&
+ &d)+2.0_ki*(3.0_ki*c*z+e*z)+g1)/den1)*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = d*d
+ tmp3 = c*g2
+ tmp4 = den2*den2
+ fg = (((8.0_ki*(a*g2*num_b2-a*f*num_b2)+4.0_ki*(tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2))&
+ &+tmp2*tmp3+2.0_ki*tmp2*num_b2+d*g2*num_b2)/tmp4+4.0_ki*(2.0_ki*(c*f-tmp3)-d*e)*&
+ &(2.0_ki*a*e-c*d)/(tmp4*den2)*g2*num_b2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*c
+ tmp3 = g3*g3
+ tmp4 = det_g*num_b3
+ tmp5 = z*z
+ tmp6 = a*e
+ tmp7 = c*f
+ tmp8 = c*g3
+ tmp9 = d*d
+ tmp10 = c*d
+ tmp11 = d*e
+ tmp12 = d*g3
+ tmp13 = den3*den3
+ fg = ((4.0_ki*(2.0_ki*(tmp7-tmp8)+tmp5*det_g-tmp11)*(2.0_ki*tmp6+det_g*z-tmp10)/&
+ &(tmp13*den3)*g3*num_b3-(8.0_ki*(a*f*num_b3-tmp1*num_b3)+4.0_ki*(tmp2*f*g3+tmp4*&
+ &tmp5*z+tmp5*tmp6*num_b3+tmp7*num_b3*z-(a*d*e*g3+tmp2*tmp3))+2.0_ki*(tmp1*e*e+c*&
+ &c*f*g3+tmp5*a*det_g*g3-(3.0_ki*tmp8*num_b3*z+tmp11*num_b3*z+tmp10*e*g3+tmp10*tm&
+ &p5*num_b3+tmp9*num_b3+tmp4*tmp5+tmp8*tmp8))+tmp8*tmp9+tmp5*c*det_g*g3+det_g*e*g&
+ &3*z-(d*det_g*g3*z+tmp12*num_b3))/tmp13)*g3+(2.0_ki*(tmp12+tmp1*tmp5)+1.0_ki/2.0&
+ &_ki*tmp3+tmp5*tmp8+tmp5*num_b3*z+e*g3*z-(tmp5*num_b3+tmp12*z))/den3)
+ !
+ case(4)
+ !
+ tmp1 = a*e
+ tmp2 = c*f
+ tmp3 = c*g1
+ tmp4 = c*d
+ tmp5 = d*e
+ tmp6 = c*g3
+ tmp7 = z*z
+ fg = (1.0_ki/2.0_ki*(2.0_ki*(a*g3*z-num_b3*z)+tmp6*z+3.0_ki*tmp7*num_b3+e*g3-d*g&
+ &3)/den3*z-((2.0_ki*(tmp2+tmp1*z+tmp7*det_g-tmp6)-(tmp4*z+tmp5))/(den3*den3)*g3*&
+ &num_b3*z+(2.0_ki*(tmp1+tmp2+det_g*z-tmp3)-(tmp5+tmp4))/(den1*den1)*g1*num_b1*z+&
+ &1.0_ki/2.0_ki*(3.0_ki*tmp3+e*g1-num_b1*z)/den1*z))
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = b*c
+ tmp3 = a*e
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = c*g1
+ tmp7 = e*e
+ tmp8 = c*det_g*g1
+ tmp9 = tmp6*num_b1
+ tmp10 = d*g1
+ tmp11 = c*c
+ tmp12 = e*g1
+ tmp13 = det_g*num_b1
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = d*e
+ tmp17 = det_g*e*g1
+ tmp18 = den1*den1
+ tmp19 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(3.0_ki*c*z+e*z)+4.0_ki*(2.0_ki*a+d+b*z)+g1)/den1-(&
+ &4.0_ki*(2.0_ki*(tmp5-tmp6)+tmp19-tmp16)*(2.0_ki*(tmp3-tmp4)+tmp15+tmp19-(det_g+&
+ &tmp14))/(tmp18*den1)*g1*num_b1+(3.0_ki*(tmp8*z+2.0_ki*tmp9*z)+4.0_ki*(2.0_ki*(t&
+ &mp1*num_b1-a*f*num_b1)+tmp2*f*g1+tmp4*num_b1*z+a*c*e*g1-(tmp5*num_b1*z+tmp4*e*g&
+ &1+tmp3*num_b1*z+tmp2*d*g1+tmp2*g1*g1))+2.0_ki*(tmp1*tmp7+tmp11*tmp12+tmp13*z+d*&
+ &d*num_b1+tmp11*f*g1+tmp14*num_b1*z+tmp16*num_b1*z+b*det_g*g1*z-(tmp15*num_b1*z+&
+ &tmp14*e*g1+tmp13*z*z+tmp10*tmp11+tmp9+tmp8+tmp6*tmp6))+tmp10*num_b1+tmp17*z+tmp&
+ &6*tmp7-(tmp12*num_b1+tmp17))/tmp18))*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = c*f
+ tmp3 = tmp2*num_b2
+ tmp4 = c*g2
+ tmp5 = tmp4*num_b2
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = tmp7*num_b2
+ tmp9 = c*d
+ tmp10 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z-d)+g2)/den2-(4.0_ki*(2.0_ki*(tmp2-tmp4)-tmp7)*&
+ &(2.0_ki*(a*e-b*d)+c*e-(det_g*z+tmp9))/(tmp10*den2)*g2*num_b2+(4.0_ki*(2.0_ki*(a&
+ &*g2*num_b2-a*f*num_b2)+tmp5+tmp3*z+tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2+tmp3))+2.0_ki&
+ &*(tmp8+tmp6*num_b2+tmp6*b*g2+c*c*f*g2-(tmp9*e*g2+tmp8*z+3.0_ki*tmp5*z+tmp4*tmp4&
+ &))+tmp4*tmp6+d*g2*num_b2+d*det_g*g2*z-e*g2*num_b2)/tmp10))*g2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*g3
+ tmp3 = c*g3
+ tmp4 = a*c
+ tmp5 = g3*g3
+ tmp6 = b*c
+ tmp7 = c*f
+ tmp8 = a*e
+ tmp9 = b*d
+ tmp10 = c*d
+ tmp11 = d*d
+ tmp12 = e*e
+ tmp13 = d*e
+ tmp14 = c*e
+ tmp15 = den3*den3
+ fg = (((8.0_ki*(a*f*num_b3-tmp2*num_b3)+2.0_ki*(tmp12*tmp2+tmp1*tmp14*num_b3+tmp&
+ &11*b*g3+tmp1*a*det_g*g3+tmp1*b*det_g*g3+tmp1*c*det_g*g3-(tmp1*tmp10*num_b3+tmp1&
+ &3*num_b3+tmp11*num_b3))+4.0_ki*(tmp7*num_b3+tmp1*tmp8*num_b3+tmp4*f*g3+tmp6*f*g&
+ &3+c*c*f*g3-(a*d*e*g3+tmp9*e*g3+tmp10*e*g3+tmp1*tmp9*num_b3+tmp5*tmp6+tmp4*tmp5+&
+ &tmp3*num_b3+tmp3*tmp3))+tmp11*tmp3+tmp12*tmp3+e*g3*num_b3-d*g3*num_b3)/tmp15-(4&
+ &.0_ki*(2.0_ki*(tmp7-tmp3)+tmp1*det_g-tmp13)*(2.0_ki*(tmp8-tmp9)+tmp14-tmp10)/(t&
+ &mp15*den3)*g3*num_b3+(2.0_ki*(tmp1*a+tmp1*b+tmp1*c)+d+e+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = z*z
+ tmp2 = a*e
+ tmp3 = b*d
+ tmp4 = c*d
+ tmp5 = c*e
+ tmp6 = c*f
+ tmp7 = d*e
+ tmp8 = c*g1
+ tmp9 = e*g1
+ tmp10 = tmp8*z
+ fg = (((2.0_ki*(tmp2-tmp3)+tmp5-tmp4)/(den3*den3)*tmp1*num_b3-(a+b+c)*tmp1/den3)&
+ &*g3+(1.0_ki/2.0_ki*d/den2*z-(2.0_ki*(tmp6-c*g2)-tmp7)/(den2*den2)*num_b2*z)*g2+&
+ &(3.0_ki/2.0_ki*tmp10+1.0_ki/2.0_ki*tmp9*z+1.0_ki/2.0_ki*num_b1*z+b*g1*z-(1.0_ki&
+ &/2.0_ki*tmp1*num_b1+1.0_ki/2.0_ki*tmp9+tmp8))/den1+(2.0_ki*(tmp8+tmp1*det_g+tmp&
+ &2*z+tmp6*z-(det_g*z+tmp3*z+tmp6+tmp10))+tmp7+tmp5*z-(tmp7*z+tmp4*z))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = a*e
+ tmp3 = c*f
+ tmp4 = c*g1
+ tmp5 = d*g1
+ tmp6 = c*c
+ tmp7 = c*d
+ tmp8 = d*e
+ tmp9 = den1*den1
+ tmp10 = det_g*z
+ fg = (((3.0_ki*(2.0_ki*tmp4*num_b1*z+c*det_g*g1*z)+4.0_ki*(2.0_ki*(tmp1*num_b1-a&
+ &*f*num_b1)+a*c*e*g1-(tmp3*num_b1*z+tmp2*num_b1*z))+2.0_ki*(tmp1*e*e+d*d*num_b1+&
+ &tmp6*f*g1+tmp7*num_b1*z+tmp8*num_b1*z-(det_g*num_b1*z*z+tmp7*e*g1+tmp5*tmp6+tmp&
+ &4*tmp4))+tmp5*num_b1+det_g*e*g1*z)/tmp9+4.0_ki*(2.0_ki*(tmp3-tmp4)+tmp10-tmp8)*&
+ &(tmp10+2.0_ki*tmp2-tmp7)/(tmp9*den1)*g1*num_b1-1.0_ki/2.0_ki*(4.0_ki*(2.0_ki*a+&
+ &d)+2.0_ki*(3.0_ki*c*z+e*z)+g1)/den1)*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = d*d
+ tmp3 = c*g2
+ tmp4 = den2*den2
+ fg = (((8.0_ki*(a*g2*num_b2-a*f*num_b2)+4.0_ki*(tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2))&
+ &+tmp2*tmp3+2.0_ki*tmp2*num_b2+d*g2*num_b2)/tmp4+4.0_ki*(2.0_ki*(c*f-tmp3)-d*e)*&
+ &(2.0_ki*a*e-c*d)/(tmp4*den2)*g2*num_b2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*c
+ tmp3 = g3*g3
+ tmp4 = det_g*num_b3
+ tmp5 = z*z
+ tmp6 = a*e
+ tmp7 = c*f
+ tmp8 = c*g3
+ tmp9 = d*d
+ tmp10 = c*d
+ tmp11 = d*e
+ tmp12 = d*g3
+ tmp13 = den3*den3
+ fg = ((4.0_ki*(2.0_ki*(tmp7-tmp8)+tmp5*det_g-tmp11)*(2.0_ki*tmp6+det_g*z-tmp10)/&
+ &(tmp13*den3)*g3*num_b3-(8.0_ki*(a*f*num_b3-tmp1*num_b3)+4.0_ki*(tmp2*f*g3+tmp4*&
+ &tmp5*z+tmp5*tmp6*num_b3+tmp7*num_b3*z-(a*d*e*g3+tmp2*tmp3))+2.0_ki*(tmp1*e*e+c*&
+ &c*f*g3+tmp5*a*det_g*g3-(3.0_ki*tmp8*num_b3*z+tmp11*num_b3*z+tmp10*e*g3+tmp10*tm&
+ &p5*num_b3+tmp9*num_b3+tmp4*tmp5+tmp8*tmp8))+tmp8*tmp9+tmp5*c*det_g*g3+det_g*e*g&
+ &3*z-(d*det_g*g3*z+tmp12*num_b3))/tmp13)*g3+(2.0_ki*(tmp12+tmp1*tmp5)+1.0_ki/2.0&
+ &_ki*tmp3+tmp5*tmp8+tmp5*num_b3*z+e*g3*z-(tmp5*num_b3+tmp12*z))/den3)
+ !
+ case(4)
+ !
+ tmp1 = a*e
+ tmp2 = c*f
+ tmp3 = c*g1
+ tmp4 = c*d
+ tmp5 = d*e
+ tmp6 = c*g3
+ tmp7 = z*z
+ fg = (1.0_ki/2.0_ki*(2.0_ki*(a*g3*z-num_b3*z)+tmp6*z+3.0_ki*tmp7*num_b3+e*g3-d*g&
+ &3)/den3*z-((2.0_ki*(tmp2+tmp1*z+tmp7*det_g-tmp6)-(tmp4*z+tmp5))/(den3*den3)*g3*&
+ &num_b3*z+(2.0_ki*(tmp1+tmp2+det_g*z-tmp3)-(tmp5+tmp4))/(den1*den1)*g1*num_b1*z+&
+ &1.0_ki/2.0_ki*(3.0_ki*tmp3+e*g1-num_b1*z)/den1*z))
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*f
+ tmp2 = a*c
+ tmp3 = z*z
+ tmp4 = a*e
+ tmp5 = a*g1
+ tmp6 = c*g1
+ tmp7 = d*d
+ tmp8 = c*d
+ tmp9 = den1*den1
+ fg = -(((2.0_ki*(2.0_ki*tmp5+d*g1)+tmp3*num_b1-tmp6*z)/den1*z-((8.0_ki*(a*a*e*g1&
+ &-tmp1*num_b1*z)+2.0_ki*(tmp7*num_b1*z+d*det_g*g1*z-tmp3*tmp8*num_b1)+4.0_ki*(tm&
+ &p2*f*g1+tmp3*tmp4*num_b1+3.0_ki*tmp5*num_b1*z+tmp3*det_g*num_b1*z+a*d*e*g1+a*de&
+ &t_g*g1*z-(tmp2*d*g1+tmp2*g1*g1))-(tmp3*c*det_g*g1+3.0_ki*tmp6*tmp7))/tmp9+4.0_k&
+ &i*(4.0_ki*(tmp1-tmp5)-(tmp3*det_g+tmp7))*(2.0_ki*tmp4+det_g*z-tmp8)/(tmp9*den1)&
+ &*g1*num_b1)*g1))
+ !
+ case(2)
+ !
+ tmp1 = 4.0_ki*(a*f-a*g2)-d*d
+ tmp2 = den2*den2
+ fg = (2.0_ki*(tmp1/tmp2*a+2.0_ki*(2.0_ki*a*e-c*d)/(tmp2*den2)*tmp1*num_b2)*g2*g2&
+ &)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*f
+ tmp3 = a*c
+ tmp4 = z*z
+ tmp5 = a*e
+ tmp6 = c*g3
+ tmp7 = d*d
+ tmp8 = c*d
+ tmp9 = den3*den3
+ fg = -(((2.0_ki*(tmp1*z-d*g3)+tmp4*num_b3+tmp6*z)/den3*z-(4.0_ki*(4.0_ki*(tmp2-t&
+ &mp1)-(tmp4*det_g+tmp7))*(2.0_ki*tmp5+det_g*z-tmp8)/(tmp9*den3)*g3*num_b3-(8.0_k&
+ &i*(tmp2*num_b3*z+a*a*f*g3-tmp1*tmp1)+2.0_ki*(tmp4*tmp8*num_b3+d*det_g*g3*z-(tmp&
+ &4*a*det_g*g3+tmp7*num_b3*z+tmp1*tmp7))+4.0_ki*(tmp3*f*g3+a*d*e*g3-(tmp4*det_g*n&
+ &um_b3*z+tmp4*tmp5*num_b3+3.0_ki*tmp1*num_b3*z+tmp3*g3*g3))-(tmp4*c*det_g*g3+3.0&
+ &_ki*tmp6*tmp7))/tmp9)*g3))
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = a*g1
+ tmp3 = z*z
+ tmp4 = tmp3*det_g+a*e*z
+ tmp5 = d*d
+ tmp6 = c*d*z
+ tmp7 = a*g3
+ fg = ((2.0_ki*(2.0_ki*(tmp2-tmp1)+tmp4)+tmp5-tmp6)/(den1*den1)*g1*num_b1*z+(2.0_&
+ &ki*(2.0_ki*(tmp7-tmp1)+tmp4)+tmp5-tmp6)/(den3*den3)*g3*num_b3*z-(1.0_ki/2.0_ki*&
+ &(2.0_ki*(tmp7*z-d*g3)+3.0_ki*tmp3*num_b3+c*g3*z)/den3*z+1.0_ki/2.0_ki*(2.0_ki*(&
+ &2.0_ki*tmp2+d*g1)+3.0_ki*tmp3*num_b1-c*g1*z)/den1*z))
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = e*g1
+ tmp2 = a*f
+ tmp3 = a*g1
+ tmp4 = c*g1
+ tmp5 = a*c
+ tmp6 = g1*g1
+ tmp7 = det_g*num_b1
+ tmp8 = z*z
+ tmp9 = a*e
+ tmp10 = tmp9*num_b1
+ tmp11 = c*f
+ tmp12 = d*d
+ tmp13 = c*det_g*g1
+ tmp14 = d*g1
+ tmp15 = c*c
+ tmp16 = num_b1*z
+ tmp17 = c*d
+ tmp18 = tmp17*num_b1
+ tmp19 = d*e
+ tmp20 = den1*den1
+ tmp21 = det_g*z
+ fg = ((-(4.0_ki*(tmp21+2.0_ki*tmp9-tmp17)*(2.0_ki*(tmp11-tmp4)+4.0_ki*(tmp2-tmp3&
+ &)+tmp21-(tmp8*det_g+tmp19+tmp12))/(tmp20*den1)*g1*num_b1+(8.0_ki*(tmp1*a*a-tmp2&
+ &*num_b1*z)+3.0_ki*(tmp13*z-tmp12*tmp4)+6.0_ki*(2.0_ki*tmp3*num_b1*z+tmp4*num_b1&
+ &*z)+2.0_ki*(tmp12*tmp16+tmp18*z+tmp3*e*e+tmp15*f*g1+tmp19*num_b1*z+d*det_g*g1*z&
+ &-(tmp17*e*g1+tmp18*tmp8+tmp14*tmp15+tmp4*tmp4))+4.0_ki*(tmp10*tmp8+tmp5*e*g1+tm&
+ &p5*f*g1+tmp7*tmp8*z+a*d*e*g1+a*det_g*g1*z-(tmp5*d*g1+tmp11*num_b1*z+tmp7*tmp8+t&
+ &mp5*tmp6+tmp10*z))+tmp14*num_b1+det_g*e*g1*z-tmp13*tmp8)/tmp20))*g1+(2.0_ki*(tm&
+ &p14*z+2.0_ki*tmp3*z)+1.0_ki/2.0_ki*tmp6+tmp1*z+tmp16*tmp8+3.0_ki*tmp4*z-(tmp8*n&
+ &um_b1+tmp4*tmp8))/den1)
+ !
+ case(2)
+ !
+ tmp1 = a*a
+ tmp2 = a*c
+ tmp3 = d*d
+ tmp4 = den2*den2
+ fg = ((-(4.0_ki*(2.0_ki*a*e-c*d)*(4.0_ki*(a*f-a*g2)+2.0_ki*(c*f-c*g2)-(d*e+tmp3)&
+ &)/(tmp4*den2)*num_b2+(8.0_ki*(tmp1*f-tmp1*g2)+4.0_ki*(tmp2*f-(a*d*e+tmp2*g2))+t&
+ &mp3*c+d*num_b2-2.0_ki*tmp3*a)/tmp4))*g2*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*c
+ tmp3 = f*g3
+ tmp4 = a*f
+ tmp5 = c*f
+ tmp6 = c*g3
+ tmp7 = d*d
+ tmp8 = c*d
+ tmp9 = d*e
+ tmp10 = den3*den3
+ fg = (((4.0_ki*(2.0_ki*(tmp3*a*a+tmp2*f*g3+tmp4*num_b3*z-(tmp2*g3*g3+tmp1*tmp1))&
+ &+tmp5*num_b3*z)+2.0_ki*(3.0_ki*(-(tmp6*num_b3*z+2.0_ki*tmp1*num_b3*z))+tmp1*e*e&
+ &+tmp3*c*c-(tmp9*num_b3*z+tmp8*e*g3+tmp7*num_b3*z+tmp6*tmp7+tmp1*tmp7+tmp6*tmp6)&
+ &)+d*det_g*g3*z+det_g*e*g3*z-d*g3*num_b3)/tmp10-(4.0_ki*(2.0_ki*(2.0_ki*(tmp4-tm&
+ &p1)+tmp5-tmp6)-(tmp9+tmp7))*(2.0_ki*a*e+det_g*z-tmp8)/(tmp10*den3)*g3*num_b3+1.&
+ &0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = c*f
+ tmp3 = d*d
+ tmp4 = d*e
+ tmp5 = c*g1
+ tmp6 = z*z
+ tmp7 = a*g1
+ tmp8 = a*e
+ tmp9 = c*d
+ fg = (((4.0_ki*(tmp1-a*g3)+2.0_ki*(tmp2-c*g3)-(tmp4+tmp3))/(den3*den3)*num_b3*z-&
+ &1.0_ki/2.0_ki*(d+e)/den3*z)*g3+1.0_ki/2.0_ki*(2.0_ki*(2.0_ki*tmp7+d*g1)+3.0_ki*&
+ &(tmp5+tmp6*num_b1-num_b1*z)+e*g1-tmp5*z)/den1*z-(4.0_ki*(tmp7-tmp1)+2.0_ki*(tmp&
+ &5+tmp6*det_g+tmp8*z-(det_g*z+tmp8+tmp2))+tmp3+tmp4+tmp9-tmp9*z)/(den1*den1)*g1*&
+ &num_b1*z)
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = b*c
+ tmp3 = a*e
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = c*g1
+ tmp7 = e*e
+ tmp8 = c*det_g*g1
+ tmp9 = tmp6*num_b1
+ tmp10 = d*g1
+ tmp11 = c*c
+ tmp12 = e*g1
+ tmp13 = det_g*num_b1
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = d*e
+ tmp17 = det_g*e*g1
+ tmp18 = den1*den1
+ tmp19 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(3.0_ki*c*z+e*z)+4.0_ki*(2.0_ki*a+d+b*z)+g1)/den1-(&
+ &4.0_ki*(2.0_ki*(tmp5-tmp6)+tmp19-tmp16)*(2.0_ki*(tmp3-tmp4)+tmp15+tmp19-(det_g+&
+ &tmp14))/(tmp18*den1)*g1*num_b1+(3.0_ki*(tmp8*z+2.0_ki*tmp9*z)+4.0_ki*(2.0_ki*(t&
+ &mp1*num_b1-a*f*num_b1)+tmp2*f*g1+tmp4*num_b1*z+a*c*e*g1-(tmp5*num_b1*z+tmp4*e*g&
+ &1+tmp3*num_b1*z+tmp2*d*g1+tmp2*g1*g1))+2.0_ki*(tmp1*tmp7+tmp11*tmp12+tmp13*z+d*&
+ &d*num_b1+tmp11*f*g1+tmp14*num_b1*z+tmp16*num_b1*z+b*det_g*g1*z-(tmp15*num_b1*z+&
+ &tmp14*e*g1+tmp13*z*z+tmp10*tmp11+tmp9+tmp8+tmp6*tmp6))+tmp10*num_b1+tmp17*z+tmp&
+ &6*tmp7-(tmp12*num_b1+tmp17))/tmp18))*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = c*f
+ tmp3 = tmp2*num_b2
+ tmp4 = c*g2
+ tmp5 = tmp4*num_b2
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = tmp7*num_b2
+ tmp9 = c*d
+ tmp10 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z-d)+g2)/den2-(4.0_ki*(2.0_ki*(tmp2-tmp4)-tmp7)*&
+ &(2.0_ki*(a*e-b*d)+c*e-(det_g*z+tmp9))/(tmp10*den2)*g2*num_b2+(4.0_ki*(2.0_ki*(a&
+ &*g2*num_b2-a*f*num_b2)+tmp5+tmp3*z+tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2+tmp3))+2.0_ki&
+ &*(tmp8+tmp6*num_b2+tmp6*b*g2+c*c*f*g2-(tmp9*e*g2+tmp8*z+3.0_ki*tmp5*z+tmp4*tmp4&
+ &))+tmp4*tmp6+d*g2*num_b2+d*det_g*g2*z-e*g2*num_b2)/tmp10))*g2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*g3
+ tmp3 = c*g3
+ tmp4 = a*c
+ tmp5 = g3*g3
+ tmp6 = b*c
+ tmp7 = c*f
+ tmp8 = a*e
+ tmp9 = b*d
+ tmp10 = c*d
+ tmp11 = d*d
+ tmp12 = e*e
+ tmp13 = d*e
+ tmp14 = c*e
+ tmp15 = den3*den3
+ fg = (((8.0_ki*(a*f*num_b3-tmp2*num_b3)+2.0_ki*(tmp12*tmp2+tmp1*tmp14*num_b3+tmp&
+ &11*b*g3+tmp1*a*det_g*g3+tmp1*b*det_g*g3+tmp1*c*det_g*g3-(tmp1*tmp10*num_b3+tmp1&
+ &3*num_b3+tmp11*num_b3))+4.0_ki*(tmp7*num_b3+tmp1*tmp8*num_b3+tmp4*f*g3+tmp6*f*g&
+ &3+c*c*f*g3-(a*d*e*g3+tmp9*e*g3+tmp10*e*g3+tmp1*tmp9*num_b3+tmp5*tmp6+tmp4*tmp5+&
+ &tmp3*num_b3+tmp3*tmp3))+tmp11*tmp3+tmp12*tmp3+e*g3*num_b3-d*g3*num_b3)/tmp15-(4&
+ &.0_ki*(2.0_ki*(tmp7-tmp3)+tmp1*det_g-tmp13)*(2.0_ki*(tmp8-tmp9)+tmp14-tmp10)/(t&
+ &mp15*den3)*g3*num_b3+(2.0_ki*(tmp1*a+tmp1*b+tmp1*c)+d+e+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = z*z
+ tmp2 = a*e
+ tmp3 = b*d
+ tmp4 = c*d
+ tmp5 = c*e
+ tmp6 = c*f
+ tmp7 = d*e
+ tmp8 = c*g1
+ tmp9 = e*g1
+ tmp10 = tmp8*z
+ fg = (((2.0_ki*(tmp2-tmp3)+tmp5-tmp4)/(den3*den3)*tmp1*num_b3-(a+b+c)*tmp1/den3)&
+ &*g3+(1.0_ki/2.0_ki*d/den2*z-(2.0_ki*(tmp6-c*g2)-tmp7)/(den2*den2)*num_b2*z)*g2+&
+ &(3.0_ki/2.0_ki*tmp10+1.0_ki/2.0_ki*tmp9*z+1.0_ki/2.0_ki*num_b1*z+b*g1*z-(1.0_ki&
+ &/2.0_ki*tmp1*num_b1+1.0_ki/2.0_ki*tmp9+tmp8))/den1+(2.0_ki*(tmp8+tmp1*det_g+tmp&
+ &2*z+tmp6*z-(det_g*z+tmp3*z+tmp6+tmp10))+tmp7+tmp5*z-(tmp7*z+tmp4*z))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = e*g1
+ tmp2 = a*f
+ tmp3 = a*g1
+ tmp4 = c*g1
+ tmp5 = a*c
+ tmp6 = g1*g1
+ tmp7 = det_g*num_b1
+ tmp8 = z*z
+ tmp9 = a*e
+ tmp10 = tmp9*num_b1
+ tmp11 = c*f
+ tmp12 = d*d
+ tmp13 = c*det_g*g1
+ tmp14 = d*g1
+ tmp15 = c*c
+ tmp16 = num_b1*z
+ tmp17 = c*d
+ tmp18 = tmp17*num_b1
+ tmp19 = d*e
+ tmp20 = den1*den1
+ tmp21 = det_g*z
+ fg = ((-(4.0_ki*(tmp21+2.0_ki*tmp9-tmp17)*(2.0_ki*(tmp11-tmp4)+4.0_ki*(tmp2-tmp3&
+ &)+tmp21-(tmp8*det_g+tmp19+tmp12))/(tmp20*den1)*g1*num_b1+(8.0_ki*(tmp1*a*a-tmp2&
+ &*num_b1*z)+3.0_ki*(tmp13*z-tmp12*tmp4)+6.0_ki*(2.0_ki*tmp3*num_b1*z+tmp4*num_b1&
+ &*z)+2.0_ki*(tmp12*tmp16+tmp18*z+tmp3*e*e+tmp15*f*g1+tmp19*num_b1*z+d*det_g*g1*z&
+ &-(tmp17*e*g1+tmp18*tmp8+tmp14*tmp15+tmp4*tmp4))+4.0_ki*(tmp10*tmp8+tmp5*e*g1+tm&
+ &p5*f*g1+tmp7*tmp8*z+a*d*e*g1+a*det_g*g1*z-(tmp5*d*g1+tmp11*num_b1*z+tmp7*tmp8+t&
+ &mp5*tmp6+tmp10*z))+tmp14*num_b1+det_g*e*g1*z-tmp13*tmp8)/tmp20))*g1+(2.0_ki*(tm&
+ &p14*z+2.0_ki*tmp3*z)+1.0_ki/2.0_ki*tmp6+tmp1*z+tmp16*tmp8+3.0_ki*tmp4*z-(tmp8*n&
+ &um_b1+tmp4*tmp8))/den1)
+ !
+ case(2)
+ !
+ tmp1 = a*a
+ tmp2 = a*c
+ tmp3 = d*d
+ tmp4 = den2*den2
+ fg = ((-(4.0_ki*(2.0_ki*a*e-c*d)*(4.0_ki*(a*f-a*g2)+2.0_ki*(c*f-c*g2)-(d*e+tmp3)&
+ &)/(tmp4*den2)*num_b2+(8.0_ki*(tmp1*f-tmp1*g2)+4.0_ki*(tmp2*f-(a*d*e+tmp2*g2))+t&
+ &mp3*c+d*num_b2-2.0_ki*tmp3*a)/tmp4))*g2*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*c
+ tmp3 = f*g3
+ tmp4 = a*f
+ tmp5 = c*f
+ tmp6 = c*g3
+ tmp7 = d*d
+ tmp8 = c*d
+ tmp9 = d*e
+ tmp10 = den3*den3
+ fg = (((4.0_ki*(2.0_ki*(tmp3*a*a+tmp2*f*g3+tmp4*num_b3*z-(tmp2*g3*g3+tmp1*tmp1))&
+ &+tmp5*num_b3*z)+2.0_ki*(3.0_ki*(-(tmp6*num_b3*z+2.0_ki*tmp1*num_b3*z))+tmp1*e*e&
+ &+tmp3*c*c-(tmp9*num_b3*z+tmp8*e*g3+tmp7*num_b3*z+tmp6*tmp7+tmp1*tmp7+tmp6*tmp6)&
+ &)+d*det_g*g3*z+det_g*e*g3*z-d*g3*num_b3)/tmp10-(4.0_ki*(2.0_ki*(2.0_ki*(tmp4-tm&
+ &p1)+tmp5-tmp6)-(tmp9+tmp7))*(2.0_ki*a*e+det_g*z-tmp8)/(tmp10*den3)*g3*num_b3+1.&
+ &0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = c*f
+ tmp3 = d*d
+ tmp4 = d*e
+ tmp5 = c*g1
+ tmp6 = z*z
+ tmp7 = a*g1
+ tmp8 = a*e
+ tmp9 = c*d
+ fg = (((4.0_ki*(tmp1-a*g3)+2.0_ki*(tmp2-c*g3)-(tmp4+tmp3))/(den3*den3)*num_b3*z-&
+ &1.0_ki/2.0_ki*(d+e)/den3*z)*g3+1.0_ki/2.0_ki*(2.0_ki*(2.0_ki*tmp7+d*g1)+3.0_ki*&
+ &(tmp5+tmp6*num_b1-num_b1*z)+e*g1-tmp5*z)/den1*z-(4.0_ki*(tmp7-tmp1)+2.0_ki*(tmp&
+ &5+tmp6*det_g+tmp8*z-(det_g*z+tmp8+tmp2))+tmp3+tmp4+tmp9-tmp9*z)/(den1*den1)*g1*&
+ &num_b1*z)
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = c*g1
+ tmp3 = tmp2*num_b1
+ tmp4 = e*g1
+ tmp5 = a*a
+ tmp6 = tmp4*tmp5
+ tmp7 = det_g*num_b1
+ tmp8 = z*z
+ tmp9 = a*c
+ tmp10 = tmp9*e
+ tmp11 = tmp10*g1
+ tmp12 = a*e
+ tmp13 = tmp12*num_b1
+ tmp14 = c*f*num_b1
+ tmp15 = c*det_g
+ tmp16 = tmp15*g1
+ tmp17 = tmp16*z
+ tmp18 = g1*g1
+ tmp19 = e*e
+ tmp20 = b*c
+ tmp21 = d*g1
+ tmp22 = c*c
+ tmp23 = tmp21*tmp22
+ tmp24 = tmp7*z
+ tmp25 = tmp9*d
+ tmp26 = tmp25*g1
+ tmp27 = a*d
+ tmp28 = a*det_g
+ tmp29 = tmp28*g1*z
+ tmp30 = tmp20*d
+ tmp31 = tmp30*g1
+ tmp32 = b*d
+ tmp33 = c*d
+ tmp34 = tmp33*num_b1
+ tmp35 = d*e*num_b1
+ tmp36 = d*d
+ tmp37 = tmp22*tmp4
+ tmp38 = num_b1*z
+ tmp39 = c*e
+ tmp40 = d*det_g
+ tmp41 = det_g*e*g1
+ tmp42 = den1*den1
+ tmp43 = e*f
+ tmp44 = tmp28*e
+ tmp45 = tmp15*f
+ tmp46 = det_g*z
+ tmp47 = tmp46*tmp46
+ tmp48 = tmp33*det_g
+ tmp49 = tmp40*e
+ fg = (((6.0_ki*(tmp17-tmp3)+12.0_ki*(tmp3*z+tmp1*num_b1*z)+8.0_ki*(tmp11+tmp6-(a&
+ &*f*num_b1*z+tmp7*tmp8+tmp14*z+tmp13*z))+2.0_ki*(tmp37+tmp21*num_b1+tmp36*tmp38+&
+ &tmp41*z+tmp40*g1*z+b*det_g*g1*z-(tmp39*num_b1*z+tmp34*tmp8+tmp35+tmp16))+4.0_ki&
+ &*(tmp14+tmp24+tmp29+tmp1*tmp19+tmp13*tmp8+tmp24*tmp8+tmp34*z+tmp35*z+tmp20*f*g1&
+ &+tmp22*f*g1+tmp27*e*g1+tmp32*num_b1*z+tmp9*f*g1-(tmp33*e*g1+tmp32*e*g1+tmp18*tm&
+ &p9+tmp18*tmp20+tmp31+tmp26+tmp23+tmp2*tmp2))+tmp19*tmp2-(tmp4*num_b1+3.0_ki*tmp&
+ &2*tmp36+tmp16*tmp8+tmp41))/tmp42+4.0_ki*(8.0_ki*(tmp10*f+tmp43*tmp5-(tmp6+tmp11&
+ &))+2.0_ki*(tmp16+tmp47+tmp22*tmp43+tmp36*tmp39+tmp36*b*e-(tmp32*det_g*z+tmp49*z&
+ &+tmp48*z+tmp44*tmp8+tmp12*tmp36+tmp45+tmp37))+4.0_ki*(tmp23+tmp26+tmp31+tmp44*z&
+ &+tmp45*z+tmp28*f*z-(tmp22*d*f+tmp30*f+tmp25*f+tmp19*tmp27+tmp29+tmp17))+tmp49+t&
+ &mp33*tmp36+tmp48*tmp8+tmp15*e*z-(det_g*det_g*z+tmp47*z+tmp36*tmp46+tmp19*tmp33)&
+ &)/(tmp42*den1)*g1*num_b1)*g1+(2.0_ki*(tmp2+tmp8*num_b1-(b*g1*z+tmp4*z+tmp21*z+3&
+ &.0_ki*tmp2*z+2.0_ki*tmp1*z))+tmp4+tmp2*tmp8-(tmp38*tmp8+tmp38+tmp18))/den1)
+ !
+ case(2)
+ !
+ tmp1 = a*g2
+ tmp2 = a*c
+ tmp3 = f*g2
+ tmp4 = a*a
+ tmp5 = a*d
+ tmp6 = c*g2
+ tmp7 = d*d
+ tmp8 = c*c
+ tmp9 = d*g2
+ tmp10 = c*d
+ tmp11 = e*g2
+ tmp12 = d*det_g
+ tmp13 = den2*den2
+ tmp14 = e*f
+ tmp15 = tmp2*e
+ tmp16 = e*e
+ tmp17 = tmp2*d
+ tmp18 = b*c*d
+ tmp19 = c*det_g
+ fg = (((4.0_ki*(2.0_ki*(tmp3*tmp4+tmp2*f*g2-(tmp5*e*g2+tmp2*g2*g2+tmp1*tmp1))+c*&
+ &f*num_b2*z)+2.0_ki*(tmp3*tmp8+tmp6*tmp7+tmp9*num_b2+tmp7*b*g2-(d*e*num_b2*z+3.0&
+ &_ki*tmp6*num_b2*z+tmp10*e*g2+tmp1*tmp7+tmp6*tmp6))+tmp12*g2*z-tmp11*num_b2)/tmp&
+ &13+4.0_ki*(2.0_ki*(tmp14*tmp8+tmp19*g2*z+tmp7*b*e+tmp7*c*e-(tmp7*a*e+tmp19*f*z+&
+ &tmp11*tmp8))+4.0_ki*(2.0_ki*(tmp14*tmp4+tmp15*f-(tmp15*g2+tmp11*tmp4))+tmp17*g2&
+ &+tmp18*g2+tmp8*tmp9-(tmp8*d*f+tmp18*f+tmp17*f+tmp16*tmp5))+tmp10*tmp7+tmp12*e*z&
+ &-tmp10*tmp16)/(tmp13*den2)*g2*num_b2-1.0_ki/2.0_ki*(g2+2.0_ki*d*z)/den2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*c
+ tmp2 = g3*g3
+ tmp3 = a*g3
+ tmp4 = c*g3
+ tmp5 = f*g3
+ tmp6 = c*c
+ tmp7 = c*d
+ tmp8 = a*a
+ tmp9 = e*e
+ tmp10 = b*c
+ tmp11 = a*d
+ tmp12 = a*e
+ tmp13 = z*z
+ tmp14 = b*d
+ tmp15 = d*d
+ tmp16 = d*g3
+ tmp17 = a*det_g
+ tmp18 = tmp17*g3
+ tmp19 = c*det_g
+ tmp20 = tmp19*g3
+ tmp21 = c*e
+ tmp22 = e*g3
+ tmp23 = d*det_g
+ tmp24 = den3*den3
+ tmp25 = e*f
+ tmp26 = tmp1*e
+ tmp27 = tmp1*d
+ tmp28 = tmp10*d
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+4.0_ki*(tmp13*a+tmp13*b+tmp13*c)+3.0_ki*g&
+ &3)/den3+4.0_ki*(2.0_ki*(tmp15*tmp21+tmp25*tmp6+tmp13*tmp17*e+tmp15*b*e+tmp19*f*&
+ &z-(tmp13*tmp14*det_g+tmp22*tmp6+tmp20*z+tmp12*tmp15))+4.0_ki*(2.0_ki*(tmp25*tmp&
+ &8+tmp26*f-(tmp26*g3+tmp22*tmp8))+tmp16*tmp6+tmp27*g3+tmp28*g3+tmp17*f*z-(tmp6*d&
+ &*f+tmp28*f+tmp27*f+tmp18*z+tmp11*tmp9))+tmp15*tmp7+tmp13*tmp19*e-(tmp23*e*z+tmp&
+ &15*det_g*z+tmp13*tmp7*det_g+tmp7*tmp9))/(tmp24*den3)*g3*num_b3-(6.0_ki*(2.0_ki*&
+ &(tmp1*f*g3-(tmp3*num_b3*z+tmp1*tmp2))+tmp5*tmp6-(tmp7*e*g3+tmp4*num_b3*z+tmp4*t&
+ &mp4))+4.0_ki*(2.0_ki*(tmp5*tmp8+a*f*num_b3*z-tmp3*tmp3)+tmp3*tmp9+tmp10*f*g3+tm&
+ &p12*tmp13*num_b3+c*f*num_b3*z-(tmp14*e*g3+tmp13*tmp14*num_b3+tmp11*e*g3+tmp10*t&
+ &mp2))+2.0_ki*(tmp13*tmp18+tmp13*tmp20+tmp13*tmp21*num_b3+tmp15*b*g3+tmp13*b*det&
+ &_g*g3-(d*e*num_b3*z+tmp15*num_b3*z+tmp13*tmp7*num_b3+tmp16*num_b3+tmp15*tmp3))+&
+ &tmp22*num_b3+tmp4*tmp9+tmp23*g3*z+det_g*e*g3*z-tmp15*tmp4)/tmp24)*g3)
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = c*f
+ tmp3 = a*e
+ tmp4 = tmp3*z
+ tmp5 = b*d*z
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = c*d
+ tmp9 = tmp8*z
+ tmp10 = c*e*z
+ tmp11 = z*z
+ tmp12 = c*g1
+ tmp13 = tmp12*z
+ tmp14 = num_b1*z
+ tmp15 = a*g1*z
+ tmp16 = e*g1
+ tmp17 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z-(4.0_ki*(tmp1-a*g3)+2.0_k&
+ &i*(tmp2+tmp4-(c*g3+tmp5))+tmp10-(tmp9+tmp7+tmp6))/(den3*den3)*num_b3*z)*g3+((2.&
+ &0_ki*(tmp2-c*g2)-tmp7)/(den2*den2)*num_b2*z-1.0_ki/2.0_ki*d/den2*z)*g2+(3.0_ki*&
+ &(tmp11*num_b1-tmp13)+3.0_ki/2.0_ki*(-(tmp11*tmp14+tmp14))+tmp12+1.0_ki/2.0_ki*t&
+ &mp16+1.0_ki/2.0_ki*tmp11*tmp12-(d*g1*z+b*g1*z+tmp16*z+2.0_ki*tmp15))/den1+(4.0_&
+ &ki*(tmp13+tmp15-(tmp2*z+tmp11*det_g+tmp1*z+tmp4))+2.0_ki*(tmp17+tmp2+tmp5+tmp9+&
+ &tmp11*tmp17+tmp11*tmp3+tmp7*z-tmp12)+tmp6*z-(tmp11*tmp8+tmp7+tmp10))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*g1
+ tmp2 = b*d
+ tmp3 = tmp2*num_b1
+ tmp4 = b*f
+ tmp5 = b*b
+ tmp6 = b*c
+ tmp7 = c*e
+ tmp8 = tmp7*num_b1
+ tmp9 = c*f
+ tmp10 = det_g*num_b1
+ tmp11 = e*e
+ tmp12 = b*det_g*g1
+ tmp13 = c*g1
+ tmp14 = e*g1
+ tmp15 = d*e
+ tmp16 = den1*den1
+ fg = (((c+e+2.0_ki*b*z)/den1+4.0_ki*(2.0_ki*tmp2+det_g-tmp7)*(4.0_ki*(tmp4-tmp1)&
+ &+2.0_ki*(tmp9-tmp13)+det_g*z-(det_g+tmp15+tmp11))/(tmp16*den1)*g1*num_b1-(8.0_k&
+ &i*(tmp5*f*g1-(tmp5*d*g1+tmp4*num_b1+tmp3+tmp1*tmp1))+4.0_ki*(tmp8+tmp1*num_b1+t&
+ &mp3*z+tmp6*e*g1+tmp6*f*g1+a*e*num_b1-(tmp6*d*g1+tmp2*e*g1+tmp9*num_b1+tmp6*g1*g&
+ &1))+2.0_ki*(tmp10*z+tmp11*num_b1+tmp12*z+tmp13*num_b1+tmp14*c*c+tmp15*num_b1-(c&
+ &*det_g*g1+c*d*num_b1+tmp8*z+tmp1*tmp11+3.0_ki*tmp12+tmp10))+tmp11*tmp13-(det_g*&
+ &e*g1+tmp14*num_b1))/tmp16)*g1)
+ !
+ case(2)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b2
+ tmp3 = b*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = c*f
+ tmp6 = tmp5*num_b2
+ tmp7 = c*g2
+ tmp8 = tmp7*num_b2
+ tmp9 = e*e
+ tmp10 = b*c
+ tmp11 = g2*g2
+ tmp12 = b*d
+ tmp13 = tmp12*num_b2
+ tmp14 = d*e
+ tmp15 = tmp14*num_b2
+ tmp16 = det_g*num_b2
+ tmp17 = z*z
+ tmp18 = tmp16*z
+ tmp19 = c*d
+ tmp20 = c*e
+ tmp21 = tmp20*num_b2
+ tmp22 = num_b2*z
+ tmp23 = e*g2
+ tmp24 = den2*den2
+ tmp25 = d*g2
+ fg = ((4.0_ki*(2.0_ki*tmp12+det_g*z-tmp20)*(4.0_ki*(tmp1-tmp3)+2.0_ki*(tmp5-tmp7&
+ &)-(tmp17*det_g+tmp9+tmp14))/(tmp24*den2)*g2*num_b2-(16.0_ki*(tmp4-tmp2)+6.0_ki*&
+ &(-(tmp8*z+2.0_ki*tmp4*z))+8.0_ki*(tmp8+tmp2*z-tmp6)+4.0_ki*(tmp15+tmp16*tmp17+t&
+ &mp6*z+tmp9*num_b2+tmp10*f*g2+tmp12*e*g2+a*e*num_b2-(tmp17*tmp18+tmp13*tmp17+tmp&
+ &10*tmp11+tmp13))+2.0_ki*(tmp21+tmp17*tmp21+tmp3*d*d+c*c*f*g2+det_g*e*g2*z-(tmp1&
+ &9*e*g2+tmp22*tmp9+tmp19*num_b2+tmp15*z+tmp7*tmp7+tmp18))+d*det_g*g2*z-(tmp17*c*&
+ &det_g*g2+3.0_ki*tmp7*tmp9+tmp23*num_b2))/tmp24)*g2+(2.0_ki*(tmp17*num_b2+tmp23*&
+ &z-(a*g2+tmp25+2.0_ki*tmp23))+1.0_ki/2.0_ki*tmp11+tmp25*z-(tmp17*tmp7+tmp17*tmp2&
+ &2+tmp7+tmp22))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*f
+ tmp2 = tmp1*num_b3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = b*c
+ tmp6 = f*g3
+ tmp7 = c*f
+ tmp8 = tmp7*num_b3
+ tmp9 = c*g3
+ tmp10 = tmp9*num_b3
+ tmp11 = e*e
+ tmp12 = b*d
+ tmp13 = d*e
+ tmp14 = tmp13*num_b3
+ tmp15 = c*d
+ tmp16 = c*e
+ tmp17 = den3*den3
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(-(e*z+d*z))+4.0_ki*(a+b+c+d+e)-g3)/den3+4.0_ki*(2.&
+ &0_ki*(2.0_ki*(tmp1-tmp3)+tmp7-tmp9)-(tmp13+tmp11))*(2.0_ki*tmp12+det_g*z-tmp16)&
+ &/(tmp17*den3)*g3*num_b3-(4.0_ki*(tmp14+tmp11*num_b3+tmp8*z+a*e*num_b3-tmp12*num&
+ &_b3)+8.0_ki*(2.0_ki*(tmp4-tmp2)+tmp10+tmp3*tmp3+tmp2*z+tmp5*g3*g3-(tmp5*f*g3+tm&
+ &p6*b*b+tmp8))+2.0_ki*(3.0_ki*(-(2.0_ki*tmp4*z+tmp10*z))+tmp9*tmp9+tmp11*tmp3+tm&
+ &p11*tmp9+tmp16*num_b3+tmp15*e*g3-(tmp11*num_b3*z+tmp6*c*c+tmp3*d*d+tmp15*num_b3&
+ &+tmp14*z))-(det_g*e*g3*z+d*det_g*g3*z+e*g3*num_b3))/tmp17)*g3)
+ !
+ case(4)
+ !
+ tmp1 = b*g1
+ tmp2 = c*g1
+ tmp3 = b*f
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = tmp4*z
+ tmp7 = e*e
+ tmp8 = c*e
+ tmp9 = d*e
+ tmp10 = tmp8*z
+ tmp11 = c*g2
+ tmp12 = z*z
+ fg = ((-((4.0_ki*(tmp3-b*g3)+2.0_ki*(tmp5-c*g3)-(tmp9+tmp7))/(den3*den3)*num_b3*&
+ &z+1.0_ki/2.0_ki*(d+e)/den3*z))*g3+(tmp1*z+1.0_ki/2.0_ki*num_b1*z-(1.0_ki/2.0_ki&
+ &*e*g1+1.0_ki/2.0_ki*num_b1+tmp2+3.0_ki*tmp1))/den1+(2.0_ki*(2.0_ki*(b*g2-tmp3)+&
+ &tmp11+tmp6+tmp12*det_g-tmp5)+tmp7+tmp9-tmp10)/(den2*den2)*g2*num_b2*z-((2.0_ki*&
+ &(2.0_ki*(tmp3-tmp1)+tmp5+tmp6+det_g*z-(det_g+tmp4+tmp2))+tmp8-(tmp9+tmp7+tmp10)&
+ &)/(den1*den1)*g1*num_b1+1.0_ki/2.0_ki*(2.0_ki*(num_b2-(2.0_ki*num_b2*z+e*g2))+t&
+ &mp11*z+3.0_ki*tmp12*num_b2-d*g2)/den2*z))
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = b*c
+ tmp3 = a*e
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = c*g1
+ tmp7 = e*e
+ tmp8 = c*det_g*g1
+ tmp9 = tmp6*num_b1
+ tmp10 = d*g1
+ tmp11 = c*c
+ tmp12 = e*g1
+ tmp13 = det_g*num_b1
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = d*e
+ tmp17 = det_g*e*g1
+ tmp18 = den1*den1
+ tmp19 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(3.0_ki*c*z+e*z)+4.0_ki*(2.0_ki*a+d+b*z)+g1)/den1-(&
+ &4.0_ki*(2.0_ki*(tmp5-tmp6)+tmp19-tmp16)*(2.0_ki*(tmp3-tmp4)+tmp15+tmp19-(det_g+&
+ &tmp14))/(tmp18*den1)*g1*num_b1+(3.0_ki*(tmp8*z+2.0_ki*tmp9*z)+4.0_ki*(2.0_ki*(t&
+ &mp1*num_b1-a*f*num_b1)+tmp2*f*g1+tmp4*num_b1*z+a*c*e*g1-(tmp5*num_b1*z+tmp4*e*g&
+ &1+tmp3*num_b1*z+tmp2*d*g1+tmp2*g1*g1))+2.0_ki*(tmp1*tmp7+tmp11*tmp12+tmp13*z+d*&
+ &d*num_b1+tmp11*f*g1+tmp14*num_b1*z+tmp16*num_b1*z+b*det_g*g1*z-(tmp15*num_b1*z+&
+ &tmp14*e*g1+tmp13*z*z+tmp10*tmp11+tmp9+tmp8+tmp6*tmp6))+tmp10*num_b1+tmp17*z+tmp&
+ &6*tmp7-(tmp12*num_b1+tmp17))/tmp18))*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = c*f
+ tmp3 = tmp2*num_b2
+ tmp4 = c*g2
+ tmp5 = tmp4*num_b2
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = tmp7*num_b2
+ tmp9 = c*d
+ tmp10 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z-d)+g2)/den2-(4.0_ki*(2.0_ki*(tmp2-tmp4)-tmp7)*&
+ &(2.0_ki*(a*e-b*d)+c*e-(det_g*z+tmp9))/(tmp10*den2)*g2*num_b2+(4.0_ki*(2.0_ki*(a&
+ &*g2*num_b2-a*f*num_b2)+tmp5+tmp3*z+tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2+tmp3))+2.0_ki&
+ &*(tmp8+tmp6*num_b2+tmp6*b*g2+c*c*f*g2-(tmp9*e*g2+tmp8*z+3.0_ki*tmp5*z+tmp4*tmp4&
+ &))+tmp4*tmp6+d*g2*num_b2+d*det_g*g2*z-e*g2*num_b2)/tmp10))*g2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*g3
+ tmp3 = c*g3
+ tmp4 = a*c
+ tmp5 = g3*g3
+ tmp6 = b*c
+ tmp7 = c*f
+ tmp8 = a*e
+ tmp9 = b*d
+ tmp10 = c*d
+ tmp11 = d*d
+ tmp12 = e*e
+ tmp13 = d*e
+ tmp14 = c*e
+ tmp15 = den3*den3
+ fg = (((8.0_ki*(a*f*num_b3-tmp2*num_b3)+2.0_ki*(tmp12*tmp2+tmp1*tmp14*num_b3+tmp&
+ &11*b*g3+tmp1*a*det_g*g3+tmp1*b*det_g*g3+tmp1*c*det_g*g3-(tmp1*tmp10*num_b3+tmp1&
+ &3*num_b3+tmp11*num_b3))+4.0_ki*(tmp7*num_b3+tmp1*tmp8*num_b3+tmp4*f*g3+tmp6*f*g&
+ &3+c*c*f*g3-(a*d*e*g3+tmp9*e*g3+tmp10*e*g3+tmp1*tmp9*num_b3+tmp5*tmp6+tmp4*tmp5+&
+ &tmp3*num_b3+tmp3*tmp3))+tmp11*tmp3+tmp12*tmp3+e*g3*num_b3-d*g3*num_b3)/tmp15-(4&
+ &.0_ki*(2.0_ki*(tmp7-tmp3)+tmp1*det_g-tmp13)*(2.0_ki*(tmp8-tmp9)+tmp14-tmp10)/(t&
+ &mp15*den3)*g3*num_b3+(2.0_ki*(tmp1*a+tmp1*b+tmp1*c)+d+e+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = z*z
+ tmp2 = a*e
+ tmp3 = b*d
+ tmp4 = c*d
+ tmp5 = c*e
+ tmp6 = c*f
+ tmp7 = d*e
+ tmp8 = c*g1
+ tmp9 = e*g1
+ tmp10 = tmp8*z
+ fg = (((2.0_ki*(tmp2-tmp3)+tmp5-tmp4)/(den3*den3)*tmp1*num_b3-(a+b+c)*tmp1/den3)&
+ &*g3+(1.0_ki/2.0_ki*d/den2*z-(2.0_ki*(tmp6-c*g2)-tmp7)/(den2*den2)*num_b2*z)*g2+&
+ &(3.0_ki/2.0_ki*tmp10+1.0_ki/2.0_ki*tmp9*z+1.0_ki/2.0_ki*num_b1*z+b*g1*z-(1.0_ki&
+ &/2.0_ki*tmp1*num_b1+1.0_ki/2.0_ki*tmp9+tmp8))/den1+(2.0_ki*(tmp8+tmp1*det_g+tmp&
+ &2*z+tmp6*z-(det_g*z+tmp3*z+tmp6+tmp10))+tmp7+tmp5*z-(tmp7*z+tmp4*z))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*g1
+ tmp2 = a*g1
+ tmp3 = b*c
+ tmp4 = d*g1
+ tmp5 = b*b
+ tmp6 = tmp4*tmp5
+ tmp7 = f*g1
+ tmp8 = tmp3*d
+ tmp9 = tmp8*g1
+ tmp10 = b*d
+ tmp11 = tmp10*num_b1
+ tmp12 = c*det_g
+ tmp13 = tmp12*g1
+ tmp14 = c*g1
+ tmp15 = tmp14*num_b1
+ tmp16 = e*g1
+ tmp17 = c*c
+ tmp18 = tmp16*tmp17
+ tmp19 = det_g*num_b1
+ tmp20 = a*c*e
+ tmp21 = tmp20*g1
+ tmp22 = tmp3*e
+ tmp23 = tmp22*g1
+ tmp24 = b*det_g
+ tmp25 = tmp24*g1
+ tmp26 = c*e
+ tmp27 = tmp26*num_b1
+ tmp28 = tmp13*z
+ tmp29 = d*d
+ tmp30 = e*e
+ tmp31 = tmp17*tmp4
+ tmp32 = det_g*e*g1
+ tmp33 = c*d
+ tmp34 = den1*den1
+ tmp35 = d*f
+ tmp36 = tmp12*f
+ tmp37 = tmp10*det_g
+ tmp38 = det_g*det_g
+ tmp39 = d*det_g*e
+ tmp12 = tmp12*e
+ tmp40 = det_g*z
+ fg = (((3.0_ki*(2.0_ki*(tmp15*z-tmp25)+tmp28)+4.0_ki*(2.0_ki*(tmp11*z+tmp2*num_b&
+ &1+tmp5*tmp7+tmp3*f*g1-(a*f*num_b1+tmp10*e*g1+tmp3*g1*g1+tmp9+tmp6+tmp1*tmp1))+t&
+ &mp18+tmp21+tmp23+tmp19*z+tmp25*z-(c*f*num_b1*z+a*e*num_b1*z+tmp27*z+tmp1*num_b1&
+ &+tmp15+tmp13+tmp11))+2.0_ki*(tmp27+tmp14*tmp30+tmp17*tmp7+tmp2*tmp30+tmp29*num_&
+ &b1+tmp33*num_b1*z+d*e*num_b1*z-(tmp33*e*g1+tmp19*z*z+tmp16*num_b1+tmp1*tmp30+tm&
+ &p32+tmp31+tmp19+tmp14*tmp14))+tmp32*z+tmp4*num_b1)/tmp34+4.0_ki*(2.0_ki*(tmp31+&
+ &tmp37+tmp39+tmp10*tmp30+tmp12*z+tmp36*z+a*det_g*e*z-(tmp30*a*d+tmp38*z+tmp30*tm&
+ &p33+tmp17*tmp35+tmp28))+4.0_ki*(2.0_ki*(tmp6+tmp9-(tmp8*f+tmp35*tmp5))+tmp13+tm&
+ &p25+tmp20*f+tmp22*f+tmp17*e*f+tmp29*b*e-(tmp37*z+tmp24*f+tmp36+tmp23+tmp21+tmp1&
+ &8))+tmp38+tmp40*tmp40+tmp26*tmp29+tmp30*det_g-(tmp33*det_g*z+tmp39*z+tmp26*tmp3&
+ &0+tmp12))/(tmp34*den1)*g1*num_b1-1.0_ki/2.0_ki*(8.0_ki*(a+b*z)+4.0_ki*(d-b)+2.0&
+ &_ki*(3.0_ki*c*z+e*z)+g1)/den1)*g1)
+ !
+ case(2)
+ !
+ tmp1 = b*g2
+ tmp2 = tmp1*num_b2
+ tmp3 = c*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = b*f*num_b2
+ tmp6 = c*f*num_b2
+ tmp7 = a*c
+ tmp8 = g2*g2
+ tmp9 = b*c
+ tmp10 = d*d
+ tmp11 = c*c
+ tmp12 = d*e*num_b2
+ tmp13 = det_g*num_b2
+ tmp14 = z*z
+ tmp15 = a*d
+ tmp16 = b*d
+ tmp17 = c*d
+ tmp18 = e*e
+ tmp19 = e*g2
+ tmp20 = num_b2*z
+ tmp21 = c*e
+ tmp22 = d*det_g
+ tmp23 = d*g2
+ tmp24 = c*det_g
+ tmp25 = tmp24*g2
+ tmp26 = den2*den2
+ tmp27 = d*f
+ tmp28 = b*b
+ tmp29 = tmp9*d
+ tmp30 = tmp7*e
+ tmp31 = tmp9*e
+ tmp32 = b*det_g
+ tmp33 = det_g*z
+ fg = (((12.0_ki*(-(tmp4*z+tmp2*z))+8.0_ki*(tmp2+tmp4+tmp5*z+tmp6*z+a*g2*num_b2-(&
+ &a*f*num_b2+tmp6+tmp5))+2.0_ki*(tmp10*num_b2+tmp13*tmp14+tmp18*num_b2+tmp14*tmp2&
+ &1*num_b2+tmp22*g2*z+det_g*e*g2*z-(tmp19*num_b2+tmp18*tmp20))+4.0_ki*(tmp12+tmp1&
+ &*tmp10+tmp11*f*g2+tmp16*e*g2+tmp7*f*g2+tmp9*f*g2-(tmp17*e*g2+tmp15*e*g2+tmp14*t&
+ &mp16*num_b2+tmp13*tmp14*z+tmp8*tmp9+tmp7*tmp8+tmp12*z+tmp3*tmp3))+tmp10*tmp3+tm&
+ &p23*num_b2-(3.0_ki*tmp18*tmp3+tmp14*tmp25))/tmp26+4.0_ki*(8.0_ki*(tmp23*tmp28+t&
+ &mp29*g2-(tmp29*f+tmp27*tmp28))+2.0_ki*(tmp11*tmp23+tmp16*tmp18+tmp14*tmp16*det_&
+ &g+tmp22*e*z-(tmp17*tmp18+tmp15*tmp18+tmp11*tmp27))+4.0_ki*(tmp25*z+tmp30*f+tmp3&
+ &1*f+tmp10*b*e+tmp11*e*f+tmp32*g2*z-(tmp32*f*z+tmp24*f*z+tmp31*g2+tmp30*g2+tmp11&
+ &*tmp19))+tmp10*tmp21+tmp18*tmp33+tmp33*tmp33*z-(tmp14*tmp24*e+tmp18*tmp21))/(tm&
+ &p26*den2)*g2*num_b2)*g2+(2.0_ki*(tmp19+tmp23-(tmp23*z+tmp19*z))+tmp14*tmp20+tmp&
+ &14*tmp3-(tmp14*num_b2+tmp8))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*c
+ tmp2 = g3*g3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = c*g3
+ tmp6 = f*g3
+ tmp7 = c*c
+ tmp8 = c*d
+ tmp9 = tmp5*num_b3
+ tmp10 = a*g3
+ tmp11 = b*f*num_b3
+ tmp12 = b*b
+ tmp13 = c*f*num_b3
+ tmp14 = a*c
+ tmp15 = d*d
+ tmp16 = d*e*num_b3
+ tmp17 = a*d
+ tmp18 = z*z
+ tmp19 = b*d
+ tmp20 = e*e
+ tmp21 = e*g3
+ tmp22 = a*det_g
+ tmp23 = b*det_g
+ tmp24 = tmp23*g3
+ tmp25 = c*det_g
+ tmp26 = tmp25*g3
+ tmp27 = c*e
+ tmp28 = d*g3
+ tmp29 = d*det_g
+ tmp30 = den3*den3
+ tmp31 = d*f
+ tmp32 = tmp1*d
+ tmp33 = tmp14*e
+ tmp34 = tmp1*e
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+4.0_ki*(tmp18*a+tmp18*b+tmp18*c)+3.0_ki*g&
+ &3)/den3+4.0_ki*(2.0_ki*(tmp19*tmp20+tmp26*z+tmp28*tmp7+tmp18*tmp22*e-(tmp25*f*z&
+ &+tmp18*tmp19*det_g+tmp31*tmp7+tmp20*tmp8+tmp17*tmp20))+4.0_ki*(2.0_ki*(tmp12*tm&
+ &p28+tmp32*g3-(tmp32*f+tmp12*tmp31))+tmp24*z+tmp33*f+tmp34*f+tmp15*b*e+tmp7*e*f-&
+ &(tmp23*f*z+tmp34*g3+tmp33*g3+tmp21*tmp7))+tmp15*tmp27+tmp18*tmp25*e+tmp20*det_g&
+ &*z+tmp29*e*z-(tmp18*tmp8*det_g+tmp20*tmp27))/(tmp30*den3)*g3*num_b3-(6.0_ki*(2.&
+ &0_ki*(tmp4*z+tmp1*f*g3-tmp1*tmp2)+tmp6*tmp7+tmp9*z-(tmp8*e*g3+tmp5*tmp5))+4.0_k&
+ &i*(2.0_ki*(tmp11+tmp13+tmp12*tmp6+a*f*num_b3-(tmp11*z+tmp10*num_b3+tmp9+tmp4+tm&
+ &p3*tmp3))+tmp15*tmp3+tmp14*f*g3+tmp18*a*e*num_b3-(tmp19*e*g3+tmp18*tmp19*num_b3&
+ &+tmp17*e*g3+tmp14*tmp2+tmp13*z+tmp16))+2.0_ki*(tmp10*tmp20+tmp16*z+tmp18*tmp24+&
+ &tmp18*tmp26+tmp21*num_b3+tmp18*tmp22*g3+tmp18*tmp27*num_b3+tmp20*num_b3*z-(tmp1&
+ &8*tmp8*num_b3+tmp20*num_b3+tmp20*tmp3+tmp15*num_b3))+tmp15*tmp5+tmp29*g3*z+det_&
+ &g*e*g3*z-(tmp28*num_b3+tmp20*tmp5))/tmp30)*g3)
+ !
+ case(4)
+ !
+ tmp1 = c*g1
+ tmp2 = b*g1
+ tmp3 = e*g1
+ tmp4 = tmp1*z
+ tmp5 = z*z
+ tmp6 = b*f
+ tmp7 = c*f
+ tmp8 = b*d
+ tmp9 = tmp8*z
+ tmp10 = d*e
+ tmp11 = tmp5*det_g
+ tmp12 = a*e*z
+ tmp13 = c*e
+ tmp14 = tmp13*z
+ tmp15 = e*e
+ tmp16 = c*d*z
+ tmp17 = c*g2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z-(4.0_ki*(b*g3-tmp6)+2.0_k&
+ &i*(tmp12+c*g3-(tmp9+tmp7))+tmp10+tmp14+tmp15-tmp16)/(den3*den3)*num_b3*z)*g3+(2&
+ &.0_ki*(tmp1-tmp2*z)+3.0_ki/2.0_ki*(2.0_ki*tmp2-tmp4)+tmp3+1.0_ki/2.0_ki*num_b1+&
+ &1.0_ki/2.0_ki*tmp5*num_b1-(num_b1*z+1.0_ki/2.0_ki*tmp3*z))/den1+1.0_ki/2.0_ki*(&
+ &2.0_ki*(-(num_b2*z+e*g2+d*g2))+tmp17*z+3.0_ki*tmp5*num_b2)/den2*z-((2.0_ki*(2.0&
+ &_ki*(tmp17+b*g2-(tmp7+tmp6))+tmp10+tmp11+tmp9)+tmp15-tmp14)/(den2*den2)*g2*num_&
+ &b2*z+(2.0_ki*(2.0_ki*(tmp1+tmp2-(det_g*z+tmp9+tmp7+tmp6))+tmp10+tmp11+tmp12+tmp&
+ &14+tmp8+det_g+tmp7*z-tmp4)+tmp15-(tmp10*z+tmp16+tmp13))/(den1*den1)*g1*num_b1))
+ !
+ end select
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = b*c
+ tmp3 = a*e
+ tmp4 = b*d
+ tmp5 = c*f
+ tmp6 = c*g1
+ tmp7 = e*e
+ tmp8 = c*det_g*g1
+ tmp9 = tmp6*num_b1
+ tmp10 = d*g1
+ tmp11 = c*c
+ tmp12 = e*g1
+ tmp13 = det_g*num_b1
+ tmp14 = c*d
+ tmp15 = c*e
+ tmp16 = d*e
+ tmp17 = det_g*e*g1
+ tmp18 = den1*den1
+ tmp19 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(3.0_ki*c*z+e*z)+4.0_ki*(2.0_ki*a+d+b*z)+g1)/den1-(&
+ &4.0_ki*(2.0_ki*(tmp5-tmp6)+tmp19-tmp16)*(2.0_ki*(tmp3-tmp4)+tmp15+tmp19-(det_g+&
+ &tmp14))/(tmp18*den1)*g1*num_b1+(3.0_ki*(tmp8*z+2.0_ki*tmp9*z)+4.0_ki*(2.0_ki*(t&
+ &mp1*num_b1-a*f*num_b1)+tmp2*f*g1+tmp4*num_b1*z+a*c*e*g1-(tmp5*num_b1*z+tmp4*e*g&
+ &1+tmp3*num_b1*z+tmp2*d*g1+tmp2*g1*g1))+2.0_ki*(tmp1*tmp7+tmp11*tmp12+tmp13*z+d*&
+ &d*num_b1+tmp11*f*g1+tmp14*num_b1*z+tmp16*num_b1*z+b*det_g*g1*z-(tmp15*num_b1*z+&
+ &tmp14*e*g1+tmp13*z*z+tmp10*tmp11+tmp9+tmp8+tmp6*tmp6))+tmp10*num_b1+tmp17*z+tmp&
+ &6*tmp7-(tmp12*num_b1+tmp17))/tmp18))*g1)
+ !
+ case(2)
+ !
+ tmp1 = a*c
+ tmp2 = c*f
+ tmp3 = tmp2*num_b2
+ tmp4 = c*g2
+ tmp5 = tmp4*num_b2
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = tmp7*num_b2
+ tmp9 = c*d
+ tmp10 = den2*den2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z-d)+g2)/den2-(4.0_ki*(2.0_ki*(tmp2-tmp4)-tmp7)*&
+ &(2.0_ki*(a*e-b*d)+c*e-(det_g*z+tmp9))/(tmp10*den2)*g2*num_b2+(4.0_ki*(2.0_ki*(a&
+ &*g2*num_b2-a*f*num_b2)+tmp5+tmp3*z+tmp1*f*g2-(a*d*e*g2+tmp1*g2*g2+tmp3))+2.0_ki&
+ &*(tmp8+tmp6*num_b2+tmp6*b*g2+c*c*f*g2-(tmp9*e*g2+tmp8*z+3.0_ki*tmp5*z+tmp4*tmp4&
+ &))+tmp4*tmp6+d*g2*num_b2+d*det_g*g2*z-e*g2*num_b2)/tmp10))*g2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*g3
+ tmp3 = c*g3
+ tmp4 = a*c
+ tmp5 = g3*g3
+ tmp6 = b*c
+ tmp7 = c*f
+ tmp8 = a*e
+ tmp9 = b*d
+ tmp10 = c*d
+ tmp11 = d*d
+ tmp12 = e*e
+ tmp13 = d*e
+ tmp14 = c*e
+ tmp15 = den3*den3
+ fg = (((8.0_ki*(a*f*num_b3-tmp2*num_b3)+2.0_ki*(tmp12*tmp2+tmp1*tmp14*num_b3+tmp&
+ &11*b*g3+tmp1*a*det_g*g3+tmp1*b*det_g*g3+tmp1*c*det_g*g3-(tmp1*tmp10*num_b3+tmp1&
+ &3*num_b3+tmp11*num_b3))+4.0_ki*(tmp7*num_b3+tmp1*tmp8*num_b3+tmp4*f*g3+tmp6*f*g&
+ &3+c*c*f*g3-(a*d*e*g3+tmp9*e*g3+tmp10*e*g3+tmp1*tmp9*num_b3+tmp5*tmp6+tmp4*tmp5+&
+ &tmp3*num_b3+tmp3*tmp3))+tmp11*tmp3+tmp12*tmp3+e*g3*num_b3-d*g3*num_b3)/tmp15-(4&
+ &.0_ki*(2.0_ki*(tmp7-tmp3)+tmp1*det_g-tmp13)*(2.0_ki*(tmp8-tmp9)+tmp14-tmp10)/(t&
+ &mp15*den3)*g3*num_b3+(2.0_ki*(tmp1*a+tmp1*b+tmp1*c)+d+e+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = z*z
+ tmp2 = a*e
+ tmp3 = b*d
+ tmp4 = c*d
+ tmp5 = c*e
+ tmp6 = c*f
+ tmp7 = d*e
+ tmp8 = c*g1
+ tmp9 = e*g1
+ tmp10 = tmp8*z
+ fg = (((2.0_ki*(tmp2-tmp3)+tmp5-tmp4)/(den3*den3)*tmp1*num_b3-(a+b+c)*tmp1/den3)&
+ &*g3+(1.0_ki/2.0_ki*d/den2*z-(2.0_ki*(tmp6-c*g2)-tmp7)/(den2*den2)*num_b2*z)*g2+&
+ &(3.0_ki/2.0_ki*tmp10+1.0_ki/2.0_ki*tmp9*z+1.0_ki/2.0_ki*num_b1*z+b*g1*z-(1.0_ki&
+ &/2.0_ki*tmp1*num_b1+1.0_ki/2.0_ki*tmp9+tmp8))/den1+(2.0_ki*(tmp8+tmp1*det_g+tmp&
+ &2*z+tmp6*z-(det_g*z+tmp3*z+tmp6+tmp10))+tmp7+tmp5*z-(tmp7*z+tmp4*z))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = e*g1
+ tmp2 = a*f
+ tmp3 = a*g1
+ tmp4 = c*g1
+ tmp5 = a*c
+ tmp6 = g1*g1
+ tmp7 = det_g*num_b1
+ tmp8 = z*z
+ tmp9 = a*e
+ tmp10 = tmp9*num_b1
+ tmp11 = c*f
+ tmp12 = d*d
+ tmp13 = c*det_g*g1
+ tmp14 = d*g1
+ tmp15 = c*c
+ tmp16 = num_b1*z
+ tmp17 = c*d
+ tmp18 = tmp17*num_b1
+ tmp19 = d*e
+ tmp20 = den1*den1
+ tmp21 = det_g*z
+ fg = ((-(4.0_ki*(tmp21+2.0_ki*tmp9-tmp17)*(2.0_ki*(tmp11-tmp4)+4.0_ki*(tmp2-tmp3&
+ &)+tmp21-(tmp8*det_g+tmp19+tmp12))/(tmp20*den1)*g1*num_b1+(8.0_ki*(tmp1*a*a-tmp2&
+ &*num_b1*z)+3.0_ki*(tmp13*z-tmp12*tmp4)+6.0_ki*(2.0_ki*tmp3*num_b1*z+tmp4*num_b1&
+ &*z)+2.0_ki*(tmp12*tmp16+tmp18*z+tmp3*e*e+tmp15*f*g1+tmp19*num_b1*z+d*det_g*g1*z&
+ &-(tmp17*e*g1+tmp18*tmp8+tmp14*tmp15+tmp4*tmp4))+4.0_ki*(tmp10*tmp8+tmp5*e*g1+tm&
+ &p5*f*g1+tmp7*tmp8*z+a*d*e*g1+a*det_g*g1*z-(tmp5*d*g1+tmp11*num_b1*z+tmp7*tmp8+t&
+ &mp5*tmp6+tmp10*z))+tmp14*num_b1+det_g*e*g1*z-tmp13*tmp8)/tmp20))*g1+(2.0_ki*(tm&
+ &p14*z+2.0_ki*tmp3*z)+1.0_ki/2.0_ki*tmp6+tmp1*z+tmp16*tmp8+3.0_ki*tmp4*z-(tmp8*n&
+ &um_b1+tmp4*tmp8))/den1)
+ !
+ case(2)
+ !
+ tmp1 = a*a
+ tmp2 = a*c
+ tmp3 = d*d
+ tmp4 = den2*den2
+ fg = ((-(4.0_ki*(2.0_ki*a*e-c*d)*(4.0_ki*(a*f-a*g2)+2.0_ki*(c*f-c*g2)-(d*e+tmp3)&
+ &)/(tmp4*den2)*num_b2+(8.0_ki*(tmp1*f-tmp1*g2)+4.0_ki*(tmp2*f-(a*d*e+tmp2*g2))+t&
+ &mp3*c+d*num_b2-2.0_ki*tmp3*a)/tmp4))*g2*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*g3
+ tmp2 = a*c
+ tmp3 = f*g3
+ tmp4 = a*f
+ tmp5 = c*f
+ tmp6 = c*g3
+ tmp7 = d*d
+ tmp8 = c*d
+ tmp9 = d*e
+ tmp10 = den3*den3
+ fg = (((4.0_ki*(2.0_ki*(tmp3*a*a+tmp2*f*g3+tmp4*num_b3*z-(tmp2*g3*g3+tmp1*tmp1))&
+ &+tmp5*num_b3*z)+2.0_ki*(3.0_ki*(-(tmp6*num_b3*z+2.0_ki*tmp1*num_b3*z))+tmp1*e*e&
+ &+tmp3*c*c-(tmp9*num_b3*z+tmp8*e*g3+tmp7*num_b3*z+tmp6*tmp7+tmp1*tmp7+tmp6*tmp6)&
+ &)+d*det_g*g3*z+det_g*e*g3*z-d*g3*num_b3)/tmp10-(4.0_ki*(2.0_ki*(2.0_ki*(tmp4-tm&
+ &p1)+tmp5-tmp6)-(tmp9+tmp7))*(2.0_ki*a*e+det_g*z-tmp8)/(tmp10*den3)*g3*num_b3+1.&
+ &0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = c*f
+ tmp3 = d*d
+ tmp4 = d*e
+ tmp5 = c*g1
+ tmp6 = z*z
+ tmp7 = a*g1
+ tmp8 = a*e
+ tmp9 = c*d
+ fg = (((4.0_ki*(tmp1-a*g3)+2.0_ki*(tmp2-c*g3)-(tmp4+tmp3))/(den3*den3)*num_b3*z-&
+ &1.0_ki/2.0_ki*(d+e)/den3*z)*g3+1.0_ki/2.0_ki*(2.0_ki*(2.0_ki*tmp7+d*g1)+3.0_ki*&
+ &(tmp5+tmp6*num_b1-num_b1*z)+e*g1-tmp5*z)/den1*z-(4.0_ki*(tmp7-tmp1)+2.0_ki*(tmp&
+ &5+tmp6*det_g+tmp8*z-(det_g*z+tmp8+tmp2))+tmp3+tmp4+tmp9-tmp9*z)/(den1*den1)*g1*&
+ &num_b1*z)
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = c*g1
+ tmp3 = tmp2*num_b1
+ tmp4 = e*g1
+ tmp5 = a*a
+ tmp6 = tmp4*tmp5
+ tmp7 = det_g*num_b1
+ tmp8 = z*z
+ tmp9 = a*c
+ tmp10 = tmp9*e
+ tmp11 = tmp10*g1
+ tmp12 = a*e
+ tmp13 = tmp12*num_b1
+ tmp14 = c*f*num_b1
+ tmp15 = c*det_g
+ tmp16 = tmp15*g1
+ tmp17 = tmp16*z
+ tmp18 = g1*g1
+ tmp19 = e*e
+ tmp20 = b*c
+ tmp21 = d*g1
+ tmp22 = c*c
+ tmp23 = tmp21*tmp22
+ tmp24 = tmp7*z
+ tmp25 = tmp9*d
+ tmp26 = tmp25*g1
+ tmp27 = a*d
+ tmp28 = a*det_g
+ tmp29 = tmp28*g1*z
+ tmp30 = tmp20*d
+ tmp31 = tmp30*g1
+ tmp32 = b*d
+ tmp33 = c*d
+ tmp34 = tmp33*num_b1
+ tmp35 = d*e*num_b1
+ tmp36 = d*d
+ tmp37 = tmp22*tmp4
+ tmp38 = num_b1*z
+ tmp39 = c*e
+ tmp40 = d*det_g
+ tmp41 = det_g*e*g1
+ tmp42 = den1*den1
+ tmp43 = e*f
+ tmp44 = tmp28*e
+ tmp45 = tmp15*f
+ tmp46 = det_g*z
+ tmp47 = tmp46*tmp46
+ tmp48 = tmp33*det_g
+ tmp49 = tmp40*e
+ fg = (((6.0_ki*(tmp17-tmp3)+12.0_ki*(tmp3*z+tmp1*num_b1*z)+8.0_ki*(tmp11+tmp6-(a&
+ &*f*num_b1*z+tmp7*tmp8+tmp14*z+tmp13*z))+2.0_ki*(tmp37+tmp21*num_b1+tmp36*tmp38+&
+ &tmp41*z+tmp40*g1*z+b*det_g*g1*z-(tmp39*num_b1*z+tmp34*tmp8+tmp35+tmp16))+4.0_ki&
+ &*(tmp14+tmp24+tmp29+tmp1*tmp19+tmp13*tmp8+tmp24*tmp8+tmp34*z+tmp35*z+tmp20*f*g1&
+ &+tmp22*f*g1+tmp27*e*g1+tmp32*num_b1*z+tmp9*f*g1-(tmp33*e*g1+tmp32*e*g1+tmp18*tm&
+ &p9+tmp18*tmp20+tmp31+tmp26+tmp23+tmp2*tmp2))+tmp19*tmp2-(tmp4*num_b1+3.0_ki*tmp&
+ &2*tmp36+tmp16*tmp8+tmp41))/tmp42+4.0_ki*(8.0_ki*(tmp10*f+tmp43*tmp5-(tmp6+tmp11&
+ &))+2.0_ki*(tmp16+tmp47+tmp22*tmp43+tmp36*tmp39+tmp36*b*e-(tmp32*det_g*z+tmp49*z&
+ &+tmp48*z+tmp44*tmp8+tmp12*tmp36+tmp45+tmp37))+4.0_ki*(tmp23+tmp26+tmp31+tmp44*z&
+ &+tmp45*z+tmp28*f*z-(tmp22*d*f+tmp30*f+tmp25*f+tmp19*tmp27+tmp29+tmp17))+tmp49+t&
+ &mp33*tmp36+tmp48*tmp8+tmp15*e*z-(det_g*det_g*z+tmp47*z+tmp36*tmp46+tmp19*tmp33)&
+ &)/(tmp42*den1)*g1*num_b1)*g1+(2.0_ki*(tmp2+tmp8*num_b1-(b*g1*z+tmp4*z+tmp21*z+3&
+ &.0_ki*tmp2*z+2.0_ki*tmp1*z))+tmp4+tmp2*tmp8-(tmp38*tmp8+tmp38+tmp18))/den1)
+ !
+ case(2)
+ !
+ tmp1 = a*g2
+ tmp2 = a*c
+ tmp3 = f*g2
+ tmp4 = a*a
+ tmp5 = a*d
+ tmp6 = c*g2
+ tmp7 = d*d
+ tmp8 = c*c
+ tmp9 = d*g2
+ tmp10 = c*d
+ tmp11 = e*g2
+ tmp12 = d*det_g
+ tmp13 = den2*den2
+ tmp14 = e*f
+ tmp15 = tmp2*e
+ tmp16 = e*e
+ tmp17 = tmp2*d
+ tmp18 = b*c*d
+ tmp19 = c*det_g
+ fg = (((4.0_ki*(2.0_ki*(tmp3*tmp4+tmp2*f*g2-(tmp5*e*g2+tmp2*g2*g2+tmp1*tmp1))+c*&
+ &f*num_b2*z)+2.0_ki*(tmp3*tmp8+tmp6*tmp7+tmp9*num_b2+tmp7*b*g2-(d*e*num_b2*z+3.0&
+ &_ki*tmp6*num_b2*z+tmp10*e*g2+tmp1*tmp7+tmp6*tmp6))+tmp12*g2*z-tmp11*num_b2)/tmp&
+ &13+4.0_ki*(2.0_ki*(tmp14*tmp8+tmp19*g2*z+tmp7*b*e+tmp7*c*e-(tmp7*a*e+tmp19*f*z+&
+ &tmp11*tmp8))+4.0_ki*(2.0_ki*(tmp14*tmp4+tmp15*f-(tmp15*g2+tmp11*tmp4))+tmp17*g2&
+ &+tmp18*g2+tmp8*tmp9-(tmp8*d*f+tmp18*f+tmp17*f+tmp16*tmp5))+tmp10*tmp7+tmp12*e*z&
+ &-tmp10*tmp16)/(tmp13*den2)*g2*num_b2-1.0_ki/2.0_ki*(g2+2.0_ki*d*z)/den2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*c
+ tmp2 = g3*g3
+ tmp3 = a*g3
+ tmp4 = c*g3
+ tmp5 = f*g3
+ tmp6 = c*c
+ tmp7 = c*d
+ tmp8 = a*a
+ tmp9 = e*e
+ tmp10 = b*c
+ tmp11 = a*d
+ tmp12 = a*e
+ tmp13 = z*z
+ tmp14 = b*d
+ tmp15 = d*d
+ tmp16 = d*g3
+ tmp17 = a*det_g
+ tmp18 = tmp17*g3
+ tmp19 = c*det_g
+ tmp20 = tmp19*g3
+ tmp21 = c*e
+ tmp22 = e*g3
+ tmp23 = d*det_g
+ tmp24 = den3*den3
+ tmp25 = e*f
+ tmp26 = tmp1*e
+ tmp27 = tmp1*d
+ tmp28 = tmp10*d
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+4.0_ki*(tmp13*a+tmp13*b+tmp13*c)+3.0_ki*g&
+ &3)/den3+4.0_ki*(2.0_ki*(tmp15*tmp21+tmp25*tmp6+tmp13*tmp17*e+tmp15*b*e+tmp19*f*&
+ &z-(tmp13*tmp14*det_g+tmp22*tmp6+tmp20*z+tmp12*tmp15))+4.0_ki*(2.0_ki*(tmp25*tmp&
+ &8+tmp26*f-(tmp26*g3+tmp22*tmp8))+tmp16*tmp6+tmp27*g3+tmp28*g3+tmp17*f*z-(tmp6*d&
+ &*f+tmp28*f+tmp27*f+tmp18*z+tmp11*tmp9))+tmp15*tmp7+tmp13*tmp19*e-(tmp23*e*z+tmp&
+ &15*det_g*z+tmp13*tmp7*det_g+tmp7*tmp9))/(tmp24*den3)*g3*num_b3-(6.0_ki*(2.0_ki*&
+ &(tmp1*f*g3-(tmp3*num_b3*z+tmp1*tmp2))+tmp5*tmp6-(tmp7*e*g3+tmp4*num_b3*z+tmp4*t&
+ &mp4))+4.0_ki*(2.0_ki*(tmp5*tmp8+a*f*num_b3*z-tmp3*tmp3)+tmp3*tmp9+tmp10*f*g3+tm&
+ &p12*tmp13*num_b3+c*f*num_b3*z-(tmp14*e*g3+tmp13*tmp14*num_b3+tmp11*e*g3+tmp10*t&
+ &mp2))+2.0_ki*(tmp13*tmp18+tmp13*tmp20+tmp13*tmp21*num_b3+tmp15*b*g3+tmp13*b*det&
+ &_g*g3-(d*e*num_b3*z+tmp15*num_b3*z+tmp13*tmp7*num_b3+tmp16*num_b3+tmp15*tmp3))+&
+ &tmp22*num_b3+tmp4*tmp9+tmp23*g3*z+det_g*e*g3*z-tmp15*tmp4)/tmp24)*g3)
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = c*f
+ tmp3 = a*e
+ tmp4 = tmp3*z
+ tmp5 = b*d*z
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = c*d
+ tmp9 = tmp8*z
+ tmp10 = c*e*z
+ tmp11 = z*z
+ tmp12 = c*g1
+ tmp13 = tmp12*z
+ tmp14 = num_b1*z
+ tmp15 = a*g1*z
+ tmp16 = e*g1
+ tmp17 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z-(4.0_ki*(tmp1-a*g3)+2.0_k&
+ &i*(tmp2+tmp4-(c*g3+tmp5))+tmp10-(tmp9+tmp7+tmp6))/(den3*den3)*num_b3*z)*g3+((2.&
+ &0_ki*(tmp2-c*g2)-tmp7)/(den2*den2)*num_b2*z-1.0_ki/2.0_ki*d/den2*z)*g2+(3.0_ki*&
+ &(tmp11*num_b1-tmp13)+3.0_ki/2.0_ki*(-(tmp11*tmp14+tmp14))+tmp12+1.0_ki/2.0_ki*t&
+ &mp16+1.0_ki/2.0_ki*tmp11*tmp12-(d*g1*z+b*g1*z+tmp16*z+2.0_ki*tmp15))/den1+(4.0_&
+ &ki*(tmp13+tmp15-(tmp2*z+tmp11*det_g+tmp1*z+tmp4))+2.0_ki*(tmp17+tmp2+tmp5+tmp9+&
+ &tmp11*tmp17+tmp11*tmp3+tmp7*z-tmp12)+tmp6*z-(tmp11*tmp8+tmp7+tmp10))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = b*g1
+ tmp2 = a*g1
+ tmp3 = b*c
+ tmp4 = d*g1
+ tmp5 = b*b
+ tmp6 = tmp4*tmp5
+ tmp7 = f*g1
+ tmp8 = tmp3*d
+ tmp9 = tmp8*g1
+ tmp10 = b*d
+ tmp11 = tmp10*num_b1
+ tmp12 = c*det_g
+ tmp13 = tmp12*g1
+ tmp14 = c*g1
+ tmp15 = tmp14*num_b1
+ tmp16 = e*g1
+ tmp17 = c*c
+ tmp18 = tmp16*tmp17
+ tmp19 = det_g*num_b1
+ tmp20 = a*c*e
+ tmp21 = tmp20*g1
+ tmp22 = tmp3*e
+ tmp23 = tmp22*g1
+ tmp24 = b*det_g
+ tmp25 = tmp24*g1
+ tmp26 = c*e
+ tmp27 = tmp26*num_b1
+ tmp28 = tmp13*z
+ tmp29 = d*d
+ tmp30 = e*e
+ tmp31 = tmp17*tmp4
+ tmp32 = det_g*e*g1
+ tmp33 = c*d
+ tmp34 = den1*den1
+ tmp35 = d*f
+ tmp36 = tmp12*f
+ tmp37 = tmp10*det_g
+ tmp38 = det_g*det_g
+ tmp39 = d*det_g*e
+ tmp12 = tmp12*e
+ tmp40 = det_g*z
+ fg = (((3.0_ki*(2.0_ki*(tmp15*z-tmp25)+tmp28)+4.0_ki*(2.0_ki*(tmp11*z+tmp2*num_b&
+ &1+tmp5*tmp7+tmp3*f*g1-(a*f*num_b1+tmp10*e*g1+tmp3*g1*g1+tmp9+tmp6+tmp1*tmp1))+t&
+ &mp18+tmp21+tmp23+tmp19*z+tmp25*z-(c*f*num_b1*z+a*e*num_b1*z+tmp27*z+tmp1*num_b1&
+ &+tmp15+tmp13+tmp11))+2.0_ki*(tmp27+tmp14*tmp30+tmp17*tmp7+tmp2*tmp30+tmp29*num_&
+ &b1+tmp33*num_b1*z+d*e*num_b1*z-(tmp33*e*g1+tmp19*z*z+tmp16*num_b1+tmp1*tmp30+tm&
+ &p32+tmp31+tmp19+tmp14*tmp14))+tmp32*z+tmp4*num_b1)/tmp34+4.0_ki*(2.0_ki*(tmp31+&
+ &tmp37+tmp39+tmp10*tmp30+tmp12*z+tmp36*z+a*det_g*e*z-(tmp30*a*d+tmp38*z+tmp30*tm&
+ &p33+tmp17*tmp35+tmp28))+4.0_ki*(2.0_ki*(tmp6+tmp9-(tmp8*f+tmp35*tmp5))+tmp13+tm&
+ &p25+tmp20*f+tmp22*f+tmp17*e*f+tmp29*b*e-(tmp37*z+tmp24*f+tmp36+tmp23+tmp21+tmp1&
+ &8))+tmp38+tmp40*tmp40+tmp26*tmp29+tmp30*det_g-(tmp33*det_g*z+tmp39*z+tmp26*tmp3&
+ &0+tmp12))/(tmp34*den1)*g1*num_b1-1.0_ki/2.0_ki*(8.0_ki*(a+b*z)+4.0_ki*(d-b)+2.0&
+ &_ki*(3.0_ki*c*z+e*z)+g1)/den1)*g1)
+ !
+ case(2)
+ !
+ tmp1 = b*g2
+ tmp2 = tmp1*num_b2
+ tmp3 = c*g2
+ tmp4 = tmp3*num_b2
+ tmp5 = b*f*num_b2
+ tmp6 = c*f*num_b2
+ tmp7 = a*c
+ tmp8 = g2*g2
+ tmp9 = b*c
+ tmp10 = d*d
+ tmp11 = c*c
+ tmp12 = d*e*num_b2
+ tmp13 = det_g*num_b2
+ tmp14 = z*z
+ tmp15 = a*d
+ tmp16 = b*d
+ tmp17 = c*d
+ tmp18 = e*e
+ tmp19 = e*g2
+ tmp20 = num_b2*z
+ tmp21 = c*e
+ tmp22 = d*det_g
+ tmp23 = d*g2
+ tmp24 = c*det_g
+ tmp25 = tmp24*g2
+ tmp26 = den2*den2
+ tmp27 = d*f
+ tmp28 = b*b
+ tmp29 = tmp9*d
+ tmp30 = tmp7*e
+ tmp31 = tmp9*e
+ tmp32 = b*det_g
+ tmp33 = det_g*z
+ fg = (((12.0_ki*(-(tmp4*z+tmp2*z))+8.0_ki*(tmp2+tmp4+tmp5*z+tmp6*z+a*g2*num_b2-(&
+ &a*f*num_b2+tmp6+tmp5))+2.0_ki*(tmp10*num_b2+tmp13*tmp14+tmp18*num_b2+tmp14*tmp2&
+ &1*num_b2+tmp22*g2*z+det_g*e*g2*z-(tmp19*num_b2+tmp18*tmp20))+4.0_ki*(tmp12+tmp1&
+ &*tmp10+tmp11*f*g2+tmp16*e*g2+tmp7*f*g2+tmp9*f*g2-(tmp17*e*g2+tmp15*e*g2+tmp14*t&
+ &mp16*num_b2+tmp13*tmp14*z+tmp8*tmp9+tmp7*tmp8+tmp12*z+tmp3*tmp3))+tmp10*tmp3+tm&
+ &p23*num_b2-(3.0_ki*tmp18*tmp3+tmp14*tmp25))/tmp26+4.0_ki*(8.0_ki*(tmp23*tmp28+t&
+ &mp29*g2-(tmp29*f+tmp27*tmp28))+2.0_ki*(tmp11*tmp23+tmp16*tmp18+tmp14*tmp16*det_&
+ &g+tmp22*e*z-(tmp17*tmp18+tmp15*tmp18+tmp11*tmp27))+4.0_ki*(tmp25*z+tmp30*f+tmp3&
+ &1*f+tmp10*b*e+tmp11*e*f+tmp32*g2*z-(tmp32*f*z+tmp24*f*z+tmp31*g2+tmp30*g2+tmp11&
+ &*tmp19))+tmp10*tmp21+tmp18*tmp33+tmp33*tmp33*z-(tmp14*tmp24*e+tmp18*tmp21))/(tm&
+ &p26*den2)*g2*num_b2)*g2+(2.0_ki*(tmp19+tmp23-(tmp23*z+tmp19*z))+tmp14*tmp20+tmp&
+ &14*tmp3-(tmp14*num_b2+tmp8))/den2)
+ !
+ case(3)
+ !
+ tmp1 = b*c
+ tmp2 = g3*g3
+ tmp3 = b*g3
+ tmp4 = tmp3*num_b3
+ tmp5 = c*g3
+ tmp6 = f*g3
+ tmp7 = c*c
+ tmp8 = c*d
+ tmp9 = tmp5*num_b3
+ tmp10 = a*g3
+ tmp11 = b*f*num_b3
+ tmp12 = b*b
+ tmp13 = c*f*num_b3
+ tmp14 = a*c
+ tmp15 = d*d
+ tmp16 = d*e*num_b3
+ tmp17 = a*d
+ tmp18 = z*z
+ tmp19 = b*d
+ tmp20 = e*e
+ tmp21 = e*g3
+ tmp22 = a*det_g
+ tmp23 = b*det_g
+ tmp24 = tmp23*g3
+ tmp25 = c*det_g
+ tmp26 = tmp25*g3
+ tmp27 = c*e
+ tmp28 = d*g3
+ tmp29 = d*det_g
+ tmp30 = den3*den3
+ tmp31 = d*f
+ tmp32 = tmp1*d
+ tmp33 = tmp14*e
+ tmp34 = tmp1*e
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+4.0_ki*(tmp18*a+tmp18*b+tmp18*c)+3.0_ki*g&
+ &3)/den3+4.0_ki*(2.0_ki*(tmp19*tmp20+tmp26*z+tmp28*tmp7+tmp18*tmp22*e-(tmp25*f*z&
+ &+tmp18*tmp19*det_g+tmp31*tmp7+tmp20*tmp8+tmp17*tmp20))+4.0_ki*(2.0_ki*(tmp12*tm&
+ &p28+tmp32*g3-(tmp32*f+tmp12*tmp31))+tmp24*z+tmp33*f+tmp34*f+tmp15*b*e+tmp7*e*f-&
+ &(tmp23*f*z+tmp34*g3+tmp33*g3+tmp21*tmp7))+tmp15*tmp27+tmp18*tmp25*e+tmp20*det_g&
+ &*z+tmp29*e*z-(tmp18*tmp8*det_g+tmp20*tmp27))/(tmp30*den3)*g3*num_b3-(6.0_ki*(2.&
+ &0_ki*(tmp4*z+tmp1*f*g3-tmp1*tmp2)+tmp6*tmp7+tmp9*z-(tmp8*e*g3+tmp5*tmp5))+4.0_k&
+ &i*(2.0_ki*(tmp11+tmp13+tmp12*tmp6+a*f*num_b3-(tmp11*z+tmp10*num_b3+tmp9+tmp4+tm&
+ &p3*tmp3))+tmp15*tmp3+tmp14*f*g3+tmp18*a*e*num_b3-(tmp19*e*g3+tmp18*tmp19*num_b3&
+ &+tmp17*e*g3+tmp14*tmp2+tmp13*z+tmp16))+2.0_ki*(tmp10*tmp20+tmp16*z+tmp18*tmp24+&
+ &tmp18*tmp26+tmp21*num_b3+tmp18*tmp22*g3+tmp18*tmp27*num_b3+tmp20*num_b3*z-(tmp1&
+ &8*tmp8*num_b3+tmp20*num_b3+tmp20*tmp3+tmp15*num_b3))+tmp15*tmp5+tmp29*g3*z+det_&
+ &g*e*g3*z-(tmp28*num_b3+tmp20*tmp5))/tmp30)*g3)
+ !
+ case(4)
+ !
+ tmp1 = c*g1
+ tmp2 = b*g1
+ tmp3 = e*g1
+ tmp4 = tmp1*z
+ tmp5 = z*z
+ tmp6 = b*f
+ tmp7 = c*f
+ tmp8 = b*d
+ tmp9 = tmp8*z
+ tmp10 = d*e
+ tmp11 = tmp5*det_g
+ tmp12 = a*e*z
+ tmp13 = c*e
+ tmp14 = tmp13*z
+ tmp15 = e*e
+ tmp16 = c*d*z
+ tmp17 = c*g2
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z-(4.0_ki*(b*g3-tmp6)+2.0_k&
+ &i*(tmp12+c*g3-(tmp9+tmp7))+tmp10+tmp14+tmp15-tmp16)/(den3*den3)*num_b3*z)*g3+(2&
+ &.0_ki*(tmp1-tmp2*z)+3.0_ki/2.0_ki*(2.0_ki*tmp2-tmp4)+tmp3+1.0_ki/2.0_ki*num_b1+&
+ &1.0_ki/2.0_ki*tmp5*num_b1-(num_b1*z+1.0_ki/2.0_ki*tmp3*z))/den1+1.0_ki/2.0_ki*(&
+ &2.0_ki*(-(num_b2*z+e*g2+d*g2))+tmp17*z+3.0_ki*tmp5*num_b2)/den2*z-((2.0_ki*(2.0&
+ &_ki*(tmp17+b*g2-(tmp7+tmp6))+tmp10+tmp11+tmp9)+tmp15-tmp14)/(den2*den2)*g2*num_&
+ &b2*z+(2.0_ki*(2.0_ki*(tmp1+tmp2-(det_g*z+tmp9+tmp7+tmp6))+tmp10+tmp11+tmp12+tmp&
+ &14+tmp8+det_g+tmp7*z-tmp4)+tmp15-(tmp10*z+tmp16+tmp13))/(den1*den1)*g1*num_b1))
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = a*g1
+ tmp2 = c*g1
+ tmp3 = tmp2*num_b1
+ tmp4 = e*g1
+ tmp5 = a*a
+ tmp6 = tmp4*tmp5
+ tmp7 = det_g*num_b1
+ tmp8 = z*z
+ tmp9 = a*c
+ tmp10 = tmp9*e
+ tmp11 = tmp10*g1
+ tmp12 = a*e
+ tmp13 = tmp12*num_b1
+ tmp14 = c*f*num_b1
+ tmp15 = c*det_g
+ tmp16 = tmp15*g1
+ tmp17 = tmp16*z
+ tmp18 = g1*g1
+ tmp19 = e*e
+ tmp20 = b*c
+ tmp21 = d*g1
+ tmp22 = c*c
+ tmp23 = tmp21*tmp22
+ tmp24 = tmp7*z
+ tmp25 = tmp9*d
+ tmp26 = tmp25*g1
+ tmp27 = a*d
+ tmp28 = a*det_g
+ tmp29 = tmp28*g1*z
+ tmp30 = tmp20*d
+ tmp31 = tmp30*g1
+ tmp32 = b*d
+ tmp33 = c*d
+ tmp34 = tmp33*num_b1
+ tmp35 = d*e*num_b1
+ tmp36 = d*d
+ tmp37 = tmp22*tmp4
+ tmp38 = num_b1*z
+ tmp39 = c*e
+ tmp40 = d*det_g
+ tmp41 = det_g*e*g1
+ tmp42 = den1*den1
+ tmp43 = e*f
+ tmp44 = tmp28*e
+ tmp45 = tmp15*f
+ tmp46 = det_g*z
+ tmp47 = tmp46*tmp46
+ tmp48 = tmp33*det_g
+ tmp49 = tmp40*e
+ fg = (((6.0_ki*(tmp17-tmp3)+12.0_ki*(tmp3*z+tmp1*num_b1*z)+8.0_ki*(tmp11+tmp6-(a&
+ &*f*num_b1*z+tmp7*tmp8+tmp14*z+tmp13*z))+2.0_ki*(tmp37+tmp21*num_b1+tmp36*tmp38+&
+ &tmp41*z+tmp40*g1*z+b*det_g*g1*z-(tmp39*num_b1*z+tmp34*tmp8+tmp35+tmp16))+4.0_ki&
+ &*(tmp14+tmp24+tmp29+tmp1*tmp19+tmp13*tmp8+tmp24*tmp8+tmp34*z+tmp35*z+tmp20*f*g1&
+ &+tmp22*f*g1+tmp27*e*g1+tmp32*num_b1*z+tmp9*f*g1-(tmp33*e*g1+tmp32*e*g1+tmp18*tm&
+ &p9+tmp18*tmp20+tmp31+tmp26+tmp23+tmp2*tmp2))+tmp19*tmp2-(tmp4*num_b1+3.0_ki*tmp&
+ &2*tmp36+tmp16*tmp8+tmp41))/tmp42+4.0_ki*(8.0_ki*(tmp10*f+tmp43*tmp5-(tmp6+tmp11&
+ &))+2.0_ki*(tmp16+tmp47+tmp22*tmp43+tmp36*tmp39+tmp36*b*e-(tmp32*det_g*z+tmp49*z&
+ &+tmp48*z+tmp44*tmp8+tmp12*tmp36+tmp45+tmp37))+4.0_ki*(tmp23+tmp26+tmp31+tmp44*z&
+ &+tmp45*z+tmp28*f*z-(tmp22*d*f+tmp30*f+tmp25*f+tmp19*tmp27+tmp29+tmp17))+tmp49+t&
+ &mp33*tmp36+tmp48*tmp8+tmp15*e*z-(det_g*det_g*z+tmp47*z+tmp36*tmp46+tmp19*tmp33)&
+ &)/(tmp42*den1)*g1*num_b1)*g1+(2.0_ki*(tmp2+tmp8*num_b1-(b*g1*z+tmp4*z+tmp21*z+3&
+ &.0_ki*tmp2*z+2.0_ki*tmp1*z))+tmp4+tmp2*tmp8-(tmp38*tmp8+tmp38+tmp18))/den1)
+ !
+ case(2)
+ !
+ tmp1 = a*g2
+ tmp2 = a*c
+ tmp3 = f*g2
+ tmp4 = a*a
+ tmp5 = a*d
+ tmp6 = c*g2
+ tmp7 = d*d
+ tmp8 = c*c
+ tmp9 = d*g2
+ tmp10 = c*d
+ tmp11 = e*g2
+ tmp12 = d*det_g
+ tmp13 = den2*den2
+ tmp14 = e*f
+ tmp15 = tmp2*e
+ tmp16 = e*e
+ tmp17 = tmp2*d
+ tmp18 = b*c*d
+ tmp19 = c*det_g
+ fg = (((4.0_ki*(2.0_ki*(tmp3*tmp4+tmp2*f*g2-(tmp5*e*g2+tmp2*g2*g2+tmp1*tmp1))+c*&
+ &f*num_b2*z)+2.0_ki*(tmp3*tmp8+tmp6*tmp7+tmp9*num_b2+tmp7*b*g2-(d*e*num_b2*z+3.0&
+ &_ki*tmp6*num_b2*z+tmp10*e*g2+tmp1*tmp7+tmp6*tmp6))+tmp12*g2*z-tmp11*num_b2)/tmp&
+ &13+4.0_ki*(2.0_ki*(tmp14*tmp8+tmp19*g2*z+tmp7*b*e+tmp7*c*e-(tmp7*a*e+tmp19*f*z+&
+ &tmp11*tmp8))+4.0_ki*(2.0_ki*(tmp14*tmp4+tmp15*f-(tmp15*g2+tmp11*tmp4))+tmp17*g2&
+ &+tmp18*g2+tmp8*tmp9-(tmp8*d*f+tmp18*f+tmp17*f+tmp16*tmp5))+tmp10*tmp7+tmp12*e*z&
+ &-tmp10*tmp16)/(tmp13*den2)*g2*num_b2-1.0_ki/2.0_ki*(g2+2.0_ki*d*z)/den2)*g2)
+ !
+ case(3)
+ !
+ tmp1 = a*c
+ tmp2 = g3*g3
+ tmp3 = a*g3
+ tmp4 = c*g3
+ tmp5 = f*g3
+ tmp6 = c*c
+ tmp7 = c*d
+ tmp8 = a*a
+ tmp9 = e*e
+ tmp10 = b*c
+ tmp11 = a*d
+ tmp12 = a*e
+ tmp13 = z*z
+ tmp14 = b*d
+ tmp15 = d*d
+ tmp16 = d*g3
+ tmp17 = a*det_g
+ tmp18 = tmp17*g3
+ tmp19 = c*det_g
+ tmp20 = tmp19*g3
+ tmp21 = c*e
+ tmp22 = e*g3
+ tmp23 = d*det_g
+ tmp24 = den3*den3
+ tmp25 = e*f
+ tmp26 = tmp1*e
+ tmp27 = tmp1*d
+ tmp28 = tmp10*d
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(d*z+e*z)+4.0_ki*(tmp13*a+tmp13*b+tmp13*c)+3.0_ki*g&
+ &3)/den3+4.0_ki*(2.0_ki*(tmp15*tmp21+tmp25*tmp6+tmp13*tmp17*e+tmp15*b*e+tmp19*f*&
+ &z-(tmp13*tmp14*det_g+tmp22*tmp6+tmp20*z+tmp12*tmp15))+4.0_ki*(2.0_ki*(tmp25*tmp&
+ &8+tmp26*f-(tmp26*g3+tmp22*tmp8))+tmp16*tmp6+tmp27*g3+tmp28*g3+tmp17*f*z-(tmp6*d&
+ &*f+tmp28*f+tmp27*f+tmp18*z+tmp11*tmp9))+tmp15*tmp7+tmp13*tmp19*e-(tmp23*e*z+tmp&
+ &15*det_g*z+tmp13*tmp7*det_g+tmp7*tmp9))/(tmp24*den3)*g3*num_b3-(6.0_ki*(2.0_ki*&
+ &(tmp1*f*g3-(tmp3*num_b3*z+tmp1*tmp2))+tmp5*tmp6-(tmp7*e*g3+tmp4*num_b3*z+tmp4*t&
+ &mp4))+4.0_ki*(2.0_ki*(tmp5*tmp8+a*f*num_b3*z-tmp3*tmp3)+tmp3*tmp9+tmp10*f*g3+tm&
+ &p12*tmp13*num_b3+c*f*num_b3*z-(tmp14*e*g3+tmp13*tmp14*num_b3+tmp11*e*g3+tmp10*t&
+ &mp2))+2.0_ki*(tmp13*tmp18+tmp13*tmp20+tmp13*tmp21*num_b3+tmp15*b*g3+tmp13*b*det&
+ &_g*g3-(d*e*num_b3*z+tmp15*num_b3*z+tmp13*tmp7*num_b3+tmp16*num_b3+tmp15*tmp3))+&
+ &tmp22*num_b3+tmp4*tmp9+tmp23*g3*z+det_g*e*g3*z-tmp15*tmp4)/tmp24)*g3)
+ !
+ case(4)
+ !
+ tmp1 = a*f
+ tmp2 = c*f
+ tmp3 = a*e
+ tmp4 = tmp3*z
+ tmp5 = b*d*z
+ tmp6 = d*d
+ tmp7 = d*e
+ tmp8 = c*d
+ tmp9 = tmp8*z
+ tmp10 = c*e*z
+ tmp11 = z*z
+ tmp12 = c*g1
+ tmp13 = tmp12*z
+ tmp14 = num_b1*z
+ tmp15 = a*g1*z
+ tmp16 = e*g1
+ tmp17 = det_g*z
+ fg = ((1.0_ki/2.0_ki*(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z-(4.0_ki*(tmp1-a*g3)+2.0_k&
+ &i*(tmp2+tmp4-(c*g3+tmp5))+tmp10-(tmp9+tmp7+tmp6))/(den3*den3)*num_b3*z)*g3+((2.&
+ &0_ki*(tmp2-c*g2)-tmp7)/(den2*den2)*num_b2*z-1.0_ki/2.0_ki*d/den2*z)*g2+(3.0_ki*&
+ &(tmp11*num_b1-tmp13)+3.0_ki/2.0_ki*(-(tmp11*tmp14+tmp14))+tmp12+1.0_ki/2.0_ki*t&
+ &mp16+1.0_ki/2.0_ki*tmp11*tmp12-(d*g1*z+b*g1*z+tmp16*z+2.0_ki*tmp15))/den1+(4.0_&
+ &ki*(tmp13+tmp15-(tmp2*z+tmp11*det_g+tmp1*z+tmp4))+2.0_ki*(tmp17+tmp2+tmp5+tmp9+&
+ &tmp11*tmp17+tmp11*tmp3+tmp7*z-tmp12)+tmp6*z-(tmp11*tmp8+tmp7+tmp10))/(den1*den1&
+ &)*g1*num_b1)
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ tmp1 = c*g1
+ tmp2 = tmp1*num_b1
+ tmp3 = b*c
+ tmp4 = g1*g1
+ tmp5 = b*g1
+ tmp6 = c*f*num_b1
+ tmp7 = det_g*num_b1
+ tmp8 = tmp7*z
+ tmp9 = z*z
+ tmp10 = a*c
+ tmp11 = tmp10*e
+ tmp12 = tmp11*g1
+ tmp13 = a*e
+ tmp14 = tmp13*num_b1
+ tmp15 = a*g1
+ tmp16 = tmp3*d
+ tmp17 = tmp16*g1
+ tmp18 = b*d
+ tmp19 = tmp18*num_b1
+ tmp20 = c*det_g
+ tmp21 = tmp20*g1
+ tmp22 = tmp21*z
+ tmp23 = e*g1
+ tmp24 = a*a
+ tmp25 = tmp23*tmp24
+ tmp26 = d*g1
+ tmp27 = b*b
+ tmp28 = tmp26*tmp27
+ tmp29 = f*g1
+ tmp30 = e*e
+ tmp31 = b*det_g
+ tmp32 = tmp31*g1
+ tmp33 = c*c
+ tmp34 = tmp26*tmp33
+ tmp35 = tmp23*tmp33
+ tmp36 = d*e*num_b1
+ tmp37 = c*d
+ tmp38 = tmp37*num_b1
+ tmp39 = c*e
+ tmp40 = tmp39*num_b1
+ tmp41 = tmp10*d
+ tmp42 = tmp41*g1
+ tmp43 = a*d
+ tmp44 = a*det_g
+ tmp45 = tmp44*g1*z
+ tmp46 = tmp3*e
+ tmp47 = tmp46*g1
+ tmp48 = d*d
+ tmp49 = det_g*e*g1
+ tmp50 = num_b1*z
+ tmp51 = d*det_g
+ tmp52 = den1*den1
+ tmp53 = e*f
+ tmp54 = d*f
+ tmp55 = tmp20*f
+ tmp56 = tmp44*e
+ tmp57 = tmp18*det_g
+ tmp58 = det_g*det_g
+ tmp59 = det_g*z
+ tmp60 = tmp59*tmp59
+ tmp61 = tmp51*e
+ tmp62 = tmp37*det_g
+ tmp20 = tmp20*e
+ fg = ((-(4.0_ki*(12.0_ki*(tmp17+tmp11*f-(tmp16*f+tmp12))+8.0_ki*(tmp28+tmp24*tmp&
+ &53-(tmp27*tmp54+tmp25))+2.0_ki*(tmp57+tmp18*tmp30-(tmp56*tmp9+tmp13*tmp48))+4.0&
+ &_ki*(tmp32+tmp42+tmp46*f+tmp44*f*z-(tmp41*f+tmp31*f+tmp47+tmp45))+3.0_ki*(tmp60&
+ &+tmp61+tmp20*z+tmp39*tmp48-(tmp62*z+tmp61*z+tmp58*z+tmp30*tmp37))+6.0_ki*(tmp21&
+ &+tmp34+tmp33*tmp53+tmp55*z+tmp56*z+tmp48*b*e-(tmp57*z+tmp33*tmp54+tmp30*tmp43+t&
+ &mp55+tmp35+tmp22))+tmp58+tmp30*det_g+tmp37*tmp48+tmp62*tmp9-(tmp60*z+tmp48*tmp5&
+ &9+tmp30*tmp39+tmp20))/(tmp52*den1)*g1*num_b1+(18.0_ki*(tmp2*z-tmp2)+8.0_ki*(tmp&
+ &25+tmp27*tmp29+b*f*num_b1-(a*f*num_b1*z+tmp5*tmp5+tmp28))+2.0_ki*(tmp40+tmp48*t&
+ &mp50+tmp51*g1*z-(tmp38*tmp9+tmp30*num_b1+tmp30*tmp5))+3.0_ki*(tmp1*tmp30+tmp26*&
+ &num_b1+tmp49*z-(tmp23*num_b1+tmp1*tmp48+tmp49))+4.0_ki*(tmp45+tmp47+tmp14*tmp9+&
+ &tmp8*tmp9+tmp10*f*g1+tmp43*e*g1-(tmp10*tmp4+tmp7+tmp42+tmp19))+6.0_ki*(tmp35+tm&
+ &p15*tmp30+tmp29*tmp33+tmp32*z+tmp36*z+tmp38*z-(tmp37*e*g1+tmp40*z+tmp36+tmp34+t&
+ &mp32+tmp21+tmp1*tmp1))+12.0_ki*(tmp12+tmp6+tmp8+tmp19*z+tmp15*num_b1*z+tmp3*f*g&
+ &1-(tmp18*e*g1+tmp7*tmp9+tmp6*z+tmp5*num_b1+tmp3*tmp4+tmp14*z+tmp17))+9.0_ki*tmp&
+ &22-tmp21*tmp9)/tmp52))*g1+(2.0_ki*(2.0_ki*tmp15*z+tmp26*z)+6.0_ki*(tmp5*z-(tmp5&
+ &+tmp1))+3.0_ki*(tmp50+3.0_ki*tmp1*z+tmp23*z-(tmp9*num_b1+tmp23))+3.0_ki/2.0_ki*&
+ &tmp4+tmp50*tmp9-(tmp1*tmp9+num_b1))/den1)
+ !
+ case(2)
+ !
+ tmp1 = g2*g2
+ tmp2 = d*g2
+ tmp3 = num_b2*z
+ tmp4 = z*z
+ tmp5 = c*g2
+ tmp6 = e*g2
+ tmp7 = a*c
+ tmp8 = a*d
+ tmp9 = b*g2
+ tmp10 = a*g2
+ tmp11 = f*g2
+ tmp12 = a*a
+ tmp13 = d*d
+ tmp14 = c*c
+ tmp15 = c*d
+ tmp16 = b*c
+ tmp17 = b*d
+ tmp18 = e*e
+ tmp19 = d*det_g
+ tmp20 = c*e
+ tmp21 = c*det_g
+ tmp22 = tmp21*g2
+ tmp23 = den2*den2
+ tmp24 = tmp7*e
+ tmp25 = tmp16*d
+ tmp26 = e*f
+ tmp27 = d*f
+ tmp28 = b*b
+ tmp29 = tmp7*d
+ tmp30 = tmp16*e
+ tmp31 = b*det_g
+ tmp32 = det_g*z
+ fg = ((-(4.0_ki*(3.0_ki*(tmp13*tmp20+tmp19*e*z-tmp15*tmp18)+2.0_ki*(tmp17*tmp18+&
+ &tmp17*tmp4*det_g-tmp13*a*e)+8.0_ki*(tmp12*tmp26+tmp2*tmp28-(tmp27*tmp28+tmp12*t&
+ &mp6))+12.0_ki*(tmp24*f+tmp25*g2-(tmp25*f+tmp24*g2))+4.0_ki*(tmp29*g2+tmp30*f+tm&
+ &p31*g2*z-(tmp31*f*z+tmp30*g2+tmp29*f))+6.0_ki*(tmp14*tmp2+tmp14*tmp26+tmp22*z+t&
+ &mp13*b*e-(tmp21*f*z+tmp18*tmp8+tmp14*tmp6+tmp14*tmp27))+tmp13*tmp15+tmp18*tmp32&
+ &+tmp32*tmp32*z-(tmp21*tmp4*e+tmp18*tmp20))/(tmp23*den2)*g2*num_b2+(8.0_ki*(tmp1&
+ &1*tmp12+b*f*num_b2*z-tmp10*tmp10)+2.0_ki*(tmp20*tmp4*num_b2+det_g*e*g2*z-(tmp18&
+ &*tmp3+tmp10*tmp13))+4.0_ki*(tmp16*f*g2+tmp17*e*g2-(tmp4*det_g*num_b2*z+tmp17*tm&
+ &p4*num_b2+tmp1*tmp16))+12.0_ki*(tmp7*f*g2+c*f*num_b2*z-(tmp9*num_b2*z+tmp8*e*g2&
+ &+tmp1*tmp7))+3.0_ki*(tmp13*tmp5+tmp2*num_b2+tmp19*g2*z-(tmp6*num_b2+tmp18*tmp5)&
+ &)+6.0_ki*(tmp11*tmp14+tmp13*tmp9-(d*e*num_b2*z+3.0_ki*tmp5*num_b2*z+tmp15*e*g2+&
+ &tmp5*tmp5))-tmp22*tmp4)/tmp23))*g2+(3.0_ki/2.0_ki*(tmp1+2.0_ki*tmp2*z)+2.0_ki*t&
+ &mp6*z-(tmp4*tmp5+tmp3*tmp4))/den2)
+ !
+ case(3)
+ !
+ tmp1 = z*z
+ tmp2 = a*c
+ tmp3 = g3*g3
+ tmp4 = b*c
+ tmp5 = c*g3
+ tmp6 = f*g3
+ tmp7 = c*c
+ tmp8 = a*g3
+ tmp9 = b*g3
+ tmp10 = c*d
+ tmp11 = a*a
+ tmp12 = b*b
+ tmp13 = a*d
+ tmp14 = a*e
+ tmp15 = b*d
+ tmp16 = e*e
+ tmp17 = d*d
+ tmp18 = a*det_g
+ tmp19 = tmp18*g3
+ tmp20 = b*det_g
+ tmp21 = tmp20*g3
+ tmp22 = c*det_g
+ tmp23 = c*e
+ tmp24 = d*g3
+ tmp25 = e*g3
+ tmp26 = num_b3*z
+ tmp27 = den3*den3
+ tmp28 = tmp2*e
+ tmp29 = tmp4*d
+ tmp30 = e*f
+ tmp31 = d*f
+ tmp32 = tmp2*d
+ tmp33 = tmp4*e
+ tmp34 = det_g*z
+ fg = (((6.0_ki*(tmp16*tmp8+tmp17*tmp9)+3.0_ki*(tmp25*num_b3-tmp24*num_b3)+16.0_k&
+ &i*(tmp2*f*g3+tmp4*f*g3-(tmp3*tmp4+tmp2*tmp3))+12.0_ki*(tmp6*tmp7+tmp9*num_b3*z-&
+ &(tmp8*num_b3*z+tmp10*e*g3+tmp5*tmp5))+4.0_ki*(tmp1*tmp19+tmp1*tmp21+tmp1*tmp22*&
+ &g3+tmp1*tmp23*num_b3-tmp1*tmp10*num_b3)+2.0_ki*(tmp16*tmp26+d*det_g*g3*z+det_g*&
+ &e*g3*z-(tmp17*tmp8+tmp17*tmp26+tmp16*tmp9))+8.0_ki*(tmp11*tmp6+tmp12*tmp6+tmp1*&
+ &tmp14*num_b3+a*f*num_b3*z-(b*f*num_b3*z+tmp15*e*g3+tmp13*e*g3+tmp1*tmp15*num_b3&
+ &+tmp9*tmp9+tmp8*tmp8)))/tmp27-(4.0_ki*(3.0_ki*(tmp17*tmp23-tmp10*tmp16)+8.0_ki*&
+ &(tmp11*tmp30+tmp12*tmp24-(tmp12*tmp31+tmp11*tmp25))+2.0_ki*(tmp15*tmp16+tmp1*tm&
+ &p22*e-(tmp1*tmp10*det_g+tmp14*tmp17))+12.0_ki*(tmp28*f+tmp29*g3-(tmp29*f+tmp28*&
+ &g3))+6.0_ki*(tmp24*tmp7+tmp30*tmp7+tmp17*b*e-(tmp31*tmp7+tmp25*tmp7+tmp13*tmp16&
+ &))+4.0_ki*(tmp21*z+tmp32*g3+tmp33*f+tmp1*tmp18*e+tmp18*f*z-(tmp20*f*z+tmp1*tmp1&
+ &5*det_g+tmp33*g3+tmp32*f+tmp19*z))+tmp10*tmp17+tmp16*tmp34-(tmp17*tmp34+tmp16*t&
+ &mp23))/(tmp27*den3)*g3*num_b3+(2.0_ki*(d*z+e*z)+4.0_ki*(tmp1*a+tmp1*b+tmp1*c)+3&
+ &.0_ki*g3)/den3))*g3)
+ !
+ case(4)
+ !
+ tmp1 = num_b1*z
+ tmp2 = z*z
+ tmp3 = c*g1
+ tmp4 = tmp3*z
+ tmp5 = b*g1
+ tmp6 = e*g1
+ tmp7 = a*g1*z
+ tmp8 = c*f
+ tmp9 = det_g*z
+ tmp10 = tmp2*det_g
+ tmp11 = a*e
+ tmp12 = tmp11*z
+ tmp13 = b*d
+ tmp14 = tmp13*z
+ tmp15 = d*e
+ tmp16 = c*d
+ tmp17 = tmp16*z
+ tmp18 = c*e
+ tmp19 = tmp18*z
+ tmp20 = b*f
+ tmp21 = a*f
+ tmp22 = e*e
+ tmp23 = d*d
+ tmp24 = c*g2
+ fg = (((2.0_ki*(tmp19-tmp17)+4.0_ki*(tmp12+tmp21+b*g3-(a*g3+tmp20+tmp14))+tmp22-&
+ &tmp23)/(den3*den3)*num_b3*z-(2.0_ki*(a*z+b*z+c*z)+d+e)/den3*z)*g3+(3.0_ki/2.0_k&
+ &i*(3.0_ki*(tmp1+tmp4-tmp2*num_b1)+2.0_ki*(tmp5*z-(tmp5+tmp3))+tmp1*tmp2+tmp6*z-&
+ &(num_b1+tmp6))+2.0_ki*tmp7+d*g1*z-1.0_ki/2.0_ki*tmp2*tmp3)/den1+(3.0_ki*(2.0_ki&
+ &*(tmp24-tmp8)+tmp15)+2.0_ki*(2.0_ki*(b*g2-tmp20)+tmp10+tmp14)+tmp22-tmp19)/(den&
+ &2*den2)*g2*num_b2*z-((2.0_ki*(2.0_ki*(tmp20+tmp7-(tmp21*z+tmp5))+tmp11*tmp2+tmp&
+ &2*tmp9-(det_g+tmp13))+3.0_ki*(2.0_ki*(tmp14+tmp4+tmp8+tmp9-(tmp8*z+tmp3+tmp12+t&
+ &mp10))+tmp17+tmp15*z-(tmp19+tmp15))+tmp18+tmp23*z-(tmp16*tmp2+tmp22))/(den1*den&
+ &1)*g1*num_b1+1.0_ki/2.0_ki*(3.0_ki*(tmp2*num_b2-d*g2)+tmp24*z-2.0_ki*e*g2)/den2&
+ &*z))
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p_finite.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else if (dim == "n+2") then
+ !
+ if (nb_par == 0) then
+ !
+ select case (flag)
+ !
+ case(1)
+ !
+ fg = num_b1*g1/(2._ki*det_g*g1+det_s)
+ !
+ case(2)
+ !
+ fg = num_b2*g2/(2._ki*det_g*g2+det_s)
+ !
+ case(3)
+ !
+ fg = num_b3*g3/(2._ki*det_g*g3+det_s)
+ !
+ case(4)
+ !
+ fg = -1._ki/2._ki
+ !
+ end select
+ else if (nb_par == 1) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-b*g1**2/den1+num_b1*g1**2*(-c**2+4._ki*a*b-e*c+2._ki*b*d)/den&
+ &1**2
+ !
+ case(2)
+ !
+ fg=-1._ki/2._ki*g2*(c*g2-2._ki*num_b2+2._ki*num_b2*z)/den2+num_b2&
+ &*g2**2*(-det_g+4._ki*a*b-c**2+det_g*z-e*c+2._ki*b*d)/den2**2
+ !
+ case(3)
+ !
+ fg=1._ki/2._ki*g3*(g3*c+2._ki*g3*b+2._ki*num_b3-2._ki*z*num_b3)/d&
+ &en3+num_b3*g3**2*(-det_g+4._ki*a*b-c**2+det_g*z-e*c+2._ki*b*d)/&
+ &den3**2
+ !
+ case(4)
+ !
+ fg=-1._ki/4._ki-1._ki/2._ki*num_b3*g3*(z-1._ki)/den3-1._ki/2._ki*&
+ &num_b2*g2*(z-1._ki)/den2
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=-1._ki/2._ki*g1*(c*g1-2._ki*num_b1*z)/den1-num_b1*g1**2*(det_g&
+ &*z-c*d+2._ki*e*a)/den1**2
+ !
+ case(2)
+ !
+ fg=-a*g2**2/den2-num_b2*g2**2*(2._ki*e*a-c*d)/den2**2
+ !
+ case(3)
+ !
+ fg=1._ki/2._ki*g3*(2._ki*g3*a+g3*c+2._ki*z*num_b3)/den3-num_b3*g3&
+ &**2*(det_g*z-c*d+2._ki*e*a)/den3**2
+ !
+ case(4)
+ !
+ fg=1._ki/2._ki*num_b3*z*g3/den3-1._ki/4._ki+1._ki/2._ki*num_b1*z*&
+ &g1/den1
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(flag)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*g1*(c*g1+2._ki*g1*b+2._ki*num_b1-2._ki*num_b1*z)/d&
+ &en1+num_b1*g1**2*(-det_g+e*c-2._ki*b*d+det_g*z-c*d+2._ki*e*a)/d&
+ &en1**2
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*g2*(2._ki*g2*a+c*g2+2._ki*num_b2*z)/den2+num_b2*g2&
+ &**2*(-det_g*z+e*c-2._ki*b*d-c*d+2._ki*e*a)/den2**2
+ !
+ case(3)
+ !
+ fg=-g3**2*(c+a+b)/den3+num_b3*g3**2*(2._ki*e*a+e*c-c*d-2._ki*b*d)&
+ &/den3**2
+ !
+ case(4)
+ !
+ fg=1._ki/2._ki*num_b2*z*g2/den2-1._ki/4._ki-1._ki/2._ki*num_b1*g1&
+ &*(z-1._ki)/den1
+ !
+ end select
+ !
+ end select
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p_finite.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p_finite.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for dim = %c0'
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function fg
+ !
+end module function_3p_finite
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p2m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p2m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p2m.f90 (revision 119)
@@ -0,0 +1,335 @@
+!
+!****h* src/integral/three_point/function_3p2m
+! NAME
+!
+! Module function_3p2m
+!
+! USAGE
+!
+! use function_3p2m
+!
+! DESCRIPTION
+!
+! This module is used to compute the two off-shell external leg three point function
+! with no internal mass with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * f3p2m -- a function for the computation of the two off-shell external leg three
+! point function with/without Feynman parameters in n dimensions
+! * f3p2m_np2 -- a function for the computation of the two off-shell external leg three
+! point function with/without Feynman parameters in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * func_h0 (src/integrals/three_point/mod_h0.f90)
+! * func_he (src/integrals/three_point/mod_he.f90)
+! * func_hf (src/integrals/three_point/mod_hf.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+!
+!*****
+module function_3p2m
+ !
+ use precision_golem
+ use logarithme
+ use func_h0
+ use func_he
+ use func_hf
+ use sortie_erreur
+ implicit none
+ !
+ private
+ !
+ public :: f3p2m, f3p2m_np2
+ !
+ contains
+ !
+ !
+ !****f* src/integral/three_point/function_3p2m/f3p2m
+ ! NAME
+ !
+ ! Function f3p2m
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p2m(s13,s23,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the two off-shell external leg three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s23 -- real (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ ! two mass three point function without Feynman parameters
+ ! f3p2m(s13,s23,0,0,0)
+ ! with one Feynman parameter at the numerator z_1
+ ! f3p2m(s13,s23,0,0,1)
+ ! with three Feynman parameters at the numerator z_2^2 z_3
+ ! f3p2m(s13,s23,2,2,3)
+ !
+ !*****
+ function f3p2m(s23,s13,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p2m
+ !
+ f3p2m = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p2m(3:4) = he(1,s13,s23)
+ f3p2m(5:6) = hf(1,s13,s23)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ f3p2m(3:4) = he(2,s13,s23)
+ f3p2m(5:6) = hf(2,s13,s23)-f3p2m(3:4)
+ !
+ else if (par3 == 2) then
+ !
+ f3p2m(3:4) = he(2,s23,s13)
+ f3p2m(5:6) = hf(2,s23,s13)-f3p2m(3:4)
+ !
+ else if (par3 == 3) then
+ !
+ f3p2m(5:6) = he(1,s13,s23)
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ f3p2m(3:4) = he(3,s13,s23)
+ f3p2m(5:6) = hf(3,s13,s23)-3._ki/2._ki*f3p2m(3:4)
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p2m(3:4) = he(3,s23,s13)
+ f3p2m(5:6) = hf(3,s23,s13)-3._ki/2._ki*f3p2m(3:4)
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(1,s13,s23)/2._ki
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ f3p2m(3:4) = he(2,s13,s23)-he(3,s13,s23)
+ f3p2m(5:6) = hf(2,s13,s23)-hf(3,s13,s23)-3._ki/2._ki*f3p2m(3:4)
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(2,s13,s23)/2._ki
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(2,s23,s13)/2._ki
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ f3p2m(3:4) = he(4,s13,s23)
+ f3p2m(5:6) = hf(4,s13,s23)-11._ki/6._ki*f3p2m(3:4)
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p2m(3:4) = he(4,s23,s13)
+ f3p2m(5:6) = hf(4,s23,s13)-11._ki/6._ki*f3p2m(3:4)
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(1,s13,s23)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ f3p2m(3:4) = he(3,s13,s23)-he(4,s13,s23)
+ f3p2m(5:6) = hf(3,s13,s23)-hf(4,s13,s23)-11._ki/6._ki*f3p2m(3:4)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p2m(3:4) = he(3,s23,s13)-he(4,s23,s13)
+ f3p2m(5:6) = hf(3,s23,s13)-hf(4,s23,s13)-11._ki/6._ki*f3p2m(3:4)
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(3,s13,s23)/3._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(3,s23,s13)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(2,s13,s23)/6._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(2,s23,s13)/6._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p2m(5:6) = he(2,s13,s23)/3._ki-he(3,s13,s23)/3._ki
+ !
+ end if
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ f3p2m(3:4) = -f3p2m(3:4)
+ !
+ end function f3p2m
+ !
+ !
+ !****f* src/integral/three_point/function_3p2m/f3p2m_np2
+ ! NAME
+ !
+ ! Function f3p2m_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p2m_np2(s13,s23,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the two off-shell external leg three point function in n+2 dimensions.
+ ! with up to one Feynman parameter in the numerator.
+ ! It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s23 -- real (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * par1 -- an integer, the label of the third Feynman parameter = 0
+ ! * par2 -- an integer, the label of the second Feynman parameter = 0
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ ! two mass three point function without Feynman parameters
+ ! f3p2m_np2(s13,s23,0,0,0)
+ ! with one Feynman parameter at the numerator z_1
+ ! f3p2m_np2(s13,s23,0,0,1)
+ !
+ !*****
+ function f3p2m_np2(s23,s13,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p2m_np2
+ !
+ f3p2m_np2 = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p2m_np2(1) = -1._ki/2._ki
+ f3p2m_np2(2) = 0._ki
+ f3p2m_np2(3:4) = (s13*h0e(s13)+s23*he(1,s13,s23))/2._ki
+ f3p2m_np2(3) = f3p2m_np2(3)-3._ki/2._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f3p2m_np2(1) = -1._ki/6._ki
+ f3p2m_np2(2) = 0._ki
+ !
+ if (par3 == 1) then
+ !
+ f3p2m_np2(3:4) = (s13*h0e(s13)+s23*he(2,s13,s23))/6._ki
+ !
+ else if (par3 == 2) then
+ !
+ f3p2m_np2(3:4) = (s23*h0e(s23)+s13*he(2,s23,s13))/6._ki
+ !
+ else if (par3 == 3) then
+ !
+ f3p2m_np2(3:4) = (s13*h0e(s13)+s23*he(1,s13,s23))/6._ki
+ !
+ end if
+ !
+ f3p2m_np2(3) = f3p2m_np2(3)-8._ki/18._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'error in function f3p2m_np2'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of two mass six dimensional 3-point function &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'Feynman param 1: %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'Feynman param 2: %d1'
+ tab_erreur_par(4)%arg_int = par2
+ tab_erreur_par(5)%a_imprimer = .true.
+ tab_erreur_par(5)%chaine = 'Feynman param 3: %d1'
+ tab_erreur_par(5)%arg_int = par3
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function f3p2m_np2
+ !
+end module function_3p2m
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/Makefile.dep (revision 119)
@@ -0,0 +1,28 @@
+# Module dependencies
+function_3p1m.o: mod_h0.o
+function_3p1m.lo: mod_h0.lo
+function_3p1m.obj: mod_h0.obj
+function_3p1m_1mi.o: mod_he.o
+function_3p1m_1mi.lo: mod_he.lo
+function_3p1m_1mi.obj: mod_he.obj
+function_3p1m_2mi.o: mod_gn.o
+function_3p1m_2mi.lo: mod_gn.lo
+function_3p1m_2mi.obj: mod_gn.obj
+function_3p2m.o: mod_h0.o mod_he.o mod_hf.o
+function_3p2m.lo: mod_h0.lo mod_he.lo mod_hf.lo
+function_3p2m.obj: mod_h0.obj mod_he.obj mod_hf.obj
+function_3p2m_1mi.o: mod_he.o mod_hf.o
+function_3p2m_1mi.lo: mod_he.lo mod_hf.lo
+function_3p2m_1mi.obj: mod_he.obj mod_hf.obj
+function_3p_finite.o: cas_merdique.o
+function_3p_finite.lo: cas_merdique.lo
+function_3p_finite.obj: cas_merdique.obj
+generic_function_3p.o: function_3p0m_1mi.o function_3p1m.o function_3p1m_1mi.o \
+ function_3p1m_2mi.o function_3p2m.o function_3p2m_1mi.o \
+ function_3p3m.o function_3p_finite.o
+generic_function_3p.lo: function_3p0m_1mi.lo function_3p1m.lo \
+ function_3p1m_1mi.lo function_3p1m_2mi.lo function_3p2m.lo \
+ function_3p2m_1mi.lo function_3p3m.lo function_3p_finite.lo
+generic_function_3p.obj: function_3p0m_1mi.obj function_3p1m.obj \
+ function_3p1m_1mi.obj function_3p1m_2mi.obj function_3p2m.obj \
+ function_3p2m_1mi.obj function_3p3m.obj function_3p_finite.obj
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p3m.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p3m.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p3m.f90 (revision 119)
@@ -0,0 +1,1614 @@
+!
+!****h* src/integral/three_point/function_3p3m
+! NAME
+!
+! Module function_3p3m
+!
+! USAGE
+!
+! use function_3p3m
+!
+! DESCRIPTION
+!
+! This module is used to compute the three off-shell external leg three point function
+! with no internal leg with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports three functions:
+! * f3p3m -- a function for the computation of the three mass three
+! point function with/without Feynman parameters in n, n+2 dimensions
+! * f3p3m_c -- a function which computes the same thing as f3p3m, only
+! the format of the return values is different
+! * i3_3mass -- a function for the computation of the scalar three mass three
+! point function in n dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+! * parametre (src/module/parametre.f90)
+! * array (src/module/array.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * generic_function_2p (src/integrals/two_point/generic_function_2p.f90)
+! * multiply_div (src/module/multiply_div.f90)
+! * s_matrix_type (src/module/s_matrix_type.f90)
+!
+!*****
+module function_3p3m
+ !
+ use precision_golem
+ use numerical_evaluation
+ use dilogarithme
+ use logarithme
+ use constante
+ use parametre
+ use array
+ use sortie_erreur
+ use generic_function_2p
+ use multiply_div
+ use s_matrix_type
+ use matrice_s, only : prepare_s_matrix_local
+ implicit none
+ !
+ private
+ !
+ real(ki) :: s12_glob,s23_glob,s13_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob
+ character (len=3) :: dim_glob
+ !
+ real(ki), dimension(3) :: b
+ real(ki) :: sumb
+ real(ki), dimension(3,3) :: invs,s_mat_loc
+ integer, dimension(3) :: par
+ integer, dimension(3) :: s = (/1,2,3/)
+ type (s_matrix_poly) :: s_mat_p_loc
+ !
+ logical, dimension(:), allocatable :: deja_calcule
+ real(ki),dimension(:,:), allocatable :: resultat
+ logical, dimension(:,:), allocatable :: deja_calcule2
+ real(ki),dimension(:,:,:), allocatable :: resultat2
+ logical, dimension(:), allocatable :: deja_calcule_np2
+ real(ki),dimension(:,:), allocatable :: resultat_np2
+ logical, dimension(:,:,:), allocatable :: deja_calcule22
+ real(ki),dimension(:,:,:,:), allocatable :: resultat22
+ !
+ public :: f3p3m,i3_3mass,f3p3m_c
+ !
+ contains
+ !
+ !****f* src/integral/three_point/function_3p3m/f3p3m
+ ! NAME
+ !
+ ! Function f3p3m
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p3m(dim,m1,m2,m3,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the three off-shell external leg three point function in n
+ ! and n+2 dimension. It uses the formula of ref.
+ ! It switches to numerical evaluation if the Gram determinant is smaller than
+ ! coupure_3p3m (in src/module/parametre.f90)
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (length 3), to compute in n or n+2 dimensions,
+ ! the values are "ndi", "n+2"
+ ! * m1 -- a real (type ki), the first mass squared
+ ! * m2 -- a real (type ki), the second mass squared
+ ! * m3 -- a real (type ki), the third mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero for dim="n+2", an error is returned.
+ !
+ ! EXAMPLE
+ !
+ ! three mass three point function without Feynman parameters in n dimensions
+ ! f3p3m("ndi",m1,m2,m3,0,0,0)
+ ! with one Feynman parameter at the numerator z_1 in n dimensions
+ ! f3p3m("ndi",m1,m2,m3,0,0,1)
+ ! with three Feynman parameters at the numerator z_2^2 z_3 in n dimensions
+ ! f3p3m("ndi",m1,m2,m3,2,2,3)
+ ! three mass three point function without Feynman parameters in n+2 dimensions
+ ! f3p3m("n+2",m1,m2,m3,0,0,0)
+ ! with one Feynman parameter at the numerator z_1 in n+2 dimensions
+ ! f3p3m("n+2",m1,m2,m3,0,0,1)
+ !
+ !*****
+ function f3p3m(dim,m1,m2,m3,par1,par2,par3)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p3m
+ !
+ integer :: nb_par
+ real(ki) :: lamb
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: resto,abserro
+ !
+ par = (/par1,par2,par3/)
+ !
+ s_mat_loc(1,:) = (/0._ki,m2,m1/)
+ s_mat_loc(2,:) = (/m2,0._ki,m3/)
+ s_mat_loc(3,:) = (/m1,m3,0._ki/)
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = maxval(array=abs(s_mat_loc))
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ s_mat_loc = s_mat_loc/plus_grand
+ !
+ s_mat_p_loc = assign_s_matrix(s_mat_loc)
+ call prepare_s_matrix_local(s_mat_p_loc,s)
+ !
+ b(1) = (s_mat_loc(1,3)+s_mat_loc(1,2)-s_mat_loc(2,3))/(2._ki*s_mat_loc(1,3)*s_mat_loc(1,2))
+ b(2) = (s_mat_loc(1,2)+s_mat_loc(2,3)-s_mat_loc(1,3))/(2._ki*s_mat_loc(1,2)*s_mat_loc(2,3))
+ b(3) = (s_mat_loc(1,3)+s_mat_loc(2,3)-s_mat_loc(1,2))/(2._ki*s_mat_loc(1,3)*s_mat_loc(2,3))
+ !
+ sumb = (2._ki*s_mat_loc(1,3)*s_mat_loc(2,3)+2._ki*s_mat_loc(1,2)*s_mat_loc(2,3)&
+ &+2._ki*s_mat_loc(1,3)*s_mat_loc(1,2)-s_mat_loc(1,3)*s_mat_loc(1,3)-s_mat_loc(1,2)*s_mat_loc(1,2)&
+ &-s_mat_loc(2,3)*s_mat_loc(2,3))/(2._ki*s_mat_loc(1,3)*s_mat_loc(1,2)*s_mat_loc(2,3))
+ !
+ invs(1,1) = -s_mat_loc(2,3)/s_mat_loc(1,2)/s_mat_loc(1,3)/2._ki
+ invs(1,2) = 1._ki/s_mat_loc(1,2)/2._ki
+ invs(1,3) = 1._ki/s_mat_loc(1,3)/2._ki
+ invs(2,1) = 1._ki/s_mat_loc(1,2)/2._ki
+ invs(2,2) = -s_mat_loc(1,3)/s_mat_loc(1,2)/s_mat_loc(2,3)/2._ki
+ invs(2,3) = 1._ki/s_mat_loc(2,3)/2._ki
+ invs(3,1) = 1._ki/s_mat_loc(1,3)/2._ki
+ invs(3,2) = 1._ki/s_mat_loc(2,3)/2._ki
+ invs(3,3) = -s_mat_loc(1,2)/s_mat_loc(1,3)/s_mat_loc(2,3)/2._ki
+ !
+ lamb = 2._ki*s_mat_loc(1,3)*s_mat_loc(2,3)+2._ki*s_mat_loc(1,2)*s_mat_loc(2,3)&
+ +2._ki*s_mat_loc(1,3)*s_mat_loc(1,2)-s_mat_loc(1,3)*s_mat_loc(1,3)-s_mat_loc(1,2)*s_mat_loc(1,2)&
+ -s_mat_loc(2,3)*s_mat_loc(2,3)
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ !
+ norma = -1._ki/2._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = -1._ki/6._ki
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ ! memory allocation to save time in the recursion
+ !
+ allocate(deja_calcule(4))
+ allocate(resultat(4,2))
+ allocate(deja_calcule2(3,4))
+ allocate(resultat2(3,4,4))
+ allocate(deja_calcule_np2(4))
+ allocate(resultat_np2(4,4))
+ allocate(deja_calcule22(3,4,4))
+ allocate(resultat22(3,4,4,4))
+ !
+ ! initialisation
+ !
+ deja_calcule = .false.
+ resultat = 0._ki
+ deja_calcule2 = .false.
+ resultat2 = 0._ki
+ deja_calcule_np2 = .false.
+ resultat_np2 = 0._ki
+ deja_calcule22 = .false.
+ resultat22 = 0._ki
+ !
+ f3p3m = 0._ki
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_4p1m) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p3m (in file function_3p3m.f90): &
+ &the flag rat to compute the rational part is on &
+ &and the program reachs a region of phase space in &
+ &which det(G) = 0 Be careful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_3p3m'
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if (abs(sumb) > coupure_3p3m) then
+ !
+ ! analytic computation
+ !
+ if (dim == "ndi") then
+ !
+ f3p3m(3:4)= a3p3m(s_mat_loc(1,3),s_mat_loc(1,2),s_mat_loc(2,3),par1,par2,par3)&
+ &/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ f3p3m = a3p3m_np2(s_mat_loc(1,3),s_mat_loc(1,2),s_mat_loc(2,3),par1,par2,par3)
+ f3p3m(3) = f3p3m(3)-log(plus_grand)*norma
+ ! mu2_scale_par is already contained in the bubbles,
+ ! but scaling of s_mat_loc still needs to be undone
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p3m (function_3p3m.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'dim = %c0'
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ s13_glob = s_mat_loc(1,3)
+ s12_glob = s_mat_loc(1,2)
+ s23_glob = s_mat_loc(2,3)
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s13+(1-z)*s23 = s23+x*(s13-s23)-i*eps*y*(s13-s23)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s13-s23) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = sign(1._ki,s23_glob-s13_glob)
+ !
+ origine_info_par = "f3p3m, dimension "//dim
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = (2._ki*s_mat_loc(1,3)*s_mat_loc(1,2)*s_mat_loc(2,3))
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ if (dim == "ndi") then
+ !
+ resto = resto/plus_grand
+ !
+ else if (dim == "n+2") then
+ !
+ f3p3m(1) = norma
+ f3p3m(2) = 0._ki
+ resto = resto-log(plus_grand/mu2_scale_par)*norma
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p3m (function_3p3m.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'dim = %c0'
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ f3p3m(3) = real(resto,ki)
+ f3p3m(4) = aimag(resto)
+ !
+ end if
+ !
+ ! on libere la memoire
+ !
+ deallocate(deja_calcule)
+ deallocate(resultat)
+ deallocate(deja_calcule2)
+ deallocate(resultat2)
+ deallocate(deja_calcule_np2)
+ deallocate(resultat_np2)
+ deallocate(deja_calcule22)
+ deallocate(resultat22)
+ !
+ end function f3p3m
+ !
+ !****f* src/integral/three_point/function_3p3m/f3p3m_c
+ ! NAME
+ !
+ ! Function f3p3m_c
+ !
+ ! USAGE
+ !
+ ! complex_dim3 = f3p3m_c(dim,m1,m2,m3,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! It computes the same thing that the function f3p3m, but the returned
+ ! value is a complex (type ki) array of rank 1 and shape 2
+ !
+ ! INPUTS
+ !
+ ! * dim -- a character (length 3), to compute in n or n+2 dimensions,
+ ! the values are "ndi", "n+2"
+ ! * m1 -- a real (type ki), the first mass squared
+ ! * m2 -- a real (type ki), the second mass squared
+ ! * m3 -- a real (type ki), the third mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An complex (type ki) array of rank 1 and shape 2 corresponding to
+ ! the (real part,imaginary part) of the coefficient of the 1/epsilon term
+ ! and the (real part,imaginary part) of the constant term. If par1 and/or par2
+ ! are different from zero for dim="n+2", an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function f3p3m_c(dim,m1,m2,m3,par1,par2,par3)
+ !
+ use translate
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ complex(ki), dimension(2) :: f3p3m_c
+ !
+ real(ki), dimension(4) :: res4
+ !
+ res4 = f3p3m(dim,m1,m2,m3,par1,par2,par3)
+ call to_complex(res4,f3p3m_c)
+ !
+ end function f3p3m_c
+ !
+ !****if* src/integral/three_point/function_3p3m/a3p3m
+ ! NAME
+ !
+ ! Function a3p3m
+ !
+ ! USAGE
+ !
+ ! real_dim2 = a3p3m(m1,m2,m3,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This recursive function implements the formula of ref 1
+ !
+ ! INPUTS
+ !
+ ! * m1 -- a real (type ki), the first mass squared
+ ! * m2 -- a real (type ki), the second mass squared
+ ! * m3 -- a real (type ki), the third mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! This function modify the value of the local (for the module) variables:
+ ! * deja_calcule, deja_calcule2, deja_calcule_np2 and deja_calcule22
+ ! * resultat, resultat2, resultat_np2 and resultat22
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a3p3m(m1,m2,m3,par1,par2,par3) result(res_3p3m)
+ !
+ real(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(2) :: res_3p3m
+ !
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(3) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ real(ki), dimension(4) :: temp10,temp11,temp12
+ complex(ki) :: ctemp
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ ctemp = i3_3mass(m1,m2,m3)
+ res_3p3m(1) = real(ctemp,ki)
+ res_3p3m(2) = aimag(ctemp)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a3p3m(m1,m2,m3,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2(j,1)) then
+ !
+ truc1 = resultat2(j,1,:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj) !returns real array!
+ resultat2(j,1,:) = truc1
+ deja_calcule2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ temp2 = temp2 + invs(j,par3)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3p3m(1) = b(par3)*(temp0(1) - temp1(3))/sumb + temp2(3)
+ res_3p3m(2) = b(par3)*(temp0(2) - temp1(4))/sumb + temp2(4)
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ if (deja_calcule_np2(par_plus(3))) then
+ !
+ temp11 = resultat_np2(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a3p3m_np2(m1,m2,m3,0,0,par3)
+ resultat_np2(par_plus(3),:) = temp11
+ deja_calcule_np2(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp10 = resultat_np2(1,:)
+ temp3 = invs(par2,par3)*temp10
+ temp1 = b(par2)*temp11
+ temp1 = mult_div(-2._ki/3._ki,temp1)*3._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule2(j,par_plus(3))) then
+ !
+ truc1 = resultat2(j,par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj,par3) !returns real array!
+ resultat2(j,par_plus(3),:) = truc1
+ deja_calcule2(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + invs(j,par2)*truc1
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3p3m(1) = -temp3(3) + temp1(3) + temp2(3)
+ res_3p3m(2) = -temp3(4) + temp1(4) + temp2(4)
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ temp12 = a3p3m_np2(m1,m2,m3,0,par2,par3)
+ temp10 = resultat_np2(par_plus(3),:)
+ temp11 = resultat_np2(par_plus(2),:)
+ temp3 = invs(par1,par2)*temp10 &
+ + invs(par1,par3)*temp11
+ temp1 = b(par1)*temp12
+ temp1 = mult_div(-1._ki/2._ki,temp1)*4._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par3) .and. (j /= par2) ) then
+ !
+ truc1 = resultat22(j,par_plus(2),par_plus(3),:)
+ temp2 = temp2 + invs(j,par1)*truc1
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3p3m(1) = -temp3(3) + temp1(3) + temp2(3)
+ res_3p3m(2) = -temp3(4) + temp1(4) + temp2(4)
+ !
+ end if
+ !
+ end function a3p3m
+ !
+ !****if* src/integral/three_point/function_3p3m/a3p3m_np2
+ ! NAME
+ !
+ ! Function a3p3m_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = a3p3m_np2(m1,m2,m3,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This recursive function implements the formula of ref 1
+ !
+ ! INPUTS
+ !
+ ! * m1 -- a real (type ki), the first mass squared
+ ! * m2 -- a real (type ki), the second mass squared
+ ! * m3 -- a real (type ki), the third mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! This function modify the value of the local (for the module) variables:
+ ! * deja_calcule, deja_calcule2, deja_calcule_np2 and deja_calcule22
+ ! * resultat, resultat2, resultat_np2 and resultat22
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 4
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ recursive function a3p3m_np2(m1,m2,m3,par1,par2,par3) result(res_3p3m_np2)
+ !
+ real(ki), intent (in) :: m1,m2,m3
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: res_3p3m_np2
+ !
+ integer :: j
+ integer :: nb_par_loc
+ integer, dimension(3) :: par_loc,par_plus
+ real(ki), dimension(4) :: truc1,truc2
+ real(ki), dimension(2) :: temp0
+ real(ki), dimension(4) :: temp1,temp2,temp3
+ real(ki), dimension(4) :: temp10,temp11
+ integer :: ib,b_pro,b_pro_mj
+ !
+ b_pro = packb(s)
+ !
+ par_loc = (/par1,par2,par3/)
+ par_plus = par_loc+1
+ nb_par_loc = count(mask=par_loc/=0)
+ !
+ ! cas sans parametre de feynman au numerateur
+ !
+ if (nb_par_loc == 0) then
+ !
+ if (deja_calcule(1)) then
+ !
+ temp0 = resultat(1,:)
+ !
+ else
+ !
+ temp0 = a3p3m(m1,m2,m3,0,0,0)
+ resultat(1,:) = temp0
+ deja_calcule(1) = .true.
+ !
+ end if
+ !
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2(j,1)) then
+ !
+ truc1 = resultat2(j,1,:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj) !returns real array!
+ resultat2(j,1,:) = truc1
+ deja_calcule2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3p3m_np2(1) = (- temp1(1))/sumb
+ res_3p3m_np2(2) = (- temp1(2))/sumb
+ res_3p3m_np2(3) = (temp0(1) - temp1(3))/sumb
+ res_3p3m_np2(4) = (temp0(2) - temp1(4))/sumb
+ res_3p3m_np2 = mult_div(1._ki,res_3p3m_np2)/2._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ !
+ else if (nb_par_loc == 1) then
+ !
+ if (deja_calcule_np2(1)) then
+ !
+ temp10 = resultat_np2(1,:)
+ !
+ else
+ !
+ temp10 = a3p3m_np2(m1,m2,m3,0,0,0)
+ resultat_np2(1,:) = temp10
+ deja_calcule_np2(1) = .true.
+ !
+ end if
+ !
+ temp3 = b(par3)*temp10
+ temp1 = 0._ki
+ temp2 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if (deja_calcule2(j,1)) then
+ !
+ truc1 = resultat2(j,1,:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj) !returns real array!
+ resultat2(j,1,:) = truc1
+ deja_calcule2(j,1) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + invs(j,par3)*truc1
+ !
+ if (j /= par3) then
+ !
+ if (deja_calcule2(j,par_plus(3))) then
+ !
+ truc2 = resultat2(j,par_plus(3),:)
+ !
+ else
+ !
+ truc2 = f2p_ra(s_mat_p_loc,b_pro_mj,par3) !returns real array!
+ resultat2(j,par_plus(3),:) = truc2
+ deja_calcule2(j,par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp2 = temp2 + b(j)*truc2
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ temp1 = mult_div(2._ki/3._ki,temp1)/3._ki
+ temp2 = mult_div(2._ki/3._ki,temp2)/3._ki
+ res_3p3m_np2(1) = (temp3(1) + temp1(1) - temp2(1))/sumb
+ res_3p3m_np2(2) = (temp3(2) + temp1(2) - temp2(2))/sumb
+ res_3p3m_np2(3) = (temp3(3) + temp1(3) - temp2(3))/sumb
+ res_3p3m_np2(4) = (temp3(4) + temp1(4) - temp2(4))/sumb
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ !
+ else if (nb_par_loc == 2) then
+ !
+ temp0 = a3p3m(m1,m2,m3,0,par2,par3)
+ !
+ if (deja_calcule_np2(par_plus(2))) then
+ !
+ temp10 = resultat_np2(par_plus(2),:)
+ !
+ else
+ !
+ temp10 = a3p3m_np2(m1,m2,m3,0,0,par2)
+ resultat_np2(par_plus(2),:) = temp10
+ deja_calcule_np2(par_plus(2)) = .true.
+ !
+ end if
+ !
+ if (deja_calcule_np2(par_plus(3))) then
+ !
+ temp11 = resultat_np2(par_plus(3),:)
+ !
+ else
+ !
+ temp11 = a3p3m_np2(m1,m2,m3,0,0,par3)
+ resultat_np2(par_plus(3),:) = temp11
+ deja_calcule_np2(par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp3 = b(par3)*temp10 + b(par2)*temp11
+ temp1 = 0._ki
+ !
+ ib = b_pro
+ j = 0
+ !
+ do while (ib /= 0)
+ !
+ if (modulo(ib,2) == 1) then
+ !
+ b_pro_mj = ibclr(b_pro,j)
+ !
+ if ( (j /= par2) .and. (j /= par3) ) then
+ !
+ if (deja_calcule22(j,par_plus(2),par_plus(3))) then
+ !
+ truc1 = resultat22(j,par_plus(2),par_plus(3),:)
+ !
+ else
+ !
+ truc1 = f2p_ra(s_mat_p_loc,b_pro_mj,par2,par3) !returns real array!
+ resultat22(j,par_plus(2),par_plus(3),:) = truc1
+ deja_calcule22(j,par_plus(2),par_plus(3)) = .true.
+ !
+ end if
+ !
+ temp1 = temp1 + b(j)*truc1
+ !
+ end if
+ !
+ end if
+ !
+ j = j+1
+ ib= ishft(ib,-1)
+ !
+ end do
+ !
+ res_3p3m_np2(1) = (temp3(1) - temp1(1))/sumb
+ res_3p3m_np2(2) = (temp3(2) - temp1(2))/sumb
+ res_3p3m_np2(3) = (temp0(1) + temp3(3) - temp1(3))/sumb
+ res_3p3m_np2(4) = (temp0(2) + temp3(4) - temp1(4))/sumb
+ res_3p3m_np2 = mult_div(1._ki/2._ki,res_3p3m_np2)/4._ki
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a3p3m_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of 3-point integrals in 6 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function a3p3m_np2
+ !
+ !****f* src/integral/three_point/function_3p3m/i3_3mass
+ ! NAME
+ !
+ ! Function i3_3mass
+ !
+ ! USAGE
+ !
+ ! complex = i3_3mass(m1,m2,m3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the scalar three off-shell external leg three point function
+ ! in n dimension
+ !
+ ! INPUTS
+ !
+ ! * m1 -- a real (type ki), the first mass squared
+ ! * m2 -- a real (type ki), the second mass squared
+ ! * m3 -- a real (type ki), the third mass squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function i3_3mass(m1,m2,m3)
+ !
+ real(ki), intent(in) :: m1,m2,m3
+ complex(ki) :: i3_3mass
+ !
+ complex(ki) :: cx1,cx2
+ real(ki) :: delta,sig,nsig
+ real(ki) :: x1,x2
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ delta = m1**2+m2**2+m3**2-2._ki*m1*m2-2._ki*m1*m3-2._ki*m2*m3
+ sig = sign(1._ki,m1)
+ !
+ if (delta >= 0._ki) then
+ !
+ x1 = (m1+m3-m2+sqrt(delta))/(2._ki*m1)
+ x2 = (m1+m3-m2-sqrt(delta))/(2._ki*m1)
+ !
+ ! pour avoir une fonction symetrique en fonction des trois arguments
+ ! il faut multiplier la partie imaginaire par sig
+ !
+ nsig = sig*sign(1._ki,m2-m3)
+ sig = sig*sig
+ !
+ i3_3mass = 1._ki/sqrt(delta)*( 2._ki*zdilog(1._ki-1._ki/x1,-sig) &
+ + 2._ki*zdilog(1._ki-1._ki/(1._ki-x2),-sig) + pi**2/3._ki &
+ + 1._ki/2._ki*( &
+ z_log2((1._ki-x1)/x1,sig) + z_log2((1._ki-x2)/x2,-sig) &
+ - z_log2(x2/(1._ki-x1),nsig) + z_log2(x1/(1._ki-x2),-nsig) ) )
+ !
+ else !if (delta < 0._ki) then
+ !
+ cx1 = (m1+m3-m2+(-sig*i_)*sqrt(-delta))/(2._ki*m1)
+ cx2 = (m1+m3-m2-(-sig*i_)*sqrt(-delta))/(2._ki*m1)
+ i3_3mass = (sig*i_)/sqrt(-delta)*( 2._ki*cdilog(1._ki-1._ki/cx1) &
+ + 2._ki*cdilog(1._ki-1._ki/(1._ki-cx2)) + pi**2/3._ki &
+ + 1._ki/2._ki*( &
+ (log((1._ki-cx1)/cx1))**2 + (log((1._ki-cx2)/cx2))**2 &
+ - (log(cx2/(1._ki-cx1)))**2 + (log(cx1/(1._ki-cx2)))**2 ) )
+ !
+ end if
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ i3_3mass = 0._ki
+ !
+ end if
+ !
+ end function i3_3mass
+ !
+ !****if* src/integral/three_point/function_3p3m/eval_numer_gi
+ ! NAME
+ !
+ ! Function eval_numer_gi
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gi(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the integrand that will be computed numerically
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integral variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, use the values of the local (for this module) variables
+ ! eps_glob,s13_glob,s12_glob,s23_glob,par1_glob,par2_glob,par3_glob,dim_glob
+ ! and also the global variables alpha_par,beta_par and lambda_par given
+ ! by the module parametre (src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) which is the value of the
+ ! integrand at the value u
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gi(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gi
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ z = x - eps_glob*i_*y
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ !
+ eval_numer_gi = fg(z,s13_glob,s12_glob,s23_glob,&
+ & par1_glob,par2_glob,par3_glob,&
+ & dim_glob)
+ eval_numer_gi = eval_numer_gi*jacob
+ !
+ end function eval_numer_gi
+ !
+ !****if* src/integral/three_point/function_3p3m/fg
+ ! NAME
+ !
+ ! Function fg
+ !
+ ! USAGE
+ !
+ ! complex = fg(z,s13,s12,s23,par1,par2,par3,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the structure of the integrand for the different cases
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the integral variable
+ ! * s13 -- a real (type ki), the first mass squared
+ ! * s12 -- a real (type ki), the second mass squared
+ ! * s23 -- a real (type ki), the third mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! * dim -- a character (length 3), to compute in n or n+2 dimensions,
+ ! the values are "ndi", "n+2"
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fg(z,s13,s12,s23,par1,par2,par3,dim)
+ !
+ complex(ki), intent (in) :: z
+ real(ki), intent (in) :: s13,s12,s23
+ integer, intent (in) :: par1,par2,par3
+ character (len=3) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(3) :: par
+ integer :: nb_par
+ complex(ki) :: c_var,d_var,h_var
+ !
+ par = (/par1,par2,par3/)
+ nb_par = count(mask=par/=0)
+ !
+ c_var=z*s13+(1._ki-z)*s23
+ !
+ d_var=z*(1._ki-z)*s12-z*s13-(1._ki-z)*s23
+ !
+ h_var=z*(1._ki-z)*s12
+ !
+ if (dim == "ndi") then
+ if (nb_par == 0) then
+ !
+ fg=(log(z)+log(1._ki-z)+z_log(s12,1._ki)-log(c_var))/d_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=-z*(-d_var+c_var*log(z)+c_var*log(1._ki-z)+c_var*z_log(s12,1._ki&
+ &)-c_var*log(c_var))/d_var**2
+ !
+ case(2)
+ !
+ fg=(-d_var+c_var*log(z)+c_var*log(1._ki-z)+c_var*z_log(s12,1._ki)-c&
+ &_var*log(c_var))*(-1._ki+z)/d_var**2
+ !
+ case(3)
+ !
+ fg=(-log(c_var)*d_var-c_var*log(c_var)+d_var*log(z)+d_var*log(1._k&
+ &i-z)+d_var*z_log(s12,1._ki)+c_var*log(z)+c_var*log(1._ki-z)+c_var&
+ &*z_log(s12,1._ki)-d_var)/d_var**2
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 1, 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*z**2*(d_var**2-2._ki*c_var*d_var+2._ki*c_var**2*log(z)&
+ &+2._ki*c_var**2*log(1._ki-z)+2._ki*c_var**2*z_log(s12,1._ki)-2._ki*c&
+ &_var**2*log(c_var))/d_var**3
+ !
+ case(2)
+ !
+ fg=-1._ki/2._ki*z*(d_var**2-2._ki*c_var*d_var+2._ki*c_var**2*log(z)+2&
+ &._ki*c_var**2*log(1._ki-z)+2._ki*c_var**2*z_log(s12,1._ki)-2._ki*c_v&
+ &ar**2*log(c_var))*(-1._ki+z)/d_var**3
+ !
+ case(3)
+ !
+ fg=-1._ki/2._ki*z*(-2._ki*c_var*log(c_var)*d_var-2._ki*c_var**2*log(c&
+ &_var)+2._ki*c_var*d_var*log(z)+2._ki*c_var*d_var*log(1._ki-z)+2._ki&
+ &*c_var*d_var*z_log(s12,1._ki)+2._ki*c_var**2*log(z)+2._ki*c_var**2&
+ &*log(1._ki-z)+2._ki*c_var**2*z_log(s12,1._ki)-d_var**2-2._ki*c_var*&
+ &d_var)/d_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 1, 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*(-1._ki+z)**2*(d_var**2-2._ki*c_var*d_var+2._ki*c_var**&
+ &2*log(z)+2._ki*c_var**2*log(1._ki-z)+2._ki*c_var**2*z_log(s12,1._ki&
+ &)-2._ki*c_var**2*log(c_var))/d_var**3
+ !
+ case(3)
+ !
+ fg=1._ki/2._ki*(-2._ki*c_var*log(c_var)*d_var-2._ki*c_var**2*log(c_va&
+ &r)+2._ki*c_var*d_var*log(z)+2._ki*c_var*d_var*log(1._ki-z)+2._ki*c_&
+ &var*d_var*z_log(s12,1._ki)+2._ki*c_var**2*log(z)+2._ki*c_var**2*lo&
+ &g(1._ki-z)+2._ki*c_var**2*z_log(s12,1._ki)-d_var**2-2._ki*c_var*d_v&
+ &ar)*(-1._ki+z)/d_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=1._ki/2._ki*(-2._ki*log(c_var)*d_var**2-4._ki*c_var*log(c_var)*d_v&
+ &ar-2._ki*c_var**2*log(c_var)+2._ki*d_var**2*log(z)+2._ki*d_var**2*&
+ &log(1._ki-z)+2._ki*d_var**2*z_log(s12,1._ki)+4._ki*c_var*d_var*log(&
+ &z)+4._ki*c_var*d_var*log(1._ki-z)+4._ki*c_var*d_var*z_log(s12,1._ki&
+ &)+2._ki*c_var**2*log(z)+2._ki*c_var**2*log(1._ki-z)+2._ki*c_var**2*&
+ &z_log(s12,1._ki)-3._ki*d_var**2-2._ki*c_var*d_var)/d_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par2 should be 1, 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par1)
+ !
+ case(1)
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=-1._ki/6._ki*z**3*(-2._ki*d_var**3+3._ki*c_var*d_var**2-6._ki*c_var&
+ &**2*d_var+6._ki*c_var**3*log(z)+6._ki*c_var**3*log(1._ki-z)+6._ki*c&
+ &_var**3*z_log(s12,1._ki)-6._ki*c_var**3*log(c_var))/d_var**4
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*z**2*(-2._ki*d_var**3+3._ki*c_var*d_var**2-6._ki*c_var*&
+ &*2*d_var+6._ki*c_var**3*log(z)+6._ki*c_var**3*log(1._ki-z)+6._ki*c_&
+ &var**3*z_log(s12,1._ki)-6._ki*c_var**3*log(c_var))*(-1._ki+z)/d_va&
+ &r**4
+ !
+ case(3)
+ !
+ fg=1._ki/6._ki*z**2*(-6._ki*c_var**2*log(c_var)*d_var-6._ki*c_var**3*&
+ &log(c_var)+6._ki*c_var**2*d_var*log(z)+6._ki*c_var**2*d_var*log(1&
+ &._ki-z)+6._ki*c_var**2*d_var*z_log(s12,1._ki)+6._ki*c_var**3*log(z)&
+ &+6._ki*c_var**3*log(1._ki-z)+6._ki*c_var**3*z_log(s12,1._ki)+d_var*&
+ &*3-3._ki*c_var*d_var**2-6._ki*c_var**2*d_var)/d_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 1, 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ fg=-1._ki/6._ki*z*(-1._ki+z)**2*(-2._ki*d_var**3+3._ki*c_var*d_var**2-&
+ &6._ki*c_var**2*d_var+6._ki*c_var**3*log(z)+6._ki*c_var**3*log(1._ki&
+ &-z)+6._ki*c_var**3*z_log(s12,1._ki)-6._ki*c_var**3*log(c_var))/d_v&
+ &ar**4
+ !
+ case(3)
+ !
+ fg=-1._ki/6._ki*z*(-6._ki*c_var**2*log(c_var)*d_var-6._ki*c_var**3*lo&
+ &g(c_var)+6._ki*c_var**2*d_var*log(z)+6._ki*c_var**2*d_var*log(1._k&
+ &i-z)+6._ki*c_var**2*d_var*z_log(s12,1._ki)+6._ki*c_var**3*log(z)+6&
+ &._ki*c_var**3*log(1._ki-z)+6._ki*c_var**3*z_log(s12,1._ki)+d_var**3&
+ &-3._ki*c_var*d_var**2-6._ki*c_var**2*d_var)*(-1._ki+z)/d_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=-1._ki/6._ki*z*(-6._ki*c_var*log(c_var)*d_var**2-12._ki*c_var**2*l&
+ &og(c_var)*d_var-6._ki*c_var**3*log(c_var)+6._ki*c_var*d_var**2*lo&
+ &g(z)+6._ki*c_var*d_var**2*log(1._ki-z)+6._ki*c_var*d_var**2*z_log(&
+ &s12,1._ki)+12._ki*c_var**2*d_var*log(z)+12._ki*c_var**2*d_var*log(&
+ &1._ki-z)+12._ki*c_var**2*d_var*z_log(s12,1._ki)+6._ki*c_var**3*log(&
+ &z)+6._ki*c_var**3*log(1._ki-z)+6._ki*c_var**3*z_log(s12,1._ki)-2._ki&
+ &*d_var**3-9._ki*c_var*d_var**2-6._ki*c_var**2*d_var)/d_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par2 should be 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par2)
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ fg=1._ki/6._ki*(-1._ki+z)**3*(-2._ki*d_var**3+3._ki*c_var*d_var**2-6._k&
+ &i*c_var**2*d_var+6._ki*c_var**3*log(z)+6._ki*c_var**3*log(1._ki-z)&
+ &+6._ki*c_var**3*z_log(s12,1._ki)-6._ki*c_var**3*log(c_var))/d_var*&
+ &*4
+ !
+ case(3)
+ !
+ fg=1._ki/6._ki*(-1._ki+z)**2*(-6._ki*c_var**2*log(c_var)*d_var-6._ki*c&
+ &_var**3*log(c_var)+6._ki*c_var**2*d_var*log(z)+6._ki*c_var**2*d_v&
+ &ar*log(1._ki-z)+6._ki*c_var**2*d_var*z_log(s12,1._ki)+6._ki*c_var**&
+ &3*log(z)+6._ki*c_var**3*log(1._ki-z)+6._ki*c_var**3*z_log(s12,1._ki&
+ &)+d_var**3-3._ki*c_var*d_var**2-6._ki*c_var**2*d_var)/d_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=1._ki/6._ki*(-6._ki*c_var*log(c_var)*d_var**2-12._ki*c_var**2*log(&
+ &c_var)*d_var-6._ki*c_var**3*log(c_var)+6._ki*c_var*d_var**2*log(z&
+ &)+6._ki*c_var*d_var**2*log(1._ki-z)+6._ki*c_var*d_var**2*z_log(s12&
+ &,1._ki)+12._ki*c_var**2*d_var*log(z)+12._ki*c_var**2*d_var*log(1._k&
+ &i-z)+12._ki*c_var**2*d_var*z_log(s12,1._ki)+6._ki*c_var**3*log(z)+&
+ &6._ki*c_var**3*log(1._ki-z)+6._ki*c_var**3*z_log(s12,1._ki)-2._ki*d_&
+ &var**3-9._ki*c_var*d_var**2-6._ki*c_var**2*d_var)*(-1._ki+z)/d_var&
+ &**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par2 should be 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par2)
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=1._ki/6._ki*(-6._ki*log(c_var)*d_var**3-18._ki*c_var*log(c_var)*d_&
+ &var**2-18._ki*c_var**2*log(c_var)*d_var-6._ki*c_var**3*log(c_var)&
+ &+6._ki*d_var**3*log(z)+6._ki*d_var**3*log(1._ki-z)+6._ki*d_var**3*z&
+ &_log(s12,1._ki)+18._ki*c_var*d_var**2*log(z)+18._ki*c_var*d_var**2&
+ &*log(1._ki-z)+18._ki*c_var*d_var**2*z_log(s12,1._ki)+18._ki*c_var**&
+ &2*d_var*log(z)+18._ki*c_var**2*d_var*log(1._ki-z)+18._ki*c_var**2*&
+ &d_var*z_log(s12,1._ki)+6._ki*c_var**3*log(z)+6._ki*c_var**3*log(1.&
+ &_ki-z)+6._ki*c_var**3*z_log(s12,1._ki)-11._ki*d_var**3-15._ki*c_var*&
+ &d_var**2-6._ki*c_var**2*d_var)/d_var**4
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par2 should be 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par1 should be 1, 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else if (dim == "n+2") then
+ !
+ if (nb_par == 0) then
+ !
+ fg=1._ki/2._ki*(c_var**2*log(-c_var)+d_var**2*log(z)+d_var**2*log(1&
+ &._ki-z)+d_var**2*z_log(-s12,-1._ki)-c_var**2*log(z)-c_var**2*log(&
+ &1._ki-z)-c_var**2*z_log(-s12,-1._ki)+c_var*d_var-d_var**2)/d_var*&
+ &*2
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=-1._ki/18._ki*z*(6._ki*c_var**3*log(-c_var)-6._ki*d_var**3*log(z)-&
+ &6._ki*d_var**3*log(1._ki-z)-6._ki*d_var**3*z_log(-s12,-1._ki)-6._ki*&
+ &c_var**3*log(z)-6._ki*c_var**3*log(1._ki-z)-6._ki*c_var**3*z_log(-&
+ &s12,-1._ki)+4._ki*d_var**3+6._ki*c_var**2*d_var-3._ki*c_var*d_var**&
+ &2)/d_var**3
+ !
+ case(2)
+ !
+ fg=1._ki/18._ki*(6._ki*c_var**3*log(-c_var)-6._ki*d_var**3*log(z)-6._k&
+ &i*d_var**3*log(1._ki-z)-6._ki*d_var**3*z_log(-s12,-1._ki)-6._ki*c_v&
+ &ar**3*log(z)-6._ki*c_var**3*log(1._ki-z)-6._ki*c_var**3*z_log(-s12&
+ &,-1._ki)+4._ki*d_var**3+6._ki*c_var**2*d_var-3._ki*c_var*d_var**2)*&
+ &(-1._ki+z)/d_var**3
+ !
+ case(3)
+ !
+ fg=1._ki/18._ki*(9._ki*c_var**2*log(-c_var)*d_var+6._ki*c_var**3*log(&
+ &-c_var)-9._ki*c_var**2*d_var*log(z)-9._ki*c_var**2*d_var*log(1._ki&
+ &-z)-9._ki*c_var**2*d_var*z_log(-s12,-1._ki)-6._ki*c_var**3*log(z)-&
+ &6._ki*c_var**3*log(1._ki-z)-6._ki*c_var**3*z_log(-s12,-1._ki)+3._ki*&
+ &d_var**3*log(z)+3._ki*d_var**3*log(1._ki-z)+3._ki*d_var**3*z_log(-&
+ &s12,-1._ki)-5._ki*d_var**3+6._ki*c_var**2*d_var+6._ki*c_var*d_var**&
+ &2)/d_var**3
+ !
+ case default
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'par3 should be 1, 2 or 3 but is %d0'
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (function_3p3m.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for dim = %c0'
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function fg
+ !
+end module function_3p3m
+!
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p0m_1mi.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p0m_1mi.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p0m_1mi.f90 (revision 119)
@@ -0,0 +1,622 @@
+!
+!****h* src/integral/three_point/function_3p0m_1mi
+! NAME
+!
+! Module function_3p0m_1mi
+!
+! USAGE
+!
+! use function_3p0m_1mi
+!
+! DESCRIPTION
+!
+! This module is used to compute the zero off-shell external leg one internal mass three point function
+! with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * f3p0m_1mi -- a function for the computation of the zero off-shell external leg one internal mass three
+! point function with/without Feynman parameters in n dimensions
+! * f3p0m_1mi_np2 -- a function for the computation of the zero off-shell external leg one internal mass three
+! point function with/without Feynman parameters in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90) only : tab_erreur_par,catch_exception
+! * parametre (src/module/parametre.f90) only : rat_or_tot_par,mu2_scale_par
+! * array (src/module/array.f90) only : packb
+!
+!*****
+module function_3p0m_1mi
+ !
+ use precision_golem
+ use logarithme
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre, only : rat_or_tot_par,mu2_scale_par
+ use array, only : packb
+ implicit none
+ !
+ private
+ !
+ public :: f3p0m_1mi, f3p0m_1mi_np2
+ !
+ contains
+ !
+ !
+ !****f* src/integral/three_point/function_3p0m_1mi/f3p0m_1mi
+ ! NAME
+ !
+ ! Function f3p0m_1mi
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p0m_1mi(m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the zero off-shell external leg one internal mass three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It returns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * m3_sq -- real (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f3p0m_1mi(m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p0m_1mi
+ !
+ complex(ki) :: c_temp_d2,c_temp_d2_rat
+ complex(ki) :: c_temp_d1,c_temp_d1_rat
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: lmu2
+ !
+ f3p0m_1mi = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=(1._ki+1._ki/2._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=1._ki/m3_sq
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=1._ki/2._ki*z_log(m3_sq,-1._ki)/m3_sq
+ !
+ c_temp_rat=0._ki
+ !
+ else if (par3 == 2) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=1._ki/2._ki*z_log(m3_sq,-1._ki)/m3_sq
+ !
+ c_temp_rat=0._ki
+ !
+ else if (par3 == 3) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=-1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=-1._ki/2._ki/m3_sq
+ !
+ c_temp=(1._ki-1._ki/2._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=1._ki/m3_sq
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p0m_1mi:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1 = %d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=(-1._ki/2._ki+1._ki/2._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-1._ki/2._ki/m3_sq
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=(-1._ki/2._ki+1._ki/2._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-1._ki/2._ki/m3_sq
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=-1._ki/2._ki/m3_sq
+ !
+ c_temp_rat=-1._ki/2._ki/m3_sq
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/4._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/4._ki/m3_sq
+ !
+ c_temp=(-1._ki/4._ki+1._ki/4._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-1._ki/4._ki/m3_sq
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=-1._ki/4._ki/m3_sq
+ !
+ c_temp_d1_rat=-1._ki/4._ki/m3_sq
+ !
+ c_temp=(3._ki/4._ki-1._ki/4._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=3._ki/4._ki/m3_sq
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=-1._ki/4._ki/m3_sq
+ !
+ c_temp_d1_rat=-1._ki/4._ki/m3_sq
+ !
+ c_temp=(3._ki/4._ki-1._ki/4._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=3._ki/4._ki/m3_sq
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p0m_1mi:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1 = %d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=(-5._ki/6._ki+1._ki/2._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-5._ki/6._ki/m3_sq
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/2._ki/m3_sq
+ !
+ c_temp=(-5._ki/6._ki+1._ki/2._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-5._ki/6._ki/m3_sq
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=-1._ki/6._ki/m3_sq
+ !
+ c_temp_rat=-1._ki/6._ki/m3_sq
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/6._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/6._ki/m3_sq
+ !
+ c_temp=(-5._ki/18._ki+1._ki/6._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-5._ki/18._ki/m3_sq
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/6._ki/m3_sq
+ !
+ c_temp_d1_rat=1._ki/6._ki/m3_sq
+ !
+ c_temp=(-5._ki/18._ki+1._ki/6._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=-5._ki/18._ki/m3_sq
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=-1._ki/6._ki/m3_sq
+ !
+ c_temp_d1_rat=-1._ki/6._ki/m3_sq
+ !
+ c_temp=(11._ki/18._ki-1._ki/6._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=11._ki/18._ki/m3_sq
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=-1._ki/6._ki/m3_sq
+ !
+ c_temp_d1_rat=-1._ki/6._ki/m3_sq
+ !
+ c_temp=(11._ki/18._ki-1._ki/6._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=11._ki/18._ki/m3_sq
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=-1._ki/6._ki/m3_sq
+ !
+ c_temp_rat=-1._ki/6._ki/m3_sq
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=-1._ki/6._ki/m3_sq
+ !
+ c_temp_rat=-1._ki/6._ki/m3_sq
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=-1._ki/12._ki/m3_sq
+ !
+ c_temp_d1_rat=-1._ki/12._ki/m3_sq
+ !
+ c_temp=(11._ki/36._ki-1._ki/12._ki*z_log(m3_sq,-1._ki))/m3_sq
+ !
+ c_temp_rat=11._ki/36._ki/m3_sq
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p0m_1mi:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1 = %d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ !
+ end if
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ f3p0m_1mi(1:2) = (/real(c_temp_d2,ki),aimag(c_temp_d2)/)
+ f3p0m_1mi(3:4) = (/real(c_temp_d1,ki),aimag(c_temp_d1)/)
+ f3p0m_1mi(5:6) = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ f3p0m_1mi(1:2) = (/real(c_temp_d2_rat,ki),aimag(c_temp_d2_rat)/)
+ f3p0m_1mi(3:4) = (/real(c_temp_d1_rat,ki),aimag(c_temp_d1_rat)/)
+ f3p0m_1mi(5:6) = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ f3p0m_1mi(3:4) = -f3p0m_1mi(3:4)
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p0m_1mi(5:6) = f3p0m_1mi(5:6) + f3p0m_1mi(3:4)*lmu2 + f3p0m_1mi(1:2)*lmu2**2/2._ki
+ f3p0m_1mi(3:4) = f3p0m_1mi(3:4) + f3p0m_1mi(1:2)*lmu2
+ !
+ end function f3p0m_1mi
+ !
+ !
+ !****f* src/integral/three_point/function_3p0m_1mi/f3p0m_1mi_np2
+ ! NAME
+ !
+ ! Function f3p0m_1mi_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p0m_1mi_np2(m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the zero off-shell external leg one internal mass three point function in n+2 dimensions.
+ ! with up to one Feynman parameter in the numerator.
+ ! It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * m3_sq -- real (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter = 0
+ ! * par2 -- an integer, the label of the second Feynman parameter = 0
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f3p0m_1mi_np2(m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p0m_1mi_np2
+ !
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: lmu2
+ !
+ f3p0m_1mi_np2 = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p0m_1mi_np2(1) = -1._ki/2._ki
+ f3p0m_1mi_np2(2) = 0._ki
+ !
+ c_temp=-3._ki/2._ki+1._ki/2._ki*z_log(m3_sq,-1._ki)
+ !
+ c_temp_rat=-3._ki/2._ki
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ f3p0m_1mi_np2(3:4) = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ f3p0m_1mi_np2(3:4) = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f3p0m_1mi_np2(1) = -1._ki/6._ki
+ f3p0m_1mi_np2(2) = 0._ki
+ !
+ if (par3 == 1) then !changed: 11.08.10
+ !
+ c_temp=-11._ki/18._ki+1._ki/6._ki*z_log(m3_sq,-1._ki)
+ !
+ c_temp_rat=-11._ki/18._ki
+ !
+ else if (par3 == 2) then !changed: 11.08.10
+ !
+ c_temp=-11._ki/18._ki+1._ki/6._ki*z_log(m3_sq,-1._ki)
+ !
+ c_temp_rat=-11._ki/18._ki
+ !
+ else if (par3 == 3) then
+ !
+ c_temp=-5._ki/18._ki+1._ki/6._ki*z_log(m3_sq,-1._ki)
+ !
+ c_temp_rat=-5._ki/18._ki
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p0m_1mi_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1 = %d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ f3p0m_1mi_np2(3:4) = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ f3p0m_1mi_np2(3:4) = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p0m_1mi_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of 3-point integrals in 6 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb((/par1,par2,par3/)),4/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p0m_1mi_np2(3:4) = f3p0m_1mi_np2(3:4) + f3p0m_1mi_np2(1:2)*lmu2
+ !
+ end function f3p0m_1mi_np2
+ !
+end module function_3p0m_1mi
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m_1mi.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m_1mi.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m_1mi.f90 (revision 119)
@@ -0,0 +1,653 @@
+!
+!****h* src/integral/three_point/function_3p1m_1mi
+! NAME
+!
+! Module function_3p1m_1mi
+!
+! USAGE
+!
+! use function_3p1m_1mi
+!
+! DESCRIPTION
+!
+! This module is used to compute the one off-shell external leg one internal mass three point function
+! with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * f3p1m_1mi -- a function for the computation of the one off-shell external leg one internal mass three
+! point function with/without Feynman parameters in n dimensions
+! * f3p1m_1mi_np2 -- a function for the computation of the one off-shell external leg one internal mass three
+! point function with/without Feynman parameters in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * func_he (src/integrals/three_point/mod_he.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90) only : tab_erreur_par,catch_exception
+! * constante (src/module/constante.f90) only : un,pi6
+! * parametre (src/module/parametre.f90) only : rat_or_tot_par,mu2_scale_par
+! * array (src/module/array.f90) only : packb
+!
+!*****
+module function_3p1m_1mi
+ !
+ use precision_golem
+ use logarithme
+ use dilogarithme
+ use func_he
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use constante, only : un,pi6
+ use parametre, only : rat_or_tot_par,mu2_scale_par
+ use array, only : packb
+ implicit none
+ !
+ private
+ !
+ public :: f3p1m_1mi, f3p1m_1mi_np2
+ !
+ contains
+ !
+ !
+ !****f* src/integral/three_point/function_3p1m_1mi/f3p1m_1mi
+ ! NAME
+ !
+ ! Function f3p1m_1mi
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p1m_1mi(s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the one off-shell external leg one internal mass three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ ! * m3_sq -- real (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f3p1m_1mi(s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p1m_1mi
+ !
+ complex(ki) :: c_temp_d2,c_temp_d2_rat
+ complex(ki) :: c_temp_d1,c_temp_d1_rat
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: lmu2
+ !
+ f3p1m_1mi = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ c_temp_d2=1._ki/2._ki/s13
+ !
+ c_temp_d2_rat=1._ki/2._ki/s13
+ !
+ c_temp_d1=z_log(-s13,-1._ki)/s13-1._ki/2._ki*z_log(m3_sq,-1._ki)/&
+ &s13
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=-zdilog((m3_sq+s13)/s13,-1._ki)/s13+1._ki/2._ki*z_log2(-s1&
+ &3,-1._ki)/s13-1._ki/4._ki*z_log2(m3_sq,-1._ki)/s13
+ !
+ c_temp_rat=0._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/s13
+ !
+ c_temp_d1_rat=1._ki/s13
+ !
+ c_temp=(he_c(1,s13,-m3_sq)*s13-2._ki+z_log(m3_sq,-1._ki)+2._ki*he&
+ &_c(1,s13,-m3_sq)*m3_sq)/s13
+ !
+ c_temp_rat=-2._ki/s13
+ !
+ else if (par3 == 2) then
+ !
+ c_temp_d2=1._ki/2._ki/s13
+ !
+ c_temp_d2_rat=1._ki/2._ki/s13
+ !
+ c_temp_d1=z_log(-s13,-1._ki)/s13-1._ki/s13-1._ki/2._ki*z_log(m3_s&
+ &q,-1._ki)/s13
+ !
+ c_temp_d1_rat=-1._ki/s13
+ !
+ c_temp=-1._ki/4._ki*(4._ki*zdilog((m3_sq+s13)/s13,-1._ki)-2._ki*z&
+ &_log2(-s13,-1._ki)+8._ki*z_log(-s13,-1._ki)+z_log2(m3_sq,-1._ki&
+ &)-8._ki-4._ki*z_log(m3_sq,-1._ki))/s13
+ !
+ c_temp_rat=2._ki/s13
+ !
+ else if (par3 == 3) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=he_c(1,s13,-m3_sq)
+ !
+ c_temp_rat=0._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p1m_1mi:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/s13
+ !
+ c_temp_d1_rat=1._ki/2._ki/s13
+ !
+ c_temp=1._ki/2._ki*(he_c(2,s13,-m3_sq)*s13**2-s13+2._ki*he_c(2,s1&
+ &3,-m3_sq)*m3_sq*s13-3._ki*m3_sq+2._ki*he_c(2,s13,-m3_sq)*m3_sq*&
+ &*2+z_log(m3_sq,-1._ki)*m3_sq)/s13/m3_sq
+ !
+ c_temp_rat=-1._ki/2._ki*(2._ki*s13+m3_sq)/(s13+m3_sq)/s13
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=1._ki/2._ki/s13
+ !
+ c_temp_d2_rat=1._ki/2._ki/s13
+ !
+ c_temp_d1=z_log(-s13,-1._ki)/s13-3._ki/2._ki/s13-1._ki/2._ki*z_lo&
+ &g(m3_sq,-1._ki)/s13
+ !
+ c_temp_d1_rat=-3._ki/2._ki/s13
+ !
+ c_temp=-1._ki/4._ki*(4._ki*zdilog((s13+m3_sq)/s13,-1._ki)-2._ki*z&
+ &_log2(-s13,-1._ki)+12._ki*z_log(-s13,-1._ki)-6._ki*z_log(m3_sq,&
+ &-1._ki)-14._ki+z_log2(m3_sq,-1._ki))/s13
+ !
+ c_temp_rat=7._ki/2._ki/s13
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/2._ki*(he_c(2,s13,-m3_sq)*s13-1._ki)/m3_sq
+ !
+ c_temp_rat=-1._ki/2._ki/(s13+m3_sq)
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/2._ki/s13
+ !
+ c_temp_d1_rat=1._ki/2._ki/s13
+ !
+ c_temp=1._ki/2._ki*(he_c(1,s13,-m3_sq)*s13-3._ki+z_log(m3_sq,-1._&
+ &ki)+2._ki*he_c(1,s13,-m3_sq)*m3_sq)/s13
+ !
+ c_temp_rat=-3._ki/2._ki/s13
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/2._ki*he_c(2,s13,-m3_sq)
+ !
+ c_temp_rat=1._ki/2._ki/(s13+m3_sq)
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/2._ki*he_c(1,s13,-m3_sq)
+ !
+ c_temp_rat=0._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p1m_1mi:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/3._ki/s13
+ !
+ c_temp_d1_rat=1._ki/3._ki/s13
+ !
+ c_temp=1._ki/18._ki*(6._ki*he_c(3,s13,-m3_sq)*s13**3-3._ki*s13**2&
+ &+18._ki*he_c(3,s13,-m3_sq)*m3_sq*s13**2+18._ki*he_c(3,s13,-m3_s&
+ &q)*m3_sq**2*s13-12._ki*m3_sq*s13+12._ki*he_c(3,s13,-m3_sq)*m3_s&
+ &q**3+6._ki*z_log(m3_sq,-1._ki)*m3_sq**2-22._ki*m3_sq**2)/s13/m3&
+ &_sq**2
+ !
+ c_temp_rat=-1._ki/18._ki/m3_sq*(6._ki*s13**2+25._ki*m3_sq*s13+16.&
+ &_ki*m3_sq**2)/(s13+m3_sq)/s13
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=1._ki/2._ki/s13
+ !
+ c_temp_d2_rat=1._ki/2._ki/s13
+ !
+ c_temp_d1=z_log(-s13,-1._ki)/s13-11._ki/6._ki/s13-1._ki/2._ki*z_l&
+ &og(m3_sq,-1._ki)/s13
+ !
+ c_temp_d1_rat=-11._ki/6._ki/s13
+ !
+ c_temp=1._ki/36._ki*(-36._ki*zdilog((s13+m3_sq)/s13,-1._ki)+18._k&
+ &i*z_log2(-s13,-1._ki)-132._ki*z_log(-s13,-1._ki)+66._ki*z_log(m&
+ &3_sq,-1._ki)+170._ki-9._ki*z_log2(m3_sq,-1._ki))/s13
+ !
+ c_temp_rat=85._ki/18._ki/s13
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/6._ki*(2._ki*he_c(3,s13,-m3_sq)*s13**2-s13-m3_sq)/m3&
+ &_sq**2
+ !
+ c_temp_rat=-1._ki/6._ki/m3_sq*(2._ki*s13+m3_sq)/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/6._ki/s13
+ !
+ c_temp_d1_rat=1._ki/6._ki/s13
+ !
+ c_temp=1._ki/18._ki*(3._ki*he_c(2,s13,-m3_sq)*s13**2-3._ki*s13+6.&
+ &_ki*he_c(2,s13,-m3_sq)*m3_sq*s13-11._ki*m3_sq+6._ki*he_c(2,s13,&
+ &-m3_sq)*m3_sq**2+3._ki*z_log(m3_sq,-1._ki)*m3_sq)/m3_sq/s13
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13+5._ki*m3_sq)/s13/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=1._ki/3._ki/s13
+ !
+ c_temp_d1_rat=1._ki/3._ki/s13
+ !
+ c_temp=1._ki/9._ki*(3._ki*he_c(1,s13,-m3_sq)*s13-11._ki+3._ki*z_l&
+ &og(m3_sq,-1._ki)+6._ki*he_c(1,s13,-m3_sq)*m3_sq)/s13
+ !
+ c_temp_rat=-11._ki/9._ki/s13
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/3._ki*he_c(3,s13,-m3_sq)
+ !
+ c_temp_rat=1._ki/6._ki/(s13+m3_sq)
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/3._ki*he_c(1,s13,-m3_sq)
+ !
+ c_temp_rat=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/6._ki*(2._ki*he_c(3,s13,-m3_sq)*s13-1)/m3_sq
+ !
+ c_temp_rat=-1._ki/6._ki/(s13+m3_sq)
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/6._ki*(he_c(2,s13,-m3_sq)*s13-1)/m3_sq
+ !
+ c_temp_rat=-1._ki/6._ki/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp_d2=0._ki
+ !
+ c_temp_d2_rat=0._ki
+ !
+ c_temp_d1=0._ki
+ !
+ c_temp_d1_rat=0._ki
+ !
+ c_temp=1._ki/6._ki*he_c(2,s13,-m3_sq)
+ !
+ c_temp_rat=1._ki/6._ki/(s13+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p1m_1mi:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ f3p1m_1mi(1:2) = (/real(c_temp_d2,ki),aimag(c_temp_d2)/)
+ f3p1m_1mi(3:4) = (/real(c_temp_d1,ki),aimag(c_temp_d1)/)
+ f3p1m_1mi(5:6) = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ f3p1m_1mi(1:2) = (/real(c_temp_d2_rat,ki),aimag(c_temp_d2_rat)/)
+ f3p1m_1mi(3:4) = (/real(c_temp_d1_rat,ki),aimag(c_temp_d1_rat)/)
+ f3p1m_1mi(5:6) = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ f3p1m_1mi(3:4) = -f3p1m_1mi(3:4)
+ !
+ ! On factorise r_{\gamma}
+ !
+ f3p1m_1mi(5:6) = f3p1m_1mi(5:6)+pi6*f3p1m_1mi(1:2)
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p1m_1mi(5:6) = f3p1m_1mi(5:6) + f3p1m_1mi(3:4)*lmu2 + f3p1m_1mi(1:2)*lmu2**2/2._ki
+ f3p1m_1mi(3:4) = f3p1m_1mi(3:4) + f3p1m_1mi(1:2)*lmu2
+ !
+ end function f3p1m_1mi
+ !
+ !
+ !****f* src/integral/three_point/function_3p1m_1mi/f3p1m_1mi_np2
+ ! NAME
+ !
+ ! Function f3p1m_1mi_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p1m_1mi_np2(s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the one off-shell external leg one internal mass three point function in n+2 dimensions.
+ ! with up to one Feynman parameter in the numerator.
+ ! It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ ! * m3_sq -- real (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter = 0
+ ! * par2 -- an integer, the label of the second Feynman parameter = 0
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f3p1m_1mi_np2(s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p1m_1mi_np2
+ !
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: lmu2
+ !
+ f3p1m_1mi_np2 = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p1m_1mi_np2(1) = -1._ki/2._ki
+ f3p1m_1mi_np2(2) = 0._ki
+ !
+ c_temp=1._ki/2._ki*z_log(m3_sq,-1._ki)-3._ki/2._ki+1._ki/2._ki*he&
+ &_c(1,s13,-m3_sq)*s13
+ !
+ c_temp_rat=-3._ki/2._ki
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ f3p1m_1mi_np2(3:4) = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ f3p1m_1mi_np2(3:4) = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f3p1m_1mi_np2(1) = -1._ki/6._ki
+ f3p1m_1mi_np2(2) = 0._ki
+ !
+ if (par3 == 1) then
+ !
+ c_temp=1._ki/6._ki*z_log(m3_sq,-1._ki)-1._ki/18._ki*(3._ki*s13**2&
+ &*he_c(2,s13,-m3_sq)-6._ki*he_c(1,s13,-m3_sq)*s13*m3_sq-3._ki*s1&
+ &3+11._ki*m3_sq)/m3_sq
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13+11._ki*m3_sq)/(s13+m3_sq)
+ !
+ else if (par3 == 2) then
+ !
+ c_temp=1._ki/6._ki*z_log(m3_sq,-1._ki)-11._ki/18._ki+1._ki/6._ki*&
+ &he_c(1,s13,-m3_sq)*s13
+ !
+ c_temp_rat=-11._ki/18._ki
+ !
+ else if (par3 == 3) then
+ !
+ c_temp=1._ki/6._ki*z_log(m3_sq,-1._ki)+1._ki/18._ki*(3._ki*s13**2&
+ &*he_c(2,s13,-m3_sq)-3._ki*s13-5._ki*m3_sq)/m3_sq
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13+5._ki*m3_sq)/(s13+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p1m_1mi_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Unimplemented combination of parameters.'
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ f3p1m_1mi_np2(3:4) = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ f3p1m_1mi_np2(3:4) = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p1m_1mi_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of 3-point integrals in 6 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb((/par1,par2,par3/)),4/)
+ call catch_exception(0)
+ !
+ ! to please the compiler
+ stop
+ !
+ end if
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p1m_1mi_np2(3:4) = f3p1m_1mi_np2(3:4) + f3p1m_1mi_np2(1:2)*lmu2
+ !
+ end function f3p1m_1mi_np2
+ !
+end module function_3p1m_1mi
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_he.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_he.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_he.f90 (revision 119)
@@ -0,0 +1,597 @@
+!
+!****h* src/integrals/three_point/func_he
+! NAME
+!
+! Module func_he
+!
+! USAGE
+!
+! use func_he
+!
+! DESCRIPTION
+!
+! This module contains several functions for the computation of
+! int^1_0 dy y^(n-1)/(y*z1+(1-y)*z3) where z1 and z3 are complex numbers
+!
+! OUTPUT
+!
+! This modules exports three functions:
+! * he -- a function
+! * he_gen -- a function
+! * he_c -- a function
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * parametre (src/module/parametre.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module func_he
+ !
+ use precision_golem
+ use numerical_evaluation
+ use sortie_erreur, only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ use parametre, only : coupure_3p2m,rat_or_tot_par,tolerance,alpha_par,&
+ & beta_par,lambda_par
+ use logarithme, only : z_log
+ use constante, only : i_,un,czero
+ implicit none
+ !
+ real(ki) :: a1_glob,a3_glob,eps_glob
+ complex(ki) :: a1_glob_c, a3_glob_c
+ real(ki) :: plus_grand_glob
+ integer :: expo_glob
+ !
+ private
+ !
+ interface he
+ !
+ module procedure he_rarg
+ module procedure he_carg
+ !
+ end interface
+ !
+ public :: he,he_gen,he_c
+ !
+contains
+ !
+ !****f* src/integrals/three_point/func_he/he
+ ! NAME
+ !
+ ! Function he
+ ! Note that this function is an interface for two other functions
+ ! he_rarg and he_carg
+ !
+ ! USAGE
+ !
+ ! real_dim2 = he(n,a1,a3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! - int^1_0 dy y^(n-1)/(y*z1+(1-y)*z3)
+ ! where z1 = -a1 -i lambda and z3 = -a3 - i lambda
+ ! For n=1, it is equal to: - (ln(z1)-ln(z3))/(z1-z3)
+ ! compatible with the definition of HnE
+ ! It switches to numerical evaluation if
+ ! |a1-a3|/max(|a1|,|a3|) < coupure_3p2m
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a real/complex (type ki), z1 (time -1)
+ ! * a3 -- a real/complex (type ki), z3 (time -1)
+ ! or
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a complex (type ki), z1 (time -1)
+ ! * a3 -- a complex (type ki), z3 (time -1)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variables
+ ! rat_or_tot_par, coupure_3p2m
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function he_rarg(n,a1,a3)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: a1,a3
+ real(ki), dimension(2) :: he_rarg
+ !
+ complex(ki) :: rest
+ complex(ki) :: abserr
+ complex(ki), dimension(4) :: ver
+ real(ki) :: g1,g3
+ !
+ plus_grand_glob = max(abs(a1),abs(a3))
+ g1 = a1/plus_grand_glob
+ g3 = a3/plus_grand_glob
+ ! les variables a1_glob, a3_glob, expo_glob et eps_glob sont globales
+ a1_glob = -g1
+ a3_glob = -g3
+ expo_glob = n
+ ! on choisit eps_glob de telle facon que le pole soit hors du contour
+ eps_glob = -sign(un,a1-a3)
+ !
+ ! mettre une coupure d'ordre 1 !!!!!
+ if (abs(g1-g3) > coupure_3p2m) then
+ !
+ ver = 0._ki
+ !
+ if (n >= 1) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ ver(1) = (z_log(-g1,-1._ki)-z_log(-g3,-1._ki))/(g1-g3)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ ver(1) = 0._ki
+ !
+ end if
+ !
+ end if
+ !
+ if (n >= 2) then
+ !
+ ver(2) = (-g3*ver(1)+1._ki)/(g1-g3)
+ !
+ end if
+ !
+ if (n >= 3) then
+ !
+ ver(3) = (-g3*ver(2)+1._ki/2._ki)/(g1-g3)
+ !
+ end if
+ !
+ if (n >= 4) then
+ !
+ ver(4) = (-g3*ver(3)+1._ki/3._ki )/(g1-g3)
+ !
+ end if
+ !
+ he_rarg(1) = real(ver(n),ki)/plus_grand_glob
+ he_rarg(2) = aimag(ver(n))/plus_grand_glob
+ !
+ else if ( (abs(g1-g3) <= coupure_3p2m) .and. &
+ (rat_or_tot_par%tot_selected) ) then
+ !
+ origine_info_par = "he_arg"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(a1-a3)
+ !
+ call generic_eval_numer(eval_numer_he,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function he_rarg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the error returned by adapt_gauss1 is: %z0'
+ tab_erreur_par(2)%arg_comp = abserr
+ call catch_exception(1)
+ !
+ he_rarg(1) = real(rest,ki)/plus_grand_glob
+ he_rarg(2) = aimag(rest)/plus_grand_glob
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function he_rarg (file mod_he.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the choice rat has been made, it is singular when a1=a3 %d0'
+ tab_erreur_par(2)%arg_real=abs(g1-g3)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function he_rarg
+ !
+ function he_carg(n,a1,a3)
+ !
+ integer, intent(in) :: n
+ complex(ki), intent(in) :: a1,a3
+ real(ki), dimension(2) :: he_carg
+ !
+ complex(ki) :: rest
+ complex(ki) :: abserr
+ complex(ki), dimension(4) :: ver
+ complex(ki) :: g1,g3
+ !
+ !~ plus_grand_glob = max(abs(real(a1,ki)), abs(aimag(a1)), abs(real(a3,ki)), abs(aimag(a3)) )
+ plus_grand_glob = max(abs(a1),abs(a3))
+ g1 = a1/plus_grand_glob
+ g3 = a3/plus_grand_glob
+ ! les variables a1_glob, a3_glob, expo_glob et eps_glob sont globales
+ a1_glob_c = -g1
+ a3_glob_c = -g3
+ expo_glob = n
+ ! mettre une coupure d'ordre 1 !!!!!
+ if (abs(g1-g3) > coupure_3p2m) then
+ !
+ ver(:) = czero
+ !
+ if (n >= 1) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ ver(1) = (log(-g1)-log(-g3))/(g1-g3)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ ver(1) = 0._ki
+ !
+ end if
+ !
+ end if
+ !
+ if (n >= 2) then
+ !
+ ver(2) = (-g3*ver(1)+1._ki)/(g1-g3)
+ !
+ end if
+ !
+ if (n >= 3) then
+ !
+ ver(3) = (-g3*ver(2)+1._ki/2._ki)/(g1-g3)
+ !
+ end if
+ !
+ if (n >= 4) then
+ !
+ ver(4) = (-g3*ver(3)+1._ki/3._ki )/(g1-g3)
+ !
+ end if
+ !
+ he_carg(1) = real(ver(n),ki)/plus_grand_glob
+ he_carg(2) = aimag(ver(n))/plus_grand_glob
+ !
+ else if ( (abs(g1-g3) <= coupure_3p2m) .and. &
+ (rat_or_tot_par%tot_selected) ) then
+ !
+ ! we choose eps_glob in such a way that the pole is outside the contour
+ ! we are in the case that sign(Im(g3)) = sign(Im(g1)) and sign(Re(g3)) = sign(Re(g1))
+ ! in this case, we choose eps_glob such that eps_glob*(Re(g1)-Re(g3)) < 0 if Im(g1) > 0
+ ! and eps_glob*(Re(g1)-Re(g3)) > 0 if Im(g1) < 0
+ if ( sign(un,aimag(g1)) == sign(un,aimag(g3)) ) then
+ eps_glob = -sign(un,aimag(g1))*sign(un,real(g1,ki)-real(g3,ki))
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function he_carg (file mod_he.f90) Im(g1) and Im(g3) do not the same sign'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Im(g1): %z0'
+ tab_erreur_par(2)%arg_comp = aimag(g1)
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'Im(g3): %z0'
+ tab_erreur_par(3)%arg_comp = aimag(g3)
+ call catch_exception(0)
+ end if
+ !
+ origine_info_par = "he_carg"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(a1-a3)
+ !
+ call generic_eval_numer(eval_numer_he_c,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function he_carg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the error returned by adapt_gauss1 is: %z0'
+ tab_erreur_par(2)%arg_comp = abserr
+ call catch_exception(1)
+ !
+ he_carg(1) = real(rest,ki)/plus_grand_glob
+ he_carg(2) = aimag(rest)/plus_grand_glob
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function he_carg (file mod_he.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the choice rat has been made, it is singular when a1=a3 %d0'
+ tab_erreur_par(2)%arg_real=abs(g1-g3)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end function he_carg
+ !
+ !
+ !****if* src/integrals/three_point/func_he/eval_numer_he
+ ! NAME
+ !
+ ! Function eval_numer_he
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_he(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of he
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables a1_glob, a3_glob, expo_glob and eps_glob
+ ! are global in this module whereas variables lambda_par,beta_par,
+ ! alpha_par are given by the module parametre
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_he(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_he
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = -lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ z = x + eps_glob*i_*y
+ eval_numer_he = z**(expo_glob-1)/(z*a1_glob+(1._ki-z)*a3_glob)
+ eval_numer_he = -eval_numer_he*jacob
+ !
+ end function eval_numer_he
+ !
+ !****if* src/integrals/three_point/func_he/eval_numer_he
+ ! NAME
+ !
+ ! Function eval_numer_he_c
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_he_c(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of he_carg
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables a1_glob_c, a3_glob_c, expo_glob and eps_glob
+ ! are global in this module whereas variables lambda_par,beta_par,
+ ! alpha_par are given by the module parametre
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_he_c(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_he_c
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = -lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ z = x + eps_glob*i_*y
+ eval_numer_he_c = z**(expo_glob-1)/(z*a1_glob_c+(1._ki-z)*a3_glob_c)
+ eval_numer_he_c = -eval_numer_he_c*jacob
+ !
+ end function eval_numer_he_c
+ !
+ !****f* src/integrals/three_point/func_he/he_c
+ ! NAME
+ !
+ ! Function he_c
+ !
+ ! USAGE
+ !
+ ! complex = he_c(n,a1,a3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing as he
+ ! but it returns a complex instead of a real array of rank 1 and shape 2
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a real (type ki), the real part of z1 (time -1)
+ ! * a3 -- a real (type ki), the real part of z3 (time -1)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function he_c(n,a1,a3)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: a1,a3
+ complex(ki) :: he_c
+ !
+ real(ki), dimension(2) :: temp
+ !
+ temp = he(n,a1,a3)
+ he_c = cmplx(temp(1),temp(2),ki)
+ !
+ end function he_c
+ !
+ !****f* src/integrals/three_point/func_he/he_gen
+ ! NAME
+ !
+ ! Function he_gen
+ !
+ ! USAGE
+ !
+ ! real_dim2 = he_gen(n,a1,b1,a3,b3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! int^1_0 dy y^n/(y*z1+(1-y)*z3)
+ ! where z1 = a1 + i b1 and z3 = a3 + i b3
+ ! For n=1, it is equal to: (ln(z1)-ln(z3))/(z1-z3)
+ ! It switches to numerical evaluation if
+ ! |a1-a3|/max(|a1|,|a3|) < coupure_3p2m
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a real (type ki), the real part of z1
+ ! * b1 -- a real (type ki), the imaginary part of z1
+ ! * a3 -- a real (type ki), the real part of z3
+ ! * b3 -- a real (type ki), the imaginary part of z3
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variables
+ ! rat_or_tot_par, coupure_3p2m
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function he_gen(n,a1,b1,a3,b3)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: a1,b1,a3,b3
+ real(ki), dimension(2) :: he_gen
+ !
+ complex(ki) :: rest
+ complex(ki) :: abserr
+ complex(ki), dimension(4) :: ver
+ !
+ plus_grand_glob = max(abs(a1),abs(a3))
+ ! les variables a1_gen_glob, a3_gen_glob, expo_gen_glob et eps_gen_glob
+ ! sont globales
+ a1_glob = a1/plus_grand_glob
+ a3_glob = a3/plus_grand_glob
+ expo_glob = n
+ ! on choisit eps de telle facon que le pole soit hors du contour
+ eps_glob = sign(un,b1*a3-b3*a1)
+ !
+ ! mettre une coupure d'ordre 1 !!!!!
+ if (abs(a1_glob-a3_glob) > coupure_3p2m) then
+ !
+ ver(1) = (z_log(a1,b1)-z_log(a3,b3))/(a1-a3)
+ ver(2) = (-a3*ver(1)+1._ki)/(a1-a3)
+ ver(3) = (-a3*ver(2)+1._ki/2._ki)/(a1-a3)
+ ver(4) = (-a3*ver(3)+1._ki/3._ki )/(a1-a3)
+ !
+ rest = ver(n)
+ !
+ else
+ !
+ origine_info_par = "he_gen"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(a1-a3)
+ !
+ call generic_eval_numer(eval_numer_he_gen,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function he_gen:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the error returned by adapt_gauss1 is: %z0'
+ tab_erreur_par(2)%arg_comp = abserr
+ call catch_exception(1)
+ !
+ end if
+ !
+ he_gen(1) = real(rest,ki)/plus_grand_glob
+ he_gen(2) = aimag(rest)/plus_grand_glob
+ !
+ end function he_gen
+ !
+ !****if* src/integrals/three_point/func_he/eval_numer_he_gen
+ ! NAME
+ !
+ ! Function eval_numer_he_gen
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_he_gen(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of he_gen
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables a1_glob, a3_glob, expo_glob and eps_glob
+ ! are global in this module whereas variables lambda_par,beta_par,
+ ! alpha_par are given by the module parametre
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_he_gen(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_he_gen
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = -lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ z = x + eps_glob*i_*y
+ eval_numer_he_gen = z**(expo_glob-1)/(z*a1_glob+(1._ki-z)*a3_glob)
+ eval_numer_he_gen = eval_numer_he_gen*jacob
+ !
+ end function eval_numer_he_gen
+ !
+end module func_he
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_hf.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_hf.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_hf.f90 (revision 119)
@@ -0,0 +1,748 @@
+!
+!****h* src/integrals/three_point/func_hf
+! NAME
+!
+! Module func_hf
+!
+! USAGE
+!
+! use func_hf
+!
+! DESCRIPTION
+!
+! This module contains several functions for the computation of
+! - int^1_0 dy y^n*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3) where z1 and
+! z3 are complex numbers
+!
+! OUTPUT
+!
+! This modules exports three functions:
+! * hf -- a function
+! * hf_gen -- a function
+! * hf_c -- a function
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * parametre (src/module/parametre.f90)
+! * logarithme (src/module/z_log.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module func_hf
+ use precision_golem
+ use numerical_evaluation
+ use sortie_erreur, only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ use parametre, only : coupure_3p2m,rat_or_tot_par,tolerance,alpha_par,beta_par,lambda_par,mu2_scale_par
+ use logarithme, only : z_log,z_log2
+ use constante, only : i_,un,czero
+ implicit none
+ !
+ real(ki) :: a1_glob,a3_glob,eps_glob
+ complex(ki) :: a1_glob_c, a3_glob_c
+ real(ki) :: plus_grand_glob
+ integer :: expo_glob
+ !
+ private
+ !
+ interface hf
+ !
+ module procedure hf_rarg
+ module procedure hf_carg
+ !
+ end interface
+ !
+ public :: hf,hf_gen,hf_c
+ !
+contains
+ !
+ !****f* src/integrals/three_point/func_hf/hf
+ ! NAME
+ !
+ ! Function hf
+ ! Note that this function is an interface for two other functions
+ ! hf_rarg and hf_carg
+ !
+ ! USAGE
+ !
+ ! real_dim2 = hf(n,a1,a3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! - int^1_0 dy y^(n-1)*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3)
+ ! where z1 = a1 + i b1 and z3 = a3 + i b3
+ ! For n=1, it is equal to: -(ln^2(z1)-ln^2(z3))/2/(z1-z3)
+ ! compatible with the definition of HnF
+ ! It switches to numerical evaluation if
+ ! |a1-a3|/max(|a1|,|a3|) < coupure_3p2m
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a real (type ki), the real part of z1 (time -1)
+ ! * a3 -- a real (type ki), the real part of z3 (time -1)
+ ! or
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a complex (type ki), z1 (time -1)
+ ! * a3 -- a complex (type ki), z3 (time -1)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variables
+ ! rat_or_tot_par, coupure_3p2m
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function hf_rarg(n,a1,a3)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: a1,a3
+ real(ki), dimension(2) :: hf_rarg
+ !
+ complex(ki) :: rest
+ complex(ki) :: abserr
+ complex(ki), dimension(4) :: ver,verm,vert
+ real(ki) :: g1,g3,lm
+ !
+ plus_grand_glob = max(abs(a1),abs(a3))
+ g1 = a1/plus_grand_glob
+ g3 = a3/plus_grand_glob
+ ! les variables a1_glob, a3_glob, expo_glob et eps_glob sont globales
+ a1_glob = -g1
+ a3_glob = -g3
+ expo_glob = n
+ ! on choisit eps_glob de telle facon que le pole soit hors du contour
+ eps_glob = -sign(un,a1-a3)
+ !
+ ! mettre une coupure d'ordre 1 !!!!!
+ if (rat_or_tot_par%tot_selected) then
+ !
+ if (abs(g1-g3) > coupure_3p2m) then
+ !
+ lm = log(plus_grand_glob/mu2_scale_par)
+ ver = 0._ki
+ verm = 0._ki
+ vert = 0._ki
+ !
+ if (n >= 1) then
+ !
+ ver(1) = ( z_log2(-g1,-1._ki) - z_log2(-g3,-1._ki) )/(g1-g3)/2._ki
+ verm(1) = (z_log(-g1,-1._ki)-z_log(-g3,-1._ki))/(g1-g3)
+ vert(1) = ver(1)+lm*verm(1)
+ !
+ end if
+ !
+ if (n >= 2) then
+ !
+ ver(2) = ( -g3*ver(1) - 1._ki + ( g1*z_log(-g1,-1._ki) &
+ - g3*z_log(-g3,-1._ki) )/(g1-g3) )/(g1-g3)
+ verm(2) = (-g3*verm(1)+1._ki)/(g1-g3)
+ vert(2) = ver(2)+lm*verm(2)
+ !
+ end if
+ !
+ if (n >= 3) then
+ !
+ ver(3) = ( -g3*ver(2) + 1._ki/4._ki*( -3._ki*g3**2 &
+ + 2*z_log(-g3,-1._ki)*g3**2 - g1**2 + 4._ki*g1*g3 &
+ + 2._ki*z_log(-g1,-1._ki)*g1**2 &
+ - 4*z_log(-g1,-1._ki)*g1*g3 )/(g1-g3)**2 )/(g1-g3)
+ verm(3) = (-g3*verm(2)+1._ki/2._ki)/(g1-g3)
+ vert(3) = ver(3)+lm*verm(3)
+ !
+ end if
+ !
+ if (n >= 4) then
+ !
+ ver(4) = ( -g3*ver(3) + 1._ki/18._ki*( -6._ki*z_log(-g3,-1._ki)*g3**3 &
+ + 11._ki*g3**3 - 18._ki*g3**2*g1 - 2._ki*g1**3 &
+ + 9._ki*g1**2*g3 - 18._ki*z_log(-g1,-1._ki)*g1**2*g3 &
+ + 18._ki*z_log(-g1,-1._ki)*g1*g3**2 &
+ + 6._ki*z_log(-g1,-1._ki)*g1**3 )/(g1-g3)**3 )/(g1-g3)
+ verm(4) = (-g3*verm(3)+1._ki/3._ki )/(g1-g3)
+ vert(4) = ver(4)+lm*verm(4)
+ !
+ end if
+ !
+ rest = vert(n)
+ !
+ else if ( (abs(g1-g3) <= coupure_3p2m) .and. (abs(g1-g3) >= tiny(g1)) ) then
+ !
+ origine_info_par = "hf"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(a1-a3)
+ !
+ call generic_eval_numer(eval_numer_hf,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hf_rarg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the error returned by adapt_gauss1 is: %z0'
+ tab_erreur_par(2)%arg_comp = abserr
+ call catch_exception(1)
+ !
+ else if ( (abs(g1-g3) <= tiny(g1)) ) then
+ !
+ rest = (z_log(-g1,-1._ki) + log(plus_grand_glob/mu2_scale_par))/(g1*real(n,ki))
+ !
+ end if
+ !
+ hf_rarg(1) = real(rest,ki)/plus_grand_glob
+ hf_rarg(2) = aimag(rest)/plus_grand_glob
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ if (abs(g1-g3) > coupure_3p2m) then
+ !
+ ver = 0._ki
+ vert = 0._ki
+ !
+ if (n >= 1) then
+ ver(1) = 0._ki
+ vert(1) = 0._ki
+ end if
+ !
+ if (n >= 2) then
+ !
+ ver(2) = ( -g3*ver(1) - 1._ki )/(g1-g3)
+ vert(2) = ver(2)
+ !
+ end if
+ !
+ if (n >= 3) then
+ !
+ ver(3) = ( -g3*ver(2) + 1._ki/4._ki*( -3._ki*g3**2 &
+ - g1**2 + 4._ki*g1*g3 )/(g1-g3)**2 )/(g1-g3)
+ vert(3) = ver(3)
+ !
+ end if
+ !
+ if (n >= 4) then
+ !
+ ver(4) = ( -g3*ver(3) + 1._ki/18._ki*( &
+ + 11._ki*g3**3 - 18._ki*g3**2*g1 - 2._ki*g1**3 &
+ + 9._ki*g1**2*g3 )/(g1-g3)**3 )/(g1-g3)
+ vert(4) = ver(4)
+ !
+ end if
+ !
+ rest = vert(n)
+ !
+ hf_rarg(1) = real(rest,ki)/plus_grand_glob
+ hf_rarg(2) = aimag(rest)/plus_grand_glob
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hf_rarg (file mod_hf.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the choice rat has been made, it is singular when a1=a3 %d0'
+ tab_erreur_par(2)%arg_real=abs(g1-g3)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end if
+ !
+ end function hf_rarg
+ !
+ function hf_carg(n,a1,a3)
+ !
+ integer, intent(in) :: n
+ complex(ki), intent(in) :: a1,a3
+ real(ki), dimension(2) :: hf_carg
+ !
+ complex(ki) :: rest
+ complex(ki) :: abserr
+ complex(ki), dimension(4) :: ver,verm,vert
+ complex(ki) :: g1,g3
+ real(ki) :: lm
+ !
+ !~ plus_grand_glob = max(abs(real(a1,ki)), abs(aimag(a1)), abs(real(a3,ki)), abs(aimag(a3)) )
+ plus_grand_glob = max(abs(a1), abs(a3))
+ g1 = a1/plus_grand_glob
+ g3 = a3/plus_grand_glob
+ ! les variables a1_glob, a3_glob, expo_glob et eps_glob sont globales
+ a1_glob_c = -g1
+ a3_glob_c = -g3
+ expo_glob = n
+ !
+ ! mettre une coupure d'ordre 1 !!!!!
+ if (rat_or_tot_par%tot_selected) then
+ !
+ if (abs(g1-g3) > coupure_3p2m) then
+ !
+ lm = log(plus_grand_glob/mu2_scale_par)
+ ver(:) = czero
+ verm(:) = czero
+ vert(:) = czero
+ !
+ if (n >= 1) then
+ !
+ ver(1) = ( log(-g1)**2 - log(-g3)**2 )/(g1-g3)/2._ki
+ verm(1) = (log(-g1)-log(-g3))/(g1-g3)
+ vert(1) = ver(1)+lm*verm(1)
+ !
+ end if
+ !
+ if (n >= 2) then
+ !
+ ver(2) = ( -g3*ver(1) - 1._ki + ( g1*log(-g1) &
+ - g3*log(-g3) )/(g1-g3) )/(g1-g3)
+ verm(2) = (-g3*verm(1)+1._ki)/(g1-g3)
+ vert(2) = ver(2)+lm*verm(2)
+ !
+ end if
+ !
+ if (n >= 3) then
+ !
+ ver(3) = ( -g3*ver(2) + 1._ki/4._ki*( -3._ki*g3**2 &
+ + 2*log(-g3)*g3**2 - g1**2 + 4._ki*g1*g3 &
+ + 2._ki*log(-g1)*g1**2 &
+ - 4*log(-g1)*g1*g3 )/(g1-g3)**2 )/(g1-g3)
+ verm(3) = (-g3*verm(2)+1._ki/2._ki)/(g1-g3)
+ vert(3) = ver(3)+lm*verm(3)
+ !
+ end if
+ !
+ if (n >= 4) then
+ !
+ ver(4) = ( -g3*ver(3) + 1._ki/18._ki*( -6._ki*log(-g3)*g3**3 &
+ + 11._ki*g3**3 - 18._ki*g3**2*g1 - 2._ki*g1**3 &
+ + 9._ki*g1**2*g3 - 18._ki*log(-g1)*g1**2*g3 &
+ + 18._ki*log(-g1)*g1*g3**2 &
+ + 6._ki*log(-g1)*g1**3 )/(g1-g3)**3 )/(g1-g3)
+ verm(4) = (-g3*verm(3)+1._ki/3._ki )/(g1-g3)
+ vert(4) = ver(4)+lm*verm(4)
+ !
+ end if
+ !
+ rest = vert(n)
+ !
+ else if ( (abs(g1-g3) <= coupure_3p2m) .and. (abs(g1-g3) >= tiny(real(g1,ki))) ) then
+ !
+ ! we choose eps_glob in such a way that the pole is outside the contour
+ ! we are in the case that sign(Im(g3)) = sign(Im(g1)) and sign(Re(g3)) = sign(Re(g1))
+ ! in this case, we choose eps_glob such that eps_glob*(Re(g1)-Re(g3)) < 0 if Im(g1) > 0
+ ! and eps_glob*(Re(g1)-Re(g3)) > 0 if Im(g1) < 0
+ if ( sign(un,aimag(g1)) == sign(un,aimag(g3)) ) then
+ eps_glob = -sign(un,aimag(g1))*sign(un,real(g1,ki)-real(g3,ki))
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hf_carg (file mod_hf.f90) Im(g1) and Im(g3) do not the same sign'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'Im(g1): %z0'
+ tab_erreur_par(2)%arg_comp = aimag(g1)
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'Im(g3): %z0'
+ tab_erreur_par(3)%arg_comp = aimag(g3)
+ call catch_exception(0)
+ end if
+ !
+ origine_info_par = "hf_carg"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(a1-a3)
+ !
+ call generic_eval_numer(eval_numer_hf_c,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hf:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the error returned by adapt_gauss1 is: %z0'
+ tab_erreur_par(2)%arg_comp = abserr
+ call catch_exception(1)
+ !
+ else if ( (abs(g1-g3) <= tiny(real(g1,ki))) ) then
+ !
+ rest = (log(-g1) + log(plus_grand_glob/mu2_scale_par))/(g1*real(n,ki))
+ !
+ end if
+ !
+ hf_carg(1) = real(rest,ki)/plus_grand_glob
+ hf_carg(2) = aimag(rest)/plus_grand_glob
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ if (abs(g1-g3) > coupure_3p2m) then
+ !
+ ver = 0._ki
+ vert = 0._ki
+ !
+ if (n >= 1) then
+ ver(1) = 0._ki
+ vert(1) = 0._ki
+ end if
+ !
+ if (n >= 2) then
+ !
+ ver(2) = ( -g3*ver(1) - 1._ki )/(g1-g3)
+ vert(2) = ver(2)
+ !
+ end if
+ !
+ if (n >= 3) then
+ !
+ ver(3) = ( -g3*ver(2) + 1._ki/4._ki*( -3._ki*g3**2 &
+ - g1**2 + 4._ki*g1*g3 )/(g1-g3)**2 )/(g1-g3)
+ vert(3) = ver(3)
+ !
+ end if
+ !
+ if (n >= 4) then
+ !
+ ver(4) = ( -g3*ver(3) + 1._ki/18._ki*( &
+ + 11._ki*g3**3 - 18._ki*g3**2*g1 - 2._ki*g1**3 &
+ + 9._ki*g1**2*g3 )/(g1-g3)**3 )/(g1-g3)
+ vert(4) = ver(4)
+ !
+ end if
+ !
+ rest = vert(n)
+ !
+ hf_carg(1) = real(rest,ki)/plus_grand_glob
+ hf_carg(2) = aimag(rest)/plus_grand_glob
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hf (file mod_hf.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the choice rat has been made, it is singular when a1=a3 %d0'
+ tab_erreur_par(2)%arg_real=abs(g1-g3)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end if
+ !
+ end function hf_carg
+ !
+ ! variables a1_glob, a3_glob, expo_glob and eps_glob are global in this
+ ! module whereas variables lambda_par,beta_par,alpha_par are given by the
+ ! module parametre
+ !****if* src/integrals/three_point/func_hf/eval_numer_hf
+ ! NAME
+ !
+ ! Function eval_numer_hf
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_hf(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of hf_rarg
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables a1_glob, a3_glob, expo_glob and eps_glob
+ ! are global in this module whereas variables lambda_par,beta_par,
+ ! alpha_par are given by the module parametre
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_hf(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_hf
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = -lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ z = x + eps_glob*i_*y
+ eval_numer_hf = z**(expo_glob-1)*( log(z*a1_glob+(1._ki-z)*a3_glob) &
+ + log(plus_grand_glob/mu2_scale_par) )/(z*a1_glob+(1._ki-z)*a3_glob)
+ eval_numer_hf = -eval_numer_hf*jacob
+ !
+ end function eval_numer_hf
+ !
+ ! variables a1_glob, a3_glob, expo_glob and eps_glob are global in this
+ ! module whereas variables lambda_par,beta_par,alpha_par are given by the
+ ! module parametre
+ !****if* src/integrals/three_point/func_hf/eval_numer_hf
+ ! NAME
+ !
+ ! Function eval_numer_hf_c
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_hf_c(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of hf_carg
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables a1_glob_c, a3_glob_c, expo_glob and eps_glob
+ ! are global in this module whereas variables lambda_par,beta_par,
+ ! alpha_par are given by the module parametre
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_hf_c(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_hf_c
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = -lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ z = x + eps_glob*i_*y
+ eval_numer_hf_c = z**(expo_glob-1)*( log(z*a1_glob_c+(1._ki-z)*a3_glob_c) &
+ + log(plus_grand_glob/mu2_scale_par) )/(z*a1_glob_c+(1._ki-z)*a3_glob_c)
+ eval_numer_hf_c = -eval_numer_hf_c*jacob
+ !
+ end function eval_numer_hf_c
+ !
+ ! This function computes the same thing as he
+ ! but it returns a complex instead of two dim array
+ !****f* src/integrals/three_point/func_hf/hf_c
+ ! NAME
+ !
+ ! Function hf_c
+ !
+ ! USAGE
+ !
+ ! complex = hf_c(n,a1,a3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the same thing as hf
+ ! but it returns a complex instead of a real array of rank 1 and shape 2
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a real (type ki), the real part of z1 (time -1)
+ ! * a3 -- a real (type ki), the real part of z3 (time -1)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function hf_c(n,a1,a3)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: a1,a3
+ complex(ki) :: hf_c
+ !
+ real(ki), dimension(2) :: temp
+ !
+ temp = hf(n,a1,a3)
+ hf_c = cmplx(temp(1),temp(2),ki)
+ !
+ end function hf_c
+ !
+ !****f* src/integrals/three_point/func_hf/hf_gen
+ ! NAME
+ !
+ ! Function hf_gen
+ !
+ ! USAGE
+ !
+ ! real_dim2 = hf_gen(n,a1,b1,a3,b3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! int^1_0 dy y^n*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3)
+ ! where z1 = a1 + i b1 and z3 = a3 + i b3
+ ! For n=1, it is equal to: (ln^2(z1)-ln^2(z3))/(z1-z3)
+ ! It switches to numerical evaluation if
+ ! |a1-a3|/max(|a1|,|a3|) < coupure_3p2m
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of y in the integrand
+ ! * a1 -- a real (type ki), the real part of z1
+ ! * b1 -- a real (type ki), the imaginary part of z1
+ ! * a3 -- a real (type ki), the real part of z3
+ ! * b3 -- a real (type ki), the imaginary part of z3
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variables
+ ! rat_or_tot_par, coupure_3p2m
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function hf_gen(n,a1,b1,a3,b3)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: a1,b1,a3,b3
+ real(ki), dimension(2) :: hf_gen
+ !
+ complex(ki) :: rest
+ complex(ki) :: abserr
+ complex(ki), dimension(4) :: ver,verm
+ real(ki) :: lm
+ !
+ plus_grand_glob = max(abs(a1),abs(a3))
+ ! les variables a1_glob, a3_glob, expo_glob et eps_glob
+ ! sont globales
+ a1_glob = a1/plus_grand_glob
+ a3_glob = a3/plus_grand_glob
+ expo_glob = n
+ ! on choisit eps de telle facon que le pole soit hors du contour
+ eps_glob = sign(un,b1*a3-b3*a1)
+ !
+ ! mettre une coupure d'ordre 1 !!!!!
+ if (abs(a1_glob-a3_glob) > coupure_3p2m) then
+ !
+ lm = log(plus_grand_glob/mu2_scale_par)
+ !
+ ver(1) = (z_log2(a1,b1)-z_log2(a3,b3))/(a1-a3)/2._ki
+ ver(2) = (-a3*ver(1)-1._ki+(a1*z_log(a1,b1)-a3*z_log(a3,b3))/(a1-a3))&
+ /(a1-a3)
+ ver(3) = ( -a3*ver(2)+1._ki/4._ki*(-3._ki*a3**2+2._ki*z_log(a3,b3)*a3**2 &
+ -a1**2+4._ki*a1*a3+2._ki*z_log(a1,b1)*a1**2-4._ki*z_log(a1,b1) &
+ *a1*a3)/(a1-a3)**2 )/(a1-a3)
+ ver(4) = ( -a3*ver(3)+1._ki/18._ki*(-6._ki*z_log(a3,b3)*a3**3 &
+ +11._ki*a3**3-18._ki*a3**2*a1-18._ki*z_log(a1,b1)*a1**2*a3 &
+ +18._ki*z_log(a1,b1)*a1*a3**2-2._ki*a1**3+9._ki*a1**2*a3 &
+ +6._ki*z_log(a1,b1)*a1**3)/(a1-a3)**3 )/(a1-a3)
+ !
+ verm(1) = (z_log(a1,b1)-z_log(a3,b3))/(a1-a3)
+ verm(2) = (-a3*ver(1)+1._ki)/(a1-a3)
+ verm(3) = (-a3*ver(2)+1._ki/2._ki)/(a1-a3)
+ verm(4) = (-a3*ver(3)+1._ki/3._ki )/(a1-a3)
+ !
+ rest = ver(n)+lm*verm(n)
+ !
+ else if ( (abs(a1_glob-a3_glob) <= coupure_3p2m) .and. &
+ (abs(a1_glob-a3_glob) >= tiny(a1_glob)) ) then
+ !
+ origine_info_par = "hf_gen"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(a1-a3)
+ !
+ call generic_eval_numer(eval_numer_hf_gen,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function hf_gen:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the error returned by adapt_gauss1 is: %z0'
+ tab_erreur_par(2)%arg_comp = abserr
+ call catch_exception(1)
+ !
+ else if ( (abs(a1_glob-a3_glob) <= tiny(a1_glob)) ) then
+ !
+ rest = (z_log(-a1_glob,-1._ki) + log(plus_grand_glob/mu2_scale_par))/a1_glob/real(n,ki)
+ !
+ end if
+ !
+ hf_gen(1) = real(rest,ki)/plus_grand_glob
+ hf_gen(2) = aimag(rest)/plus_grand_glob
+ !
+ end function hf_gen
+ !
+ !****if* src/integrals/three_point/func_hf/eval_numer_hf_gen
+ ! NAME
+ !
+ ! Function eval_numer_hf_gen
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_hf_gen(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of hf_gen
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables a1_glob, a3_glob, expo_glob and eps_glob
+ ! are global in this module whereas variables lambda_par,beta_par,
+ ! alpha_par are given by the module parametre
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_hf_gen(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_hf_gen
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = -lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ z = x + eps_glob*i_*y
+ eval_numer_hf_gen = z**(expo_glob-1)*( log(z*a1_glob+(1._ki-z)*a3_glob) &
+ + log(plus_grand_glob/mu2_scale_par) )&
+ /(z*a1_glob+(1._ki-z)*a3_glob)
+ eval_numer_hf_gen = eval_numer_hf_gen*jacob
+ !
+ end function eval_numer_hf_gen
+ !
+end module func_hf
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m_2mi.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m_2mi.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p1m_2mi.f90 (revision 119)
@@ -0,0 +1,365 @@
+!
+!****h* src/integral/three_point/function_3p1m_2mi
+! NAME
+!
+! Module function_3p1m_2mi
+!
+! USAGE
+!
+! use function_3p1m_2mi
+!
+! DESCRIPTION
+!
+! This module is used to compute the one off-shell external leg two internal mass three point function
+! with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * f3p1m_2mi -- a function for the computation of the one off-shell external leg two internal mass three
+! point function with/without Feynman parameters in n dimensions
+! * f3p1m_2mi_np2 -- a function for the computation of the one off-shell external leg two internal mass three
+! point function with/without Feynman parameters in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * func_gn (src/integrals/three_point/mod_gn.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90) only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+! * constante (src/module/constante.f90) only : un,i_,pi6
+! * parametre (src/module/parametre.f90) only : rat_or_tot_par,mu2_scale_par
+! * array (src/module/array.f90) only : packb
+!
+!*****
+module function_3p1m_2mi
+ !
+ use precision_golem
+ use func_gn
+ use sortie_erreur, only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ use constante, only : un,i_,pi6
+ use parametre, only : rat_or_tot_par,mu2_scale_par
+ use array, only : packb
+ implicit none
+ !
+ private
+ !
+ public :: f3p1m_2mi, f3p1m_2mi_np2
+ !
+ contains
+ !
+ !
+ !****f* src/integral/three_point/function_3p1m_2mi/f3p1m_2mi
+ ! NAME
+ !
+ ! Function f3p1m_2mi
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p1m_2mi(s13,m1_sq,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the one off-shell external leg two internal mass three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ ! * m1_sq -- real (type ki), the value of the first internal mass squared
+ ! * m3_sq -- real (type ki), the value of the second internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f3p1m_2mi(s13,m1_sq,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s13,m1_sq,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p1m_2mi
+ !
+ real(ki) :: a,b,c
+ real(ki) :: lmu2
+ real(ki) :: true_thresh,false_thresh
+ logical :: dist
+ !
+ f3p1m_2mi = 0._ki
+ !
+ a = s13+m1_sq+m3_sq
+ b = ( m1_sq-m3_sq-(s13+m1_sq+m3_sq) )
+ c = m3_sq
+ ! one tests if we are closer from the real threshold or from the false threshold
+ true_thresh = (sqrt(m1_sq)+sqrt(m3_sq))**2
+ false_thresh = (sqrt(m1_sq)-sqrt(m3_sq))**2
+ dist = abs(a-true_thresh) <= abs(a-false_thresh)
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p1m_2mi(3:4) = -0.5_ki*ge(1,a,b,c,dist)
+ f3p1m_2mi(5:6) = -0.5_ki*gf(1,a,b,c,dist)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(2,a,b,c,dist)
+ !
+ else if (par3 == 2) then
+ !
+ f3p1m_2mi(3:4) = -0.5_ki*ge(1,a,b,c,dist)
+ f3p1m_2mi(5:6) = -0.5_ki*gf(1,a,b,c,dist)+ge(1,a,b,c,dist)
+ !
+ else if (par3 == 3) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(2,a,-b-2*a,a+b+c,dist)
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(3,a,b,c,dist)/2._ki
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p1m_2mi(3:4) = -0.5_ki*ge(1,a,b,c,dist)
+ f3p1m_2mi(5:6) = -0.5_ki*gf(1,a,b,c,dist)+3._ki/2._ki*ge(1,a,b,c,dist)
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(3,a,-b-2*a,a+b+c,dist)/2._ki
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(2,a,b,c,dist)/2._ki
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -(ge(2,a,b,c,dist)-ge(3,a,b,c,dist))/2._ki
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(2,a,-b-2*a,a+b+c,dist)/2._ki
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(4,a,b,c,dist)/3._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p1m_2mi(3:4) = -0.5_ki*ge(1,a,b,c,dist)
+ f3p1m_2mi(5:6) = -0.5_ki*gf(1,a,b,c,dist)+11._ki/6._ki*ge(1,a,b,c,dist)
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(4,a,-b-2*a,a+b+c,dist)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(3,a,b,c,dist)/6._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(2,a,b,c,dist)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -(ge(3,a,b,c,dist)-ge(4,a,b,c,dist))/3._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(2,a,-b-2*a,a+b+c,dist)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -(ge(3,a,-b-2*a,a+b+c,dist)-ge(4,a,-b-2*a,a+b+c,dist))/3._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -ge(3,a,-b-2*a,a+b+c,dist)/6._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ f3p1m_2mi(3:4) = 0._ki
+ f3p1m_2mi(5:6) = -(ge(2,a,b,c,dist)-ge(3,a,b,c,dist))/6._ki
+ !
+ end if
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ f3p1m_2mi(3:4) = -f3p1m_2mi(3:4)
+ !
+ ! On factorise r_{\gamma}
+ !
+ f3p1m_2mi(5:6) = f3p1m_2mi(5:6)+pi6*f3p1m_2mi(1:2)
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p1m_2mi(5:6) = f3p1m_2mi(5:6) + f3p1m_2mi(3:4)*lmu2 + f3p1m_2mi(1:2)*lmu2**2/2._ki
+ f3p1m_2mi(3:4) = f3p1m_2mi(3:4) + f3p1m_2mi(1:2)*lmu2
+ !
+ end function f3p1m_2mi
+ !
+ !****f* src/integral/three_point/function_3p1m_2mi/f3p1m_2mi_np2
+ ! NAME
+ !
+ ! Function f3p1m_2mi_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p1m_2mi_np2(s13,m1_sq,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the one off-shell external leg two internal mass three point function in n+2 dimensions.
+ ! with up to one Feynman parameter in the numerator.
+ ! It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ ! * m1_sq -- real (type ki), the value of the first internal mass squared
+ ! * m3_sq -- real (type ki), the value of the second internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter = 0
+ ! * par2 -- an integer, the label of the second Feynman parameter = 0
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function f3p1m_2mi_np2(s13,m1_sq,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s13,m1_sq,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p1m_2mi_np2
+ !
+ real(ki) :: a,b,c
+ real(ki) :: lmu2
+ !
+ f3p1m_2mi_np2 = 0._ki
+ !
+ a = s13+m1_sq+m3_sq
+ b = ( m1_sq-m3_sq-(s13+m1_sq+m3_sq) )
+ c = m3_sq
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ f3p1m_2mi_np2(1) = -1._ki/2._ki
+ f3p1m_2mi_np2(2) = 0._ki
+ f3p1m_2mi_np2(3:4) = gl(1,a,b,c)/2._ki
+ f3p1m_2mi_np2(3) = f3p1m_2mi_np2(3)-2._ki/4._ki
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f3p1m_2mi_np2(1) = -1._ki/6._ki
+ f3p1m_2mi_np2(2) = 0._ki
+ !
+ if (par3 == 1) then
+ !
+ f3p1m_2mi_np2(3:4) = gl(2,a,b,c)/3._ki
+ f3p1m_2mi_np2(3) = f3p1m_2mi_np2(3)-1._ki/9._ki
+ !
+ else if (par3 == 2) then
+ !
+ f3p1m_2mi_np2(3:4) = gl(1,a,b,c)/6._ki
+ f3p1m_2mi_np2(3) = f3p1m_2mi_np2(3)-5._ki/18._ki
+ !
+ else if (par3 == 3) then
+ !
+ f3p1m_2mi_np2(3:4) = gl(2,a,-b-2*a,a+b+c)/3._ki
+ f3p1m_2mi_np2(3) = f3p1m_2mi_np2(3)-1._ki/9._ki
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p1m_2mi_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'no need of 3-point integrals in 6 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb((/par1,par2,par3/)),4/)
+ call catch_exception(0)
+ !
+ end if
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p1m_2mi_np2(3:4) = f3p1m_2mi_np2(3:4) + f3p1m_2mi_np2(1:2)*lmu2
+ !
+ end function f3p1m_2mi_np2
+ !
+end module function_3p1m_2mi
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p2m_1mi.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p2m_1mi.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/function_3p2m_1mi.f90 (revision 119)
@@ -0,0 +1,2871 @@
+!
+!****h* src/integral/three_point/function_3p2m_1mi
+! NAME
+!
+! Module function_3p2m_1mi
+!
+! USAGE
+!
+! use function_3p2m_1mi
+!
+! DESCRIPTION
+!
+! This module is used to compute the two off-shell external leg one internal mass three point function
+! with/without Feynman parameters in n, n+2 dimensions
+!
+! OUTPUT
+!
+! This module exports two functions:
+! * f3p2m_1mi -- a function for the computation of the two off-shell external leg one internal mass three
+! point function with/without Feynman parameters in n dimensions
+! * f3p2m_1mi_np2 -- a function for the computation of the two off-shell external leg one internal mass three
+! point function with/without Feynman parameters in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * func_he (src/integrals/three_point/mod_he.f90)
+! * func_hf (src/integrals/three_point/mod_hf.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90) only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+! * constante (src/module/constante.f90) only : i_,un
+! * parametre (src/module/parametre.f90) only : coupure_3p2m_1mi,rat_or_tot_par,tolerance,alpha_par,beta_par,lambda_par,mu2_scale_par
+! * array (src/module/array.f90) only : packb
+! * numerical_evaluation (src/numerical/mod_numeric.f90) only : generic_eval_numer
+!
+!*****
+module function_3p2m_1mi
+ !
+ use precision_golem
+ use logarithme
+ use dilogarithme
+ use func_he
+ use func_hf
+ use sortie_erreur, only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ use constante, only : i_, un, czero
+ use parametre, only : coupure_3p2m_1mi,rat_or_tot_par,tolerance,alpha_par,beta_par,lambda_par,mu2_scale_par
+ use array, only : packb
+ use numerical_evaluation, only : generic_eval_numer
+ implicit none
+ !
+ private
+ complex(ki) :: s13_glob,m3_sq_glob,s23_glob
+ real(ki) :: eps_glob
+ integer :: par1_glob,par2_glob,par3_glob
+ character (len=3) :: dim_glob
+ integer, dimension(3) :: par
+ !
+ interface f3p2m_1mi
+ module procedure f3p2m_1mi_r
+ module procedure f3p2m_1mi_c
+ end interface
+ !
+ interface f3p2m_1mi_np2
+ module procedure f3p2m_1mi_np2_r
+ module procedure f3p2m_1mi_np2_c
+ end interface
+ !
+!
+ public :: f3p2m_1mi, f3p2m_1mi_np2
+ !
+ contains
+ !
+ !****f* src/integral/three_point/function_3p2m_1mi/f3p2m_1mi
+ ! NAME
+ !
+ ! Function f3p2m_1mi
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f3p2m_1mi(s23,s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the two off-shell external leg one internal mass three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ !
+ function f3p2m_1mi_r(s23,s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p2m_1mi_r
+ !
+ real(ki) :: lamb
+ real(ki) :: plus_grand
+ complex(ki) :: resto,abserro
+ real(ki) :: as23,as13,am3_sq
+ !
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = max(abs(s13),abs(s23),abs(m3_sq))
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ as13 = s13/plus_grand
+ as23 = s23/plus_grand
+ am3_sq = m3_sq/plus_grand
+ !
+ lamb = as13-as23
+ !
+ f3p2m_1mi_r(:) = 0._ki
+ !
+ ! the correction for plus_grand are taken into account in he and hf
+ !
+ f3p2m_1mi_r = a3p2m_1mi_div_r(s23,s13,m3_sq,par1,par2,par3)
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_3p2m_1mi) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p2m_1mi (in file function_3p2m_1mi.f90):&
+ &the flag rat to compute the rational part is on &
+ &and the program reaches a region of phase space in &
+ &which det(G) = 0 . Be careful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_3p2m_1mi'
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if (abs(lamb) > coupure_3p2m_1mi) then
+ !
+ ! analytic computation
+ !
+ f3p2m_1mi_r(5:6) = f3p2m_1mi_r(5:6) + a3p2m_1mi_r(as23,as13,am3_sq,par1,par2,par3)&
+ &/plus_grand
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = "ndi"
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ s23_glob = cmplx(as23,0._ki,ki)
+ s13_glob = cmplx(as13,0._ki,ki)
+ m3_sq_glob = cmplx(am3_sq,0._ki,ki)
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s23+(1-z)*s23 = s23+x*(s23-s23)-i*eps*y*(s23-s23)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s23-s23) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = sign(1._ki,as23-as13)
+ !
+ origine_info_par = "f3p2m_1mi, dimension "
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = 1._ki
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ resto = resto/plus_grand
+ !
+ f3p2m_1mi_r(5) = f3p2m_1mi_r(5) + real(resto,ki)
+ f3p2m_1mi_r(6) = f3p2m_1mi_r(6) + aimag(resto)
+ !
+ end if
+ !
+ ! la dependance en mu2 se fait a travers les fonctions he,hf
+ ! inutile de l'ajouter
+ !
+ end function f3p2m_1mi_r
+ !
+ function f3p2m_1mi_c(s23,s13,m3_sq,par1,par2,par3)
+ !
+ complex(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: f3p2m_1mi_c
+ !
+ complex(ki) :: lamb
+ real(ki) :: plus_grand
+ complex(ki) :: as23,as13,am3_sq
+ complex(ki) :: resto,abserro
+ !
+ !
+ ! We divide by the maximal real or imaginary value to get the real and
+ ! imaginary entries between -1 and 1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = max ( maxval ( abs( real( (/ s13, s23, m3_sq /), ki ) ) ), &
+ & maxval ( abs( aimag( (/ s13, s23, m3_sq /) ) ) ) )
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ as13 = s13/plus_grand
+ as23 = s23/plus_grand
+ am3_sq = m3_sq/plus_grand
+ !
+ lamb = as13-as23
+ !
+ f3p2m_1mi_c(:) = 0._ki
+ !
+ ! the correction for plus_grand are taken into account in he and hf
+ !
+ f3p2m_1mi_c = a3p2m_1mi_div_c(s23,s13,m3_sq,par1,par2,par3)
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_3p2m_1mi) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = &
+ &'In function f3p2m_1mi (in file function_3p2m_1mi.f90):&
+ &the flag rat to compute the rational part is on &
+ &and the program reaches a region of phase space in &
+ &which det(G) = 0 . Be careful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_3p2m_1mi'
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if (abs(lamb) > coupure_3p2m_1mi) then
+ !
+ ! analytic computation
+ !
+ f3p2m_1mi_c(5:6) = f3p2m_1mi_c(5:6) + a3p2m_1mi_c(as23,as13,am3_sq,par1,par2,par3)&
+ &/plus_grand
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = "ndi"
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ s23_glob = as23
+ s13_glob = as13
+ m3_sq_glob = am3_sq
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s13+(1-z)*s23 = s23+x*(s13-s23)-i*eps*y*(s13-s23)
+ ! now s13 and s23 are complex BUT HAVE THE SAME IMAGINARY PART
+ ! i.e. s13-s23 is real.
+ ! We want the the argument of the log never cross the cut, that is to say that the
+ ! sign(Im(arg_log)) is constant along the contour
+ ! => eps = -sign(Im(s23))*sign(s13-s23)
+ ! Note that with this prescription we avoid the pole when z*s13+(1-z)*s23=0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = -sign(1._ki,aimag(s23_glob))*sign(1._ki,real(s13_glob-s23_glob,ki))
+ !
+ origine_info_par = "f3p2m_1mi_c, dimension "
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = 1._ki
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ resto = resto/plus_grand
+ !
+ f3p2m_1mi_c(5) = f3p2m_1mi_c(5) + real(resto,ki)
+ f3p2m_1mi_c(6) = f3p2m_1mi_c(6) + aimag(resto)
+ !
+ end if
+ !
+ ! la dependance en mu2 se fait a travers les fonctions he,hf
+ ! inutile de l'ajouter
+ !
+ !
+ end function f3p2m_1mi_c
+ !
+ !****f* src/integral/three_point/function_3p2m_1mi/f3p2m_1mi_np2
+ ! NAME
+ !
+ ! Function f3p2m_1mi_np2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f3p2m_1mi_np2(s23,s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the two off-shell external leg one internal mass three point function in n+2 dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 4 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ !
+ function f3p2m_1mi_np2_r(s23,s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p2m_1mi_np2_r
+ !
+ integer :: nb_par
+ real(ki) :: lamb
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: resto,abserro
+ real(ki) :: as23,as13,am3_sq
+ real(ki) :: lmu2
+ !
+ par = (/par1,par2,par3/)
+ !
+ !
+ ! on redefinit la matrice S de telle facon a ce que ces elements
+ ! soient entre -1 et 1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = max(abs(s13),abs(s23),abs(m3_sq))
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ as13 = s13/plus_grand
+ as23 = s23/plus_grand
+ am3_sq = m3_sq/plus_grand
+ !
+ lamb = as13-as23
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ !
+ norma = -1._ki/2._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = -1._ki/6._ki
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ !
+ f3p2m_1mi_np2_r(:) = 0._ki
+ !
+ f3p2m_1mi_np2_r(1:2) = (/ norma, 0._ki /)
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_3p2m_1mi) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p2m_1mi (in file function_3p2m_1mi.f90):&
+ &the flag rat to compute the rational part is on &
+ &and the program reaches a region of phase space in &
+ &which det(G) = 0 . Be careful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_3p2m_1mi'
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if (abs(lamb) > coupure_3p2m_1mi) then
+ !
+ ! analytic computation
+ !
+ f3p2m_1mi_np2_r(3:4) = a3p2m_1mi_np2_r(as23,as13,am3_sq,par1,par2,par3)
+ f3p2m_1mi_np2_r(3) = f3p2m_1mi_np2_r(3)-log(plus_grand)*norma
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = "n+2"
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ s23_glob = cmplx(as23,0._ki,ki)
+ s13_glob = cmplx(as13,0._ki,ki)
+ m3_sq_glob = cmplx(am3_sq,0._ki,ki)
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s23+(1-z)*s23 = s23+x*(s23-s23)-i*eps*y*(s23-s23)
+ ! on veut la partie imaginaire du meme signe que i*lambda
+ ! => eps*(s23-s23) < 0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = sign(1._ki,as23-as13)
+ !
+ origine_info_par = "f3p2m_1mi_np2, dimension "
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = 1._ki
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ resto = resto-log(plus_grand)*norma
+ !
+ f3p2m_1mi_np2_r(3) = real(resto,ki)
+ f3p2m_1mi_np2_r(4) = aimag(resto)
+ !
+ end if
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p2m_1mi_np2_r(3:4) = f3p2m_1mi_np2_r(3:4) + f3p2m_1mi_np2_r(1:2)*lmu2
+ !
+ end function f3p2m_1mi_np2_r
+ !
+ !
+ function f3p2m_1mi_np2_c(s23,s13,m3_sq,par1,par2,par3)
+ !
+ complex(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(4) :: f3p2m_1mi_np2_c
+ !
+ integer :: nb_par
+ complex(ki) :: lamb
+ complex(ki) :: resto, abserro
+ real(ki) :: plus_grand
+ real(ki) :: norma
+ complex(ki) :: as23,as13,am3_sq
+ real(ki) :: lmu2
+ !
+ par = (/par1,par2,par3/)
+ !
+ !
+ ! We divide by the maximal real or imaginary value to get the real and
+ ! imaginary entries between -1 and 1
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ plus_grand = max ( maxval ( abs( real( (/ s13, s23, m3_sq /), ki ) ) ), &
+ & maxval ( abs( aimag( (/ s13, s23, m3_sq /) ) ) ) )
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ plus_grand = 1._ki
+ !
+ end if
+ !
+ as13 = s13/plus_grand
+ as23 = s23/plus_grand
+ am3_sq = m3_sq/plus_grand
+ !
+ lamb = as13-as23
+ !
+ nb_par = count(mask=par/=0)
+ !
+ if (nb_par == 0) then
+ !
+ norma = -1._ki/2._ki
+ !
+ else if (nb_par == 1) then
+ !
+ norma = -1._ki/6._ki
+ !
+ else
+ !
+ norma = 0._ki
+ !
+ end if
+ !
+ !
+ f3p2m_1mi_np2_c(:) = 0._ki
+ !
+ f3p2m_1mi_np2_c(1:2) = (/ norma, 0._ki /)
+ !
+ if ( (rat_or_tot_par%rat_selected) .and. (abs(lamb) <= coupure_3p2m_1mi) ) then
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function f3p2m_1mi (in file function_3p2m_1mi.f90):&
+ &the flag rat to compute the rational part is on &
+ &and the program reaches a region of phase space in &
+ &which det(G) = 0 . Be careful that the rational part &
+ &is not well behaved in this region&
+ &Nevertheless if the user wants to go on, he has to &
+ &reduce the value of the parameter coupure_3p2m_1mi'
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if (abs(lamb) > coupure_3p2m_1mi) then
+ !
+ ! analytic computation
+ !
+ f3p2m_1mi_np2_c(3:4) = a3p2m_1mi_np2_c(as23,as13,am3_sq,par1,par2,par3)
+ f3p2m_1mi_np2_c(3) = f3p2m_1mi_np2_c(3)-log(plus_grand)*norma
+ !
+ else
+ !
+ ! numerical computation
+ !
+ dim_glob = "n+2"
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ s23_glob = as23
+ s13_glob = as13
+ m3_sq_glob = am3_sq
+ !
+ resto = 0._ki
+ abserro = 0._ki
+ !
+ ! on pose z = x - i*eps*y (avec x et y > 0)
+ ! z*s13+(1-z)*s23 = s23+x*(s13-s23)-i*eps*y*(s13-s23)
+ ! now s13 and s23 are complex BUT HAVE THE SAME IMAGINARY PART
+ ! i.e. s13-s23 is real.
+ ! We want the the argument of the log never cross the cut, that is to say that the
+ ! sign(Im(arg_log)) is constant along the contour
+ ! => eps = -sign(Im(s23))*sign(s13-s23)
+ ! Note that with this prescription we avoid the pole when z*s13+(1-z)*s23=0
+ !
+ ! faire attention que suivant le signe de eps_glob, on tourne dans le
+ ! sens des aiguilles d'une montre ou inversement
+ ! eps_glob = 1, on ferme le contour vers le bas --> -2 i Pi residu
+ ! eps_glob = -1, on ferme le contour vers le haut --> +2 i Pi residu
+ !
+ eps_glob = -sign(1._ki,aimag(s23_glob))*sign(1._ki,real(s13_glob-s23_glob,ki))
+ !
+ origine_info_par = "f3p2m_1mi_np2_c, dimension "
+ num_grand_b_info_par = lamb
+ denom_grand_b_info_par = 1._ki
+ !
+ call generic_eval_numer(eval_numer_gi,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ resto = resto-log(plus_grand)*norma
+ !
+ f3p2m_1mi_np2_c(3) = real(resto,ki)
+ f3p2m_1mi_np2_c(4) = aimag(resto)
+ !
+ end if
+ !
+ ! on ajoute la dependence en mu^2
+ !
+ lmu2 = log(mu2_scale_par)
+ f3p2m_1mi_np2_c(3:4) = f3p2m_1mi_np2_c(3:4) + f3p2m_1mi_np2_c(1:2)*lmu2
+ !
+ end function f3p2m_1mi_np2_c
+
+ !****if* src/integral/three_point/function_3p2m_1mi/a3p2m_1mi_div
+ ! NAME
+ !
+ ! Function a3p2m_1mi_div
+ !
+ ! USAGE
+ !
+ ! real_dim6 = a3p2m_1mi_div(s23,s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the divergent part of the two off-shell external leg three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 6 reals corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ ! par1 <= par2 <= par3, note also that put zero for par1, par2 or par3
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 6 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ !
+ function a3p2m_1mi_div_r(s23,s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: a3p2m_1mi_div_r
+ !
+ a3p2m_1mi_div_r(:) = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(1,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(1,s13,s23)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(2,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(2,s13,s23)
+ !
+ else if (par3 == 2) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(1,s13,s23)-he(2,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(1,s13,s23)-hf(2,s13,s23)
+ !
+ else if (par3 == 3) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(3,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(3,s13,s23)
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(1,s13,s23)-2._ki*he(2,s13,s23)+he(3,s13,s23&
+ &)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(1,s13,s23)-2._ki*hf(2,s13,s23)+hf(3,s13,s23&
+ &)
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(2,s13,s23)-he(3,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(2,s13,s23)-hf(3,s13,s23)
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(4,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(4,s13,s23)
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(1,s13,s23)-3._ki*he(2,s13,s23)-he(4,s13,s23&
+ &)+3._ki*he(3,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(1,s13,s23)-3._ki*hf(2,s13,s23)-hf(4,s13,s23&
+ &)+3._ki*hf(3,s13,s23)
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=-he(4,s13,s23)+he(3,s13,s23)
+ !
+ a3p2m_1mi_div_r(5:6)=-hf(4,s13,s23)+hf(3,s13,s23)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=he(2,s13,s23)+he(4,s13,s23)-2._ki*he(3,s13,s23&
+ &)
+ !
+ a3p2m_1mi_div_r(5:6)=hf(2,s13,s23)+hf(4,s13,s23)-2._ki*hf(3,s13,s23&
+ &)
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_r(3:4)=0._ki
+ !
+ a3p2m_1mi_div_r(5:6)=0._ki
+ !
+ end if
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ a3p2m_1mi_div_r(3:4) = -a3p2m_1mi_div_r(3:4)
+ !
+ end function a3p2m_1mi_div_r
+ !
+ !
+ function a3p2m_1mi_div_c(s23,s13,m3_sq,par1,par2,par3)
+ !
+ complex(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(6) :: a3p2m_1mi_div_c
+ !
+ a3p2m_1mi_div_c(:) = 0._ki
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(1,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(1,s13,s23)
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(2,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(2,s13,s23)
+ !
+ else if (par3 == 2) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(1,s13,s23)-he(2,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(1,s13,s23)-hf(2,s13,s23)
+ !
+ else if (par3 == 3) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(3,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(3,s13,s23)
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(1,s13,s23)-2._ki*he(2,s13,s23)+he(3,s13,s23&
+ &)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(1,s13,s23)-2._ki*hf(2,s13,s23)+hf(3,s13,s23&
+ &)
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(2,s13,s23)-he(3,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(2,s13,s23)-hf(3,s13,s23)
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(4,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(4,s13,s23)
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(1,s13,s23)-3._ki*he(2,s13,s23)-he(4,s13,s23&
+ &)+3._ki*he(3,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(1,s13,s23)-3._ki*hf(2,s13,s23)-hf(4,s13,s23&
+ &)+3._ki*hf(3,s13,s23)
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=-he(4,s13,s23)+he(3,s13,s23)
+ !
+ a3p2m_1mi_div_c(5:6)=-hf(4,s13,s23)+hf(3,s13,s23)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=he(2,s13,s23)+he(4,s13,s23)-2._ki*he(3,s13,s23&
+ &)
+ !
+ a3p2m_1mi_div_c(5:6)=hf(2,s13,s23)+hf(4,s13,s23)-2._ki*hf(3,s13,s23&
+ &)
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ a3p2m_1mi_div_c(3:4)=0._ki
+ !
+ a3p2m_1mi_div_c(5:6)=0._ki
+ !
+ end if
+ !
+ end if
+ !
+ ! On change \epsilon_{ir} en -\epsilon_{uv}
+ !
+ a3p2m_1mi_div_c(3:4) = -a3p2m_1mi_div_c(3:4)
+ !
+ end function a3p2m_1mi_div_c
+ !
+ !****if* src/integral/three_point/function_3p2m_1mi/a3p2m_1mi
+ ! NAME
+ !
+ ! Function a3p2m_1mi
+ !
+ ! USAGE
+ !
+ ! real_dim2 = a3p2m_1mi(s23,s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the non divergent part two off-shell external leg three point function in n dimensions
+ ! with up to three Feynman parameters in the numerator.
+ ! It retuns an array of 2 reals corresponding to the real/imaginary
+ ! part of the constant term.
+ !
+ ! INPUTS
+ !
+ ! * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 2 corresponding to
+ ! the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function a3p2m_1mi_r(s23,s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(2) :: a3p2m_1mi_r
+ !
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: sc13,sc23
+ !
+ a3p2m_1mi_r(:) = 0._ki
+ !
+ sc13=sign(un,s13+m3_sq)
+ !
+ sc23=sign(un,s23+m3_sq)
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ c_temp=-1._ki/(s13-s23)*zdilog((s13+m3_sq)/s13,-1._ki)+zdilog((s2&
+ &3+m3_sq)/s23,-1._ki)/(s13-s23)
+ !
+ c_temp_rat=czero
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ c_temp=s23/(s13-s23)**2*zdilog((s13+m3_sq)/s13,-1._ki)-s23/(s13-s&
+ &23)**2*zdilog((s23+m3_sq)/s23,-1._ki)-m3_sq*z_log(m3_sq,-1._ki)&
+ &/(s13-s23)**2-s23/(s13-s23)**2*z_log(-s23,-1._ki)+(s23+m3_sq)/(&
+ &s13-s23)**2*z_log(-s13,-1._ki)-1._ki/(s13-s23)+1._ki/s13*q(1,1.&
+ &_ki+m3_sq/s13,-sc13)*(s23+m3_sq)*m3_sq/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/(s13-s23)
+ !
+ else if (par3 == 2) then
+ !
+ c_temp=-s13/(s13-s23)**2*zdilog((s13+m3_sq)/s13,-1._ki)+s13/(s13-&
+ &s23)**2*zdilog((s23+m3_sq)/s23,-1._ki)+m3_sq*z_log(m3_sq,-1._ki&
+ &)/(s13-s23)**2+s13/(s13-s23)**2*z_log(-s23,-1._ki)-(s13+m3_sq)/&
+ &(s13-s23)**2*z_log(-s13,-1._ki)+1._ki/s23*q(1,1._ki+m3_sq/s23,-&
+ &sc23)*m3_sq/(s13-s23)-m3_sq*(s13+m3_sq)/s13/(s13-s23)**2*q(1,1.&
+ &_ki+m3_sq/s13,-sc13)+1._ki/(s13-s23)
+ !
+ c_temp_rat=1._ki/(s13-s23)
+ !
+ else if (par3 == 3) then
+ !
+ c_temp=-1._ki/(s13-s23)*z_log(-s23,-1._ki)+1._ki/s13*q(1,1._ki+m3&
+ &_sq/s13,-sc13)*m3_sq/(s13-s23)-1._ki/s23*q(1,1._ki+m3_sq/s23,-s&
+ &c23)*m3_sq/(s13-s23)+1._ki/(s13-s23)*z_log(-s13,-1._ki)
+ !
+ c_temp_rat=0._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a3p2m_1mi_r:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unimplemented combination of Feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp=-s23**2/(s13-s23)**3*zdilog((s13+m3_sq)/s13,-1._ki)+s23**2&
+ &/(s13-s23)**3*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/2._ki*m3_sq*&
+ &(-m3_sq+2._ki*s23)/(s13-s23)**3*z_log(m3_sq,-1._ki)-1._ki/2._ki&
+ &*(s23+m3_sq)*(3._ki*s23-m3_sq)/(s13-s23)**3*z_log(-s13,-1._ki)+&
+ &3._ki/2._ki*s23**2/(s13-s23)**3*z_log(-s23,-1._ki)-1._ki/2._ki/&
+ &s13**2*m3_sq**2/(s13-s23)**3*(s23+m3_sq)**2*q(2,1._ki+m3_sq/s13&
+ &,-sc13)-m3_sq*(s23+m3_sq)*(-m3_sq+s23)/s13/(s13-s23)**3*q(1,1._&
+ &ki+m3_sq/s13,-sc13)-1._ki/4._ki*(3._ki*s13**3-12._ki*s13**2*s23&
+ &-2._ki*m3_sq*s13**2+9._ki*s13*s23**2+4._ki*m3_sq*s13*s23+2._ki*&
+ &s13*m3_sq**2-2._ki*m3_sq*s23**2-4._ki*s23*m3_sq**2-2._ki*m3_sq*&
+ &*3)/s13/(s13-s23)**3
+ !
+ c_temp_rat=-1._ki/4._ki*(3._ki*s13**2+m3_sq*s13-9._ki*s23*s13-7._&
+ &ki*m3_sq*s23)/(s13+m3_sq)/(s13-s23)**2
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp=-s13**2/(s13-s23)**3*zdilog((s13+m3_sq)/s13,-1._ki)+s13**2&
+ &/(s13-s23)**3*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/2._ki*m3_sq*&
+ &(4._ki*s13-2._ki*s23-m3_sq)/(s13-s23)**3*z_log(m3_sq,-1._ki)-1.&
+ &_ki/2._ki*(s13+m3_sq)*(3._ki*s13-m3_sq)/(s13-s23)**3*z_log(-s13&
+ &,-1._ki)+1._ki/2._ki*(2._ki*s23*m3_sq+3._ki*s13**2-2._ki*m3_sq*&
+ &s13)/(s13-s23)**3*z_log(-s23,-1._ki)-1._ki/2._ki*m3_sq**2*(s13+&
+ &m3_sq)**2/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+m3_sq*&
+ &(s13-s23-m3_sq)/s23/(s13-s23)**2*q(1,1._ki+m3_sq/s23,-sc23)+1._&
+ &ki/2._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq/s23,-sc23)-m&
+ &3_sq*(s13-m3_sq)*(s13+m3_sq)/s13/(s13-s23)**3*q(1,1._ki+m3_sq/s&
+ &13,-sc13)+1._ki/4._ki/s13/s23*(3._ki*s13*s23**3-2._ki*m3_sq*s13&
+ &*s23**2-12._ki*s13**2*s23**2+9._ki*s13**3*s23+4._ki*m3_sq*s13**&
+ &2*s23+2._ki*m3_sq**3*s23+2._ki*m3_sq**2*s13*s23-2._ki*s13**3*m3&
+ &_sq)/(s13-s23)**3
+ !
+ c_temp_rat=1._ki/4._ki*(7._ki*m3_sq*s13+9._ki*s23*s13-m3_sq*s23-3&
+ &._ki*s23**2)/(s13-s23)**2/(s23+m3_sq)
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/2._ki/(s13-s23)*z_log(-s13,-1._ki)-1._ki/2._ki/(s13-&
+ &s23)*z_log(-s23,-1._ki)-1._ki/2._ki/s13**2*m3_sq**2/(s13-s23)*q&
+ &(2,1._ki+m3_sq/s13,-sc13)-1._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)*&
+ &m3_sq/(s13-s23)+1._ki/2._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki&
+ &+m3_sq/s23,-sc23)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_sq/(s&
+ &13-s23)-1._ki/2._ki*m3_sq/s13/s23
+ !
+ c_temp_rat=-1._ki/2._ki*m3_sq/(s13+m3_sq)/(s23+m3_sq)
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp=s23*s13/(s13-s23)**3*zdilog((s13+m3_sq)/s13,-1._ki)-s23*s1&
+ &3/(s13-s23)**3*zdilog((s23+m3_sq)/s23,-1._ki)-1._ki/2._ki*m3_sq&
+ &*(-m3_sq+2._ki*s13)/(s13-s23)**3*z_log(m3_sq,-1._ki)+1._ki/2._k&
+ &i*(s23*m3_sq-m3_sq**2+m3_sq*s13+3._ki*s23*s13)/(s13-s23)**3*z_l&
+ &og(-s13,-1._ki)-1._ki/2._ki*(s23*m3_sq-m3_sq*s13+3._ki*s23*s13)&
+ &/(s13-s23)**3*z_log(-s23,-1._ki)+1._ki/2._ki*(s23+m3_sq)*m3_sq*&
+ &*2*(s13+m3_sq)/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+1&
+ &._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2*m3_sq**2&
+ &+m3_sq*(-m3_sq**2+s23*s13)/s13/(s13-s23)**3*q(1,1._ki+m3_sq/s13&
+ &,-sc13)-1._ki/4._ki*(3._ki*s13**3-3._ki*s13*s23**2+2._ki*s23*m3&
+ &_sq**2+2._ki*m3_sq**3)/s13/(s13-s23)**3
+ !
+ c_temp_rat=-3._ki/4._ki*(s13+s23)/(s13-s23)**2
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp=-1._ki/2._ki*(-m3_sq+s23)/(s13-s23)**2*z_log(-s13,-1._ki)+&
+ &1._ki/2._ki*(-m3_sq+s23)/(s13-s23)**2*z_log(-s23,-1._ki)-1._ki/&
+ &2._ki/s13**2*(s23+m3_sq)/(s13-s23)**2*m3_sq**2*q(2,1._ki+m3_sq/&
+ &s13,-sc13)-1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)&
+ &**2*m3_sq**2+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*&
+ &m3_sq**2+1._ki/2._ki/s13*(s13**2-s23*s13-m3_sq*s13+s23*m3_sq+m3&
+ &_sq**2)/(s13-s23)**2
+ !
+ c_temp_rat=1._ki/2._ki*s13/(s13-s23)/(s13+m3_sq)
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/2._ki*(s13-m3_sq)/(s13-s23)**2*z_log(-s13,-1._ki)-1.&
+ &_ki/2._ki*(s13-m3_sq)/(s13-s23)**2*z_log(-s23,-1._ki)+1._ki/2._&
+ &ki*m3_sq**2*(s13+m3_sq)/s13**2/(s13-s23)**2*q(2,1._ki+m3_sq/s13&
+ &,-sc13)+1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2&
+ &*m3_sq**2-1._ki/2._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq&
+ &/s23,-sc23)-1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*m&
+ &3_sq**2-1._ki/2._ki/s13/s23*(-s13*s23**2+s13**2*s23+s23*m3_sq**&
+ &2+m3_sq*s13*s23-m3_sq*s13**2)/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/2._ki*s23/(s13-s23)/(s23+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a3p2m_1mi_r:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unimplemented combination of Feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp=s23**3/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)-s23**3/&
+ &(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)-1._ki/6._ki*m3_sq*(&
+ &-3._ki*s23*m3_sq+2._ki*m3_sq**2+6._ki*s23**2)/(s13-s23)**4*z_lo&
+ &g(m3_sq,-1._ki)+1._ki/6._ki*(s23+m3_sq)*(2._ki*m3_sq**2-5._ki*s&
+ &23*m3_sq+11._ki*s23**2)/(s13-s23)**4*z_log(-s13,-1._ki)-11._ki/&
+ &6._ki*s23**3/(s13-s23)**4*z_log(-s23,-1._ki)+m3_sq*(s23+m3_sq)*&
+ &(m3_sq**2+s23**2-s23*m3_sq)/s13/(s13-s23)**4*q(1,1._ki+m3_sq/s1&
+ &3,-sc13)+1._ki/3._ki/s13**3*(s23+m3_sq)**3/(s13-s23)**4*m3_sq**&
+ &3*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/2._ki*m3_sq**2*(s23+m3_sq)**&
+ &2*(-2._ki*m3_sq+s23)/s13**2/(s13-s23)**4*q(2,1._ki+m3_sq/s13,-s&
+ &c13)-1._ki/36._ki*(22._ki*s13**5-6._ki*m3_sq*s13**4-99._ki*s23*&
+ &s13**4-6._ki*m3_sq**2*s13**3+198._ki*s23**2*s13**3+36._ki*s23*m&
+ &3_sq*s13**3-54._ki*m3_sq*s23**2*s13**2-121._ki*s23**3*s13**2+18&
+ &._ki*m3_sq**3*s13**2+18._ki*m3_sq**2*s23**2*s13+24._ki*s23**3*m&
+ &3_sq*s13-36._ki*s23*m3_sq**3*s13-30._ki*m3_sq**4*s13+6._ki*s23*&
+ &*3*m3_sq**2+18._ki*s23*m3_sq**4+6._ki*m3_sq**5+18._ki*m3_sq**3*&
+ &s23**2)/s13**2/(s13-s23)**4
+ !
+ c_temp_rat=-1._ki/36._ki*(22._ki*s13**4+38._ki*m3_sq*s13**3-77._k&
+ &i*s23*s13**3-124._ki*s23*m3_sq*s13**2+121._ki*s23**2*s13**2+4._&
+ &ki*m3_sq**2*s13**2-23._ki*s23*m3_sq**2*s13+218._ki*s23**2*s13*m&
+ &3_sq+85._ki*s23**2*m3_sq**2)/(s13-s23)**3/(s13+m3_sq)**2
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp=-s13**3/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)+s13**3&
+ &/(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/6._ki*m3_sq*&
+ &(2._ki*m3_sq**2+6._ki*s23*m3_sq+6._ki*s23**2+18._ki*s13**2-18._&
+ &ki*s23*s13-9._ki*m3_sq*s13)/(s13-s23)**4*z_log(m3_sq,-1._ki)-1.&
+ &_ki/6._ki*(s13+m3_sq)*(2._ki*m3_sq**2-5._ki*m3_sq*s13+11._ki*s1&
+ &3**2)/(s13-s23)**4*z_log(-s13,-1._ki)+1._ki/6._ki*(18._ki*s23*m&
+ &3_sq*s13+11._ki*s13**3-12._ki*m3_sq*s13**2+6._ki*m3_sq**2*s13-6&
+ &._ki*m3_sq**2*s23-6._ki*s23**2*m3_sq)/(s13-s23)**4*z_log(-s23,-&
+ &1._ki)+1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q(3,1._ki+m3_sq/s2&
+ &3,-sc23)-m3_sq*(s13+m3_sq)*(s13**2-m3_sq*s13+m3_sq**2)/s13/(s13&
+ &-s23)**4*q(1,1._ki+m3_sq/s13,-sc13)-1._ki/3._ki*m3_sq**3*(s13+m&
+ &3_sq)**3/s13**3/(s13-s23)**4*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/2&
+ &._ki*m3_sq*(2._ki*m3_sq**2+2._ki*s13**2-4._ki*s23*s13+2._ki*s23&
+ &**2-3._ki*m3_sq*s13+3._ki*s23*m3_sq)/s23/(s13-s23)**3*q(1,1._ki&
+ &+m3_sq/s23,-sc23)-1._ki/2._ki*m3_sq**2*(s13-2._ki*m3_sq)*(s13+m&
+ &3_sq)**2/s13**2/(s13-s23)**4*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/2&
+ &._ki*m3_sq**2*(-m3_sq+s13-s23)/s23**2/(s13-s23)**2*q(2,1._ki+m3&
+ &_sq/s23,-sc23)+1._ki/36._ki/s13**2/s23**2*(-6._ki*m3_sq**2*s13*&
+ &*5+121._ki*s23**2*s13**5-24._ki*s23*m3_sq*s13**5+54._ki*s23**2*&
+ &s13**4*m3_sq+36._ki*s23*m3_sq**2*s13**4-198._ki*s23**3*s13**4-3&
+ &6._ki*s23**3*m3_sq*s13**3+99._ki*s23**4*s13**3-36._ki*s23**2*m3&
+ &_sq**2*s13**3+24._ki*s23**3*m3_sq**2*s13**2+6._ki*s23**4*m3_sq*&
+ &s13**2-22._ki*s23**5*s13**2-12._ki*s23**2*m3_sq**4*s13+6._ki*s2&
+ &3**2*m3_sq**5)/(s13-s23)**4
+ !
+ c_temp_rat=1._ki/36._ki*(218._ki*s23*m3_sq*s13**2+121._ki*s23**2*&
+ &s13**2+85._ki*m3_sq**2*s13**2-124._ki*s23**2*s13*m3_sq-23._ki*s&
+ &23*m3_sq**2*s13-77._ki*s23**3*s13+38._ki*s23**3*m3_sq+4._ki*s23&
+ &**2*m3_sq**2+22._ki*s23**4)/(s23+m3_sq)**2/(s13-s23)**3
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/3._ki/(s13-s23)*z_log(-s13,-1._ki)-1._ki/3._ki/(s13-&
+ &s23)*z_log(-s23,-1._ki)-1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q&
+ &(3,1._ki+m3_sq/s23,-sc23)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*&
+ &m3_sq/(s13-s23)+1._ki/3._ki/s13**3/(s13-s23)*m3_sq**3*q(3,1._ki&
+ &+m3_sq/s13,-sc13)-1._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)*m3_sq/(s&
+ &13-s23)-1._ki/s13**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq/s13,-sc&
+ &13)+1._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq/s23,-sc23)-&
+ &1._ki/6._ki*(5._ki*s23*s13-s23*m3_sq-m3_sq*s13)/s23**2*m3_sq/s1&
+ &3**2
+ !
+ c_temp_rat=-1._ki/6._ki*(5._ki*s23*s13+3._ki*m3_sq*s13+m3_sq**2+3&
+ &._ki*s23*m3_sq)*m3_sq/(s13+m3_sq)**2/(s23+m3_sq)**2
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp=-s23**2*s13/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)+s2&
+ &3**2*s13/(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/6._k&
+ &i*m3_sq*(2._ki*m3_sq**2+6._ki*s23*s13-3._ki*m3_sq*s13)/(s13-s23&
+ &)**4*z_log(m3_sq,-1._ki)-1._ki/6._ki*(2._ki*m3_sq**3+2._ki*s23*&
+ &*2*m3_sq-2._ki*m3_sq**2*s23+4._ki*s23*m3_sq*s13-m3_sq**2*s13+11&
+ &._ki*s23**2*s13)/(s13-s23)**4*z_log(-s13,-1._ki)+1._ki/6._ki*(2&
+ &._ki*s23**2*m3_sq-2._ki*m3_sq**2*s23-2._ki*s23*m3_sq*s13+2._ki*&
+ &m3_sq**2*s13+11._ki*s23**2*s13)/(s13-s23)**4*z_log(-s23,-1._ki)&
+ &-m3_sq*(m3_sq**3+s23**2*s13)/s13/(s13-s23)**4*q(1,1._ki+m3_sq/s&
+ &13,-sc13)-1._ki/3._ki*m3_sq**3*(s23+m3_sq)**2*(s13+m3_sq)/s13**&
+ &3/(s13-s23)**4*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki/s23*q(1,1&
+ &._ki+m3_sq/s23,-sc23)*m3_sq**3/(s13-s23)**3-1._ki/2._ki*m3_sq**&
+ &2*(s23+m3_sq)*(-2._ki*m3_sq**2-m3_sq*s13+s23*s13)/s13**2/(s13-s&
+ &23)**4*q(2,1._ki+m3_sq/s13,-sc13)-1._ki/36._ki*(11._ki*s13**5-6&
+ &6._ki*s23*s13**4-6._ki*m3_sq*s13**4+12._ki*s23*m3_sq*s13**3+33.&
+ &_ki*s23**2*s13**3+6._ki*m3_sq**2*s13**3-6._ki*m3_sq*s23**2*s13*&
+ &*2+22._ki*s23**3*s13**2-12._ki*s23*m3_sq**2*s13**2-6._ki*m3_sq*&
+ &*3*s13**2-12._ki*m3_sq**2*s23**2*s13+24._ki*m3_sq**4*s13+12._ki&
+ &*s23*m3_sq**3*s13-6._ki*m3_sq**3*s23**2-6._ki*m3_sq**5-12._ki*s&
+ &23*m3_sq**4)/s13**2/(s13-s23)**4
+ !
+ c_temp_rat=-1._ki/36._ki*(11._ki*s13**3-55._ki*s23*s13**2+5._ki*m&
+ &3_sq*s13**2-49._ki*s23*m3_sq*s13-22._ki*s23**2*s13-22._ki*s23**&
+ &2*m3_sq)/(s13-s23)**3/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp=s23*s13**2/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)-s23&
+ &*s13**2/(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)-1._ki/6._ki&
+ &*m3_sq*(2._ki*m3_sq**2+6._ki*s13**2+3._ki*s23*m3_sq-6._ki*m3_sq&
+ &*s13)/(s13-s23)**4*z_log(m3_sq,-1._ki)+1._ki/6._ki*(4._ki*s23*m&
+ &3_sq*s13+11._ki*s23*s13**2+2._ki*m3_sq**3+2._ki*m3_sq*s13**2-2.&
+ &_ki*m3_sq**2*s13-m3_sq**2*s23)/(s13-s23)**4*z_log(-s13,-1._ki)-&
+ &1._ki/6._ki*(4._ki*s23*m3_sq*s13+11._ki*s23*s13**2-4._ki*m3_sq*&
+ &s13**2+4._ki*m3_sq**2*s13-4._ki*m3_sq**2*s23)/(s13-s23)**4*z_lo&
+ &g(-s23,-1._ki)+m3_sq*(s23*s13**2+m3_sq**3)/s13/(s13-s23)**4*q(1&
+ &,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki*(s23+m3_sq)*m3_sq**3*(s13+m&
+ &3_sq)**2/s13**3/(s13-s23)**4*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/6&
+ &._ki*m3_sq**2*(3._ki*s13-3._ki*s23-4._ki*m3_sq)/s23/(s13-s23)**&
+ &3*q(1,1._ki+m3_sq/s23,-sc23)+1._ki/2._ki*m3_sq**2*(s13+m3_sq)*(&
+ &s23*s13-2._ki*m3_sq**2-s23*m3_sq)/s13**2/(s13-s23)**4*q(2,1._ki&
+ &+m3_sq/s13,-sc13)+1._ki/6._ki/s23**2*m3_sq**3/(s13-s23)**2*q(2,&
+ &1._ki+m3_sq/s23,-sc23)-1._ki/36._ki/s13**2/s23*(11._ki*s23**4*s&
+ &13**2-66._ki*s23**3*s13**3-6._ki*s23**3*s13**2*m3_sq+33._ki*s23&
+ &**2*s13**4+6._ki*s23**2*m3_sq**4+12._ki*s23**2*s13**3*m3_sq+24.&
+ &_ki*s23**2*s13**2*m3_sq**2+22._ki*s13**5*s23-6._ki*s23*m3_sq*s1&
+ &3**4-18._ki*s23*m3_sq**4*s13+6._ki*s23*m3_sq**5-12._ki*s23*m3_s&
+ &q**2*s13**3+6._ki*m3_sq**2*s13**4)/(s13-s23)**4
+ !
+ c_temp_rat=-1._ki/36._ki*(22._ki*s23*s13**2+22._ki*m3_sq*s13**2+4&
+ &9._ki*s23*m3_sq*s13+55._ki*s23**2*s13-5._ki*s23**2*m3_sq-11._ki&
+ &*s23**3)/(s13-s23)**3/(s23+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/3._ki*(m3_sq**2+s23**2-s23*m3_sq)/(s13-s23)**3*z_log&
+ &(-s13,-1._ki)-1._ki/3._ki*(m3_sq**2+s23**2-s23*m3_sq)/(s13-s23)&
+ &**3*z_log(-s23,-1._ki)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_&
+ &sq**3/(s13-s23)**3+1._ki/3._ki/s13**3*(s23+m3_sq)**2*m3_sq**3/(&
+ &s13-s23)**3*q(3,1._ki+m3_sq/s13,-sc13)-1._ki/3._ki/s23*q(1,1._k&
+ &i+m3_sq/s23,-sc23)*m3_sq**3/(s13-s23)**3-1._ki/s13**2*(s23+m3_s&
+ &q)*m3_sq**3/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/6._ki&
+ &/s13**2*(s13**4+m3_sq*s13**3-4._ki*s23*s13**3+3._ki*s23**2*s13*&
+ &*2-3._ki*m3_sq**2*s13**2-s23**2*s13*m3_sq+4._ki*s23*m3_sq**2*s1&
+ &3+5._ki*m3_sq**3*s13-m3_sq**4-2._ki*s23*m3_sq**3-s23**2*m3_sq**&
+ &2)/(s13-s23)**3
+ !
+ c_temp_rat=1._ki/6._ki*s13*(s13**2+3._ki*m3_sq*s13-3._ki*s23*s13-&
+ &5._ki*s23*m3_sq)/(s13-s23)**2/(s13+m3_sq)**2
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/3._ki*(s13**2-m3_sq*s13+m3_sq**2)/(s13-s23)**3*z_log&
+ &(-s13,-1._ki)-1._ki/3._ki*(s13**2-m3_sq*s13+m3_sq**2)/(s13-s23)&
+ &**3*z_log(-s23,-1._ki)-1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q(&
+ &3,1._ki+m3_sq/s23,-sc23)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m&
+ &3_sq**3/(s13-s23)**3+1._ki/3._ki*m3_sq**3*(s13+m3_sq)**2/s13**3&
+ &/(s13-s23)**3*q(3,1._ki+m3_sq/s13,-sc13)-1._ki/3._ki/s23*q(1,1.&
+ &_ki+m3_sq/s23,-sc23)*m3_sq**3/(s13-s23)**3-m3_sq**3*(s13+m3_sq)&
+ &/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki/s23&
+ &**2*m3_sq**3/(s13-s23)**2*q(2,1._ki+m3_sq/s23,-sc23)-1._ki/6._k&
+ &i/s13**2/s23**2*(-s23*m3_sq*s13**4-m3_sq**2*s13**4+3._ki*s23**2&
+ &*s13**4-4._ki*s23**3*s13**3+4._ki*s23*m3_sq**2*s13**3+s23**3*s1&
+ &3**2*m3_sq+s23**4*s13**2-3._ki*s23**2*s13**2*m3_sq**2-3._ki*m3_&
+ &sq**3*s23**2*s13+s23**2*m3_sq**4)/(s13-s23)**3
+ !
+ c_temp_rat=-1._ki/6._ki*s23*(3._ki*s23*s13+5._ki*m3_sq*s13-s23**2&
+ &-3._ki*s23*m3_sq)/(s13-s23)**2/(s23+m3_sq)**2
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=-1._ki/6._ki*(-2._ki*m3_sq+s23)/(s13-s23)**2*z_log(-s13,-1&
+ &._ki)+1._ki/6._ki*(-2._ki*m3_sq+s23)/(s13-s23)**2*z_log(-s23,-1&
+ &._ki)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**&
+ &2+1._ki/3._ki/s13**3*(s23+m3_sq)/(s13-s23)**2*m3_sq**3*q(3,1._k&
+ &i+m3_sq/s13,-sc13)-1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(&
+ &s13-s23)**2*m3_sq**2-1._ki/2._ki*m3_sq**2*(s23+2._ki*m3_sq)/s13&
+ &**2/(s13-s23)**2*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/6._ki/s23**2*&
+ &m3_sq**3/(s13-s23)**2*q(2,1._ki+m3_sq/s23,-sc23)+1._ki/6._ki/s1&
+ &3**2/s23*(-s23**2*m3_sq**2-s23**2*s13**2+2._ki*s23**2*s13*m3_sq&
+ &+s23*s13**3+5._ki*s23*m3_sq**2*s13-s23*m3_sq**3-2._ki*s23*m3_sq&
+ &*s13**2-m3_sq**2*s13**2)/(s13-s23)**2
+ !
+ c_temp_rat=1._ki/6._ki*(s23*s13**2+m3_sq*s13**2-m3_sq**2*s13+m3_s&
+ &q**2*s23)/(s13-s23)/(s13+m3_sq)**2/(s23+m3_sq)
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/6._ki*(s13-2._ki*m3_sq)/(s13-s23)**2*z_log(-s13,-1._&
+ &ki)-1._ki/6._ki*(s13-2._ki*m3_sq)/(s13-s23)**2*z_log(-s23,-1._k&
+ &i)+1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q(3,1._ki+m3_sq/s23,-s&
+ &c23)-1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**2&
+ &-1._ki/3._ki*m3_sq**3*(s13+m3_sq)/s13**3/(s13-s23)**2*q(3,1._ki&
+ &+m3_sq/s13,-sc13)+1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s&
+ &13-s23)**2*m3_sq**2+1._ki/2._ki*m3_sq**2*(s13+2._ki*m3_sq)/s13*&
+ &*2/(s13-s23)**2*q(2,1._ki+m3_sq/s13,-sc13)-1._ki/6._ki*m3_sq**2&
+ &*(m3_sq+3._ki*s13-3._ki*s23)/s23**2/(s13-s23)**2*q(2,1._ki+m3_s&
+ &q/s23,-sc23)-1._ki/6._ki/s13**2/s23**2*(-s23**3*s13**2+s23**2*s&
+ &13**3+4._ki*m3_sq**2*s23**2*s13-m3_sq**3*s23**2+2._ki*m3_sq*s23&
+ &**2*s13**2-2._ki*s23*m3_sq*s13**3-2._ki*s23*m3_sq**2*s13**2+m3_&
+ &sq**2*s13**3)/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/6._ki*(s23**2*s13+m3_sq**2*s13-m3_sq**2*s23+s23&
+ &**2*m3_sq)/(s23+m3_sq)**2/(s13-s23)/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp=-1._ki/6._ki*(2._ki*s23*s13-m3_sq*s13-s23*m3_sq+2._ki*m3_s&
+ &q**2)/(s13-s23)**3*z_log(-s13,-1._ki)+1._ki/6._ki*(2._ki*s23*s1&
+ &3-m3_sq*s13-s23*m3_sq+2._ki*m3_sq**2)/(s13-s23)**3*z_log(-s23,-&
+ &1._ki)-1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_sq**3/(s13-s23)*&
+ &*3-1._ki/3._ki*(s13+m3_sq)*m3_sq**3*(s23+m3_sq)/s13**3/(s13-s23&
+ &)**3*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki/s23*q(1,1._ki+m3_sq&
+ &/s23,-sc23)*m3_sq**3/(s13-s23)**3+1._ki/2._ki*m3_sq**3*(s13+s23&
+ &+2._ki*m3_sq)/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)-1.&
+ &_ki/6._ki/s23**2*m3_sq**3/(s13-s23)**2*q(2,1._ki+m3_sq/s23,-sc2&
+ &3)+1._ki/6._ki/s23/s13**2*(-s23**3*s13**2-m3_sq**2*s23**2*s13+2&
+ &._ki*m3_sq*s23**2*s13**2+m3_sq**3*s23**2-4._ki*s23*m3_sq**3*s13&
+ &-2._ki*s23*m3_sq*s13**3+s23*s13**4+s23*m3_sq**4+m3_sq**2*s13**3&
+ &)/(s13-s23)**3
+ !
+ c_temp_rat=1._ki/6._ki*(s23*s13**2+m3_sq*s13**2+s23**2*s13+s23**2&
+ &*m3_sq)/(s13-s23)**2/(s13+m3_sq)/(s23+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a3p2m_1mi_r:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unimplemented combination of Feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ a3p2m_1mi_r=(/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ a3p2m_1mi_r=(/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ end function a3p2m_1mi_r
+ !
+ function a3p2m_1mi_c(s23,s13,m3_sq,par1,par2,par3)
+ !
+ complex(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(2) :: a3p2m_1mi_c
+ !
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: sc13,sc23
+ !
+ a3p2m_1mi_c(:) = 0._ki
+ !
+ sc13=sign(un,real(s13+m3_sq,ki))
+ !
+ sc23=sign(un,real(s23+m3_sq,ki))
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ c_temp=-1._ki/(s13-s23)*zdilog((s13+m3_sq)/s13,-1._ki)+zdilog((s2&
+ &3+m3_sq)/s23,-1._ki)/(s13-s23)
+ !
+ c_temp_rat = czero
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ if (par3 == 1) then
+ !
+ c_temp=s23/(s13-s23)**2*zdilog((s13+m3_sq)/s13,-1._ki)-s23/(s13-s&
+ &23)**2*zdilog((s23+m3_sq)/s23,-1._ki)-m3_sq*z_log(m3_sq,-1._ki)&
+ &/(s13-s23)**2-s23/(s13-s23)**2*z_log(-s23,-1._ki)+(s23+m3_sq)/(&
+ &s13-s23)**2*z_log(-s13,-1._ki)-1._ki/(s13-s23)+1._ki/s13*q(1,1.&
+ &_ki+m3_sq/s13,-sc13)*(s23+m3_sq)*m3_sq/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/(s13-s23)
+ !
+ else if (par3 == 2) then
+ !
+ c_temp=-s13/(s13-s23)**2*zdilog((s13+m3_sq)/s13,-1._ki)+s13/(s13-&
+ &s23)**2*zdilog((s23+m3_sq)/s23,-1._ki)+m3_sq*z_log(m3_sq,-1._ki&
+ &)/(s13-s23)**2+s13/(s13-s23)**2*z_log(-s23,-1._ki)-(s13+m3_sq)/&
+ &(s13-s23)**2*z_log(-s13,-1._ki)+1._ki/s23*q(1,1._ki+m3_sq/s23,-&
+ &sc23)*m3_sq/(s13-s23)-m3_sq*(s13+m3_sq)/s13/(s13-s23)**2*q(1,1.&
+ &_ki+m3_sq/s13,-sc13)+1._ki/(s13-s23)
+ !
+ c_temp_rat=1._ki/(s13-s23)
+ !
+ else if (par3 == 3) then
+ !
+ c_temp=-1._ki/(s13-s23)*z_log(-s23,-1._ki)+1._ki/s13*q(1,1._ki+m3&
+ &_sq/s13,-sc13)*m3_sq/(s13-s23)-1._ki/s23*q(1,1._ki+m3_sq/s23,-s&
+ &c23)*m3_sq/(s13-s23)+1._ki/(s13-s23)*z_log(-s13,-1._ki)
+ !
+ c_temp_rat=0._ki
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function a3p2m_1mi_c:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "unimplemented combination of feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ ! cas avec deux parametres de feynman au numerateur
+ else if ( (par1==0) ) then
+ !
+ if ( (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp=-s23**2/(s13-s23)**3*zdilog((s13+m3_sq)/s13,-1._ki)+s23**2&
+ &/(s13-s23)**3*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/2._ki*m3_sq*&
+ &(-m3_sq+2._ki*s23)/(s13-s23)**3*z_log(m3_sq,-1._ki)-1._ki/2._ki&
+ &*(s23+m3_sq)*(3._ki*s23-m3_sq)/(s13-s23)**3*z_log(-s13,-1._ki)+&
+ &3._ki/2._ki*s23**2/(s13-s23)**3*z_log(-s23,-1._ki)-1._ki/2._ki/&
+ &s13**2*m3_sq**2/(s13-s23)**3*(s23+m3_sq)**2*q(2,1._ki+m3_sq/s13&
+ &,-sc13)-m3_sq*(s23+m3_sq)*(-m3_sq+s23)/s13/(s13-s23)**3*q(1,1._&
+ &ki+m3_sq/s13,-sc13)-1._ki/4._ki*(3._ki*s13**3-12._ki*s13**2*s23&
+ &-2._ki*m3_sq*s13**2+9._ki*s13*s23**2+4._ki*m3_sq*s13*s23+2._ki*&
+ &s13*m3_sq**2-2._ki*m3_sq*s23**2-4._ki*s23*m3_sq**2-2._ki*m3_sq*&
+ &*3)/s13/(s13-s23)**3
+ !
+ c_temp_rat=-1._ki/4._ki*(3._ki*s13**2+m3_sq*s13-9._ki*s23*s13-7._&
+ &ki*m3_sq*s23)/(s13+m3_sq)/(s13-s23)**2
+ !
+ else if ( (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp=-s13**2/(s13-s23)**3*zdilog((s13+m3_sq)/s13,-1._ki)+s13**2&
+ &/(s13-s23)**3*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/2._ki*m3_sq*&
+ &(4._ki*s13-2._ki*s23-m3_sq)/(s13-s23)**3*z_log(m3_sq,-1._ki)-1.&
+ &_ki/2._ki*(s13+m3_sq)*(3._ki*s13-m3_sq)/(s13-s23)**3*z_log(-s13&
+ &,-1._ki)+1._ki/2._ki*(2._ki*s23*m3_sq+3._ki*s13**2-2._ki*m3_sq*&
+ &s13)/(s13-s23)**3*z_log(-s23,-1._ki)-1._ki/2._ki*m3_sq**2*(s13+&
+ &m3_sq)**2/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+m3_sq*&
+ &(s13-s23-m3_sq)/s23/(s13-s23)**2*q(1,1._ki+m3_sq/s23,-sc23)+1._&
+ &ki/2._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq/s23,-sc23)-m&
+ &3_sq*(s13-m3_sq)*(s13+m3_sq)/s13/(s13-s23)**3*q(1,1._ki+m3_sq/s&
+ &13,-sc13)+1._ki/4._ki/s13/s23*(3._ki*s13*s23**3-2._ki*m3_sq*s13&
+ &*s23**2-12._ki*s13**2*s23**2+9._ki*s13**3*s23+4._ki*m3_sq*s13**&
+ &2*s23+2._ki*m3_sq**3*s23+2._ki*m3_sq**2*s13*s23-2._ki*s13**3*m3&
+ &_sq)/(s13-s23)**3
+ !
+ c_temp_rat=1._ki/4._ki*(7._ki*m3_sq*s13+9._ki*s23*s13-m3_sq*s23-3&
+ &._ki*s23**2)/(s13-s23)**2/(s23+m3_sq)
+ !
+ else if ( (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/2._ki/(s13-s23)*z_log(-s13,-1._ki)-1._ki/2._ki/(s13-&
+ &s23)*z_log(-s23,-1._ki)-1._ki/2._ki/s13**2*m3_sq**2/(s13-s23)*q&
+ &(2,1._ki+m3_sq/s13,-sc13)-1._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)*&
+ &m3_sq/(s13-s23)+1._ki/2._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki&
+ &+m3_sq/s23,-sc23)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_sq/(s&
+ &13-s23)-1._ki/2._ki*m3_sq/s13/s23
+ !
+ c_temp_rat=-1._ki/2._ki*m3_sq/(s13+m3_sq)/(s23+m3_sq)
+ !
+ else if ( (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp=s23*s13/(s13-s23)**3*zdilog((s13+m3_sq)/s13,-1._ki)-s23*s1&
+ &3/(s13-s23)**3*zdilog((s23+m3_sq)/s23,-1._ki)-1._ki/2._ki*m3_sq&
+ &*(-m3_sq+2._ki*s13)/(s13-s23)**3*z_log(m3_sq,-1._ki)+1._ki/2._k&
+ &i*(s23*m3_sq-m3_sq**2+m3_sq*s13+3._ki*s23*s13)/(s13-s23)**3*z_l&
+ &og(-s13,-1._ki)-1._ki/2._ki*(s23*m3_sq-m3_sq*s13+3._ki*s23*s13)&
+ &/(s13-s23)**3*z_log(-s23,-1._ki)+1._ki/2._ki*(s23+m3_sq)*m3_sq*&
+ &*2*(s13+m3_sq)/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+1&
+ &._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2*m3_sq**2&
+ &+m3_sq*(-m3_sq**2+s23*s13)/s13/(s13-s23)**3*q(1,1._ki+m3_sq/s13&
+ &,-sc13)-1._ki/4._ki*(3._ki*s13**3-3._ki*s13*s23**2+2._ki*s23*m3&
+ &_sq**2+2._ki*m3_sq**3)/s13/(s13-s23)**3
+ !
+ c_temp_rat=-3._ki/4._ki*(s13+s23)/(s13-s23)**2
+ !
+ else if ( (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp=-1._ki/2._ki*(-m3_sq+s23)/(s13-s23)**2*z_log(-s13,-1._ki)+&
+ &1._ki/2._ki*(-m3_sq+s23)/(s13-s23)**2*z_log(-s23,-1._ki)-1._ki/&
+ &2._ki/s13**2*(s23+m3_sq)/(s13-s23)**2*m3_sq**2*q(2,1._ki+m3_sq/&
+ &s13,-sc13)-1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)&
+ &**2*m3_sq**2+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*&
+ &m3_sq**2+1._ki/2._ki/s13*(s13**2-s23*s13-m3_sq*s13+s23*m3_sq+m3&
+ &_sq**2)/(s13-s23)**2
+ !
+ c_temp_rat=1._ki/2._ki*s13/(s13-s23)/(s13+m3_sq)
+ !
+ else if ( (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/2._ki*(s13-m3_sq)/(s13-s23)**2*z_log(-s13,-1._ki)-1.&
+ &_ki/2._ki*(s13-m3_sq)/(s13-s23)**2*z_log(-s23,-1._ki)+1._ki/2._&
+ &ki*m3_sq**2*(s13+m3_sq)/s13**2/(s13-s23)**2*q(2,1._ki+m3_sq/s13&
+ &,-sc13)+1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2&
+ &*m3_sq**2-1._ki/2._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq&
+ &/s23,-sc23)-1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*m&
+ &3_sq**2-1._ki/2._ki/s13/s23*(-s13*s23**2+s13**2*s23+s23*m3_sq**&
+ &2+m3_sq*s13*s23-m3_sq*s13**2)/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/2._ki*s23/(s13-s23)/(s23+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function a3p2m_1mi_c:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "unimplemented combination of feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ ! cas avec trois parametres de feynman au numerateur
+ else
+ !
+ if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 1) ) then
+ !
+ c_temp=s23**3/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)-s23**3/&
+ &(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)-1._ki/6._ki*m3_sq*(&
+ &-3._ki*s23*m3_sq+2._ki*m3_sq**2+6._ki*s23**2)/(s13-s23)**4*z_lo&
+ &g(m3_sq,-1._ki)+1._ki/6._ki*(s23+m3_sq)*(2._ki*m3_sq**2-5._ki*s&
+ &23*m3_sq+11._ki*s23**2)/(s13-s23)**4*z_log(-s13,-1._ki)-11._ki/&
+ &6._ki*s23**3/(s13-s23)**4*z_log(-s23,-1._ki)+m3_sq*(s23+m3_sq)*&
+ &(m3_sq**2+s23**2-s23*m3_sq)/s13/(s13-s23)**4*q(1,1._ki+m3_sq/s1&
+ &3,-sc13)+1._ki/3._ki/s13**3*(s23+m3_sq)**3/(s13-s23)**4*m3_sq**&
+ &3*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/2._ki*m3_sq**2*(s23+m3_sq)**&
+ &2*(-2._ki*m3_sq+s23)/s13**2/(s13-s23)**4*q(2,1._ki+m3_sq/s13,-s&
+ &c13)-1._ki/36._ki*(22._ki*s13**5-6._ki*m3_sq*s13**4-99._ki*s23*&
+ &s13**4-6._ki*m3_sq**2*s13**3+198._ki*s23**2*s13**3+36._ki*s23*m&
+ &3_sq*s13**3-54._ki*m3_sq*s23**2*s13**2-121._ki*s23**3*s13**2+18&
+ &._ki*m3_sq**3*s13**2+18._ki*m3_sq**2*s23**2*s13+24._ki*s23**3*m&
+ &3_sq*s13-36._ki*s23*m3_sq**3*s13-30._ki*m3_sq**4*s13+6._ki*s23*&
+ &*3*m3_sq**2+18._ki*s23*m3_sq**4+6._ki*m3_sq**5+18._ki*m3_sq**3*&
+ &s23**2)/s13**2/(s13-s23)**4
+ !
+ c_temp_rat=-1._ki/36._ki*(22._ki*s13**4+38._ki*m3_sq*s13**3-77._k&
+ &i*s23*s13**3-124._ki*s23*m3_sq*s13**2+121._ki*s23**2*s13**2+4._&
+ &ki*m3_sq**2*s13**2-23._ki*s23*m3_sq**2*s13+218._ki*s23**2*s13*m&
+ &3_sq+85._ki*s23**2*m3_sq**2)/(s13-s23)**3/(s13+m3_sq)**2
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp=-s13**3/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)+s13**3&
+ &/(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/6._ki*m3_sq*&
+ &(2._ki*m3_sq**2+6._ki*s23*m3_sq+6._ki*s23**2+18._ki*s13**2-18._&
+ &ki*s23*s13-9._ki*m3_sq*s13)/(s13-s23)**4*z_log(m3_sq,-1._ki)-1.&
+ &_ki/6._ki*(s13+m3_sq)*(2._ki*m3_sq**2-5._ki*m3_sq*s13+11._ki*s1&
+ &3**2)/(s13-s23)**4*z_log(-s13,-1._ki)+1._ki/6._ki*(18._ki*s23*m&
+ &3_sq*s13+11._ki*s13**3-12._ki*m3_sq*s13**2+6._ki*m3_sq**2*s13-6&
+ &._ki*m3_sq**2*s23-6._ki*s23**2*m3_sq)/(s13-s23)**4*z_log(-s23,-&
+ &1._ki)+1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q(3,1._ki+m3_sq/s2&
+ &3,-sc23)-m3_sq*(s13+m3_sq)*(s13**2-m3_sq*s13+m3_sq**2)/s13/(s13&
+ &-s23)**4*q(1,1._ki+m3_sq/s13,-sc13)-1._ki/3._ki*m3_sq**3*(s13+m&
+ &3_sq)**3/s13**3/(s13-s23)**4*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/2&
+ &._ki*m3_sq*(2._ki*m3_sq**2+2._ki*s13**2-4._ki*s23*s13+2._ki*s23&
+ &**2-3._ki*m3_sq*s13+3._ki*s23*m3_sq)/s23/(s13-s23)**3*q(1,1._ki&
+ &+m3_sq/s23,-sc23)-1._ki/2._ki*m3_sq**2*(s13-2._ki*m3_sq)*(s13+m&
+ &3_sq)**2/s13**2/(s13-s23)**4*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/2&
+ &._ki*m3_sq**2*(-m3_sq+s13-s23)/s23**2/(s13-s23)**2*q(2,1._ki+m3&
+ &_sq/s23,-sc23)+1._ki/36._ki/s13**2/s23**2*(-6._ki*m3_sq**2*s13*&
+ &*5+121._ki*s23**2*s13**5-24._ki*s23*m3_sq*s13**5+54._ki*s23**2*&
+ &s13**4*m3_sq+36._ki*s23*m3_sq**2*s13**4-198._ki*s23**3*s13**4-3&
+ &6._ki*s23**3*m3_sq*s13**3+99._ki*s23**4*s13**3-36._ki*s23**2*m3&
+ &_sq**2*s13**3+24._ki*s23**3*m3_sq**2*s13**2+6._ki*s23**4*m3_sq*&
+ &s13**2-22._ki*s23**5*s13**2-12._ki*s23**2*m3_sq**4*s13+6._ki*s2&
+ &3**2*m3_sq**5)/(s13-s23)**4
+ !
+ c_temp_rat=1._ki/36._ki*(218._ki*s23*m3_sq*s13**2+121._ki*s23**2*&
+ &s13**2+85._ki*m3_sq**2*s13**2-124._ki*s23**2*s13*m3_sq-23._ki*s&
+ &23*m3_sq**2*s13-77._ki*s23**3*s13+38._ki*s23**3*m3_sq+4._ki*s23&
+ &**2*m3_sq**2+22._ki*s23**4)/(s23+m3_sq)**2/(s13-s23)**3
+ !
+ else if ( (par1 == 3) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/3._ki/(s13-s23)*z_log(-s13,-1._ki)-1._ki/3._ki/(s13-&
+ &s23)*z_log(-s23,-1._ki)-1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q&
+ &(3,1._ki+m3_sq/s23,-sc23)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*&
+ &m3_sq/(s13-s23)+1._ki/3._ki/s13**3/(s13-s23)*m3_sq**3*q(3,1._ki&
+ &+m3_sq/s13,-sc13)-1._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)*m3_sq/(s&
+ &13-s23)-1._ki/s13**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq/s13,-sc&
+ &13)+1._ki/s23**2/(s13-s23)*m3_sq**2*q(2,1._ki+m3_sq/s23,-sc23)-&
+ &1._ki/6._ki*(5._ki*s23*s13-s23*m3_sq-m3_sq*s13)/s23**2*m3_sq/s1&
+ &3**2
+ !
+ c_temp_rat=-1._ki/6._ki*(5._ki*s23*s13+3._ki*m3_sq*s13+m3_sq**2+3&
+ &._ki*s23*m3_sq)*m3_sq/(s13+m3_sq)**2/(s23+m3_sq)**2
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 2) ) then
+ !
+ c_temp=-s23**2*s13/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)+s2&
+ &3**2*s13/(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)+1._ki/6._k&
+ &i*m3_sq*(2._ki*m3_sq**2+6._ki*s23*s13-3._ki*m3_sq*s13)/(s13-s23&
+ &)**4*z_log(m3_sq,-1._ki)-1._ki/6._ki*(2._ki*m3_sq**3+2._ki*s23*&
+ &*2*m3_sq-2._ki*m3_sq**2*s23+4._ki*s23*m3_sq*s13-m3_sq**2*s13+11&
+ &._ki*s23**2*s13)/(s13-s23)**4*z_log(-s13,-1._ki)+1._ki/6._ki*(2&
+ &._ki*s23**2*m3_sq-2._ki*m3_sq**2*s23-2._ki*s23*m3_sq*s13+2._ki*&
+ &m3_sq**2*s13+11._ki*s23**2*s13)/(s13-s23)**4*z_log(-s23,-1._ki)&
+ &-m3_sq*(m3_sq**3+s23**2*s13)/s13/(s13-s23)**4*q(1,1._ki+m3_sq/s&
+ &13,-sc13)-1._ki/3._ki*m3_sq**3*(s23+m3_sq)**2*(s13+m3_sq)/s13**&
+ &3/(s13-s23)**4*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki/s23*q(1,1&
+ &._ki+m3_sq/s23,-sc23)*m3_sq**3/(s13-s23)**3-1._ki/2._ki*m3_sq**&
+ &2*(s23+m3_sq)*(-2._ki*m3_sq**2-m3_sq*s13+s23*s13)/s13**2/(s13-s&
+ &23)**4*q(2,1._ki+m3_sq/s13,-sc13)-1._ki/36._ki*(11._ki*s13**5-6&
+ &6._ki*s23*s13**4-6._ki*m3_sq*s13**4+12._ki*s23*m3_sq*s13**3+33.&
+ &_ki*s23**2*s13**3+6._ki*m3_sq**2*s13**3-6._ki*m3_sq*s23**2*s13*&
+ &*2+22._ki*s23**3*s13**2-12._ki*s23*m3_sq**2*s13**2-6._ki*m3_sq*&
+ &*3*s13**2-12._ki*m3_sq**2*s23**2*s13+24._ki*m3_sq**4*s13+12._ki&
+ &*s23*m3_sq**3*s13-6._ki*m3_sq**3*s23**2-6._ki*m3_sq**5-12._ki*s&
+ &23*m3_sq**4)/s13**2/(s13-s23)**4
+ !
+ c_temp_rat=-1._ki/36._ki*(11._ki*s13**3-55._ki*s23*s13**2+5._ki*m&
+ &3_sq*s13**2-49._ki*s23*m3_sq*s13-22._ki*s23**2*s13-22._ki*s23**&
+ &2*m3_sq)/(s13-s23)**3/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 2) ) then
+ !
+ c_temp=s23*s13**2/(s13-s23)**4*zdilog((s13+m3_sq)/s13,-1._ki)-s23&
+ &*s13**2/(s13-s23)**4*zdilog((s23+m3_sq)/s23,-1._ki)-1._ki/6._ki&
+ &*m3_sq*(2._ki*m3_sq**2+6._ki*s13**2+3._ki*s23*m3_sq-6._ki*m3_sq&
+ &*s13)/(s13-s23)**4*z_log(m3_sq,-1._ki)+1._ki/6._ki*(4._ki*s23*m&
+ &3_sq*s13+11._ki*s23*s13**2+2._ki*m3_sq**3+2._ki*m3_sq*s13**2-2.&
+ &_ki*m3_sq**2*s13-m3_sq**2*s23)/(s13-s23)**4*z_log(-s13,-1._ki)-&
+ &1._ki/6._ki*(4._ki*s23*m3_sq*s13+11._ki*s23*s13**2-4._ki*m3_sq*&
+ &s13**2+4._ki*m3_sq**2*s13-4._ki*m3_sq**2*s23)/(s13-s23)**4*z_lo&
+ &g(-s23,-1._ki)+m3_sq*(s23*s13**2+m3_sq**3)/s13/(s13-s23)**4*q(1&
+ &,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki*(s23+m3_sq)*m3_sq**3*(s13+m&
+ &3_sq)**2/s13**3/(s13-s23)**4*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/6&
+ &._ki*m3_sq**2*(3._ki*s13-3._ki*s23-4._ki*m3_sq)/s23/(s13-s23)**&
+ &3*q(1,1._ki+m3_sq/s23,-sc23)+1._ki/2._ki*m3_sq**2*(s13+m3_sq)*(&
+ &s23*s13-2._ki*m3_sq**2-s23*m3_sq)/s13**2/(s13-s23)**4*q(2,1._ki&
+ &+m3_sq/s13,-sc13)+1._ki/6._ki/s23**2*m3_sq**3/(s13-s23)**2*q(2,&
+ &1._ki+m3_sq/s23,-sc23)-1._ki/36._ki/s13**2/s23*(11._ki*s23**4*s&
+ &13**2-66._ki*s23**3*s13**3-6._ki*s23**3*s13**2*m3_sq+33._ki*s23&
+ &**2*s13**4+6._ki*s23**2*m3_sq**4+12._ki*s23**2*s13**3*m3_sq+24.&
+ &_ki*s23**2*s13**2*m3_sq**2+22._ki*s13**5*s23-6._ki*s23*m3_sq*s1&
+ &3**4-18._ki*s23*m3_sq**4*s13+6._ki*s23*m3_sq**5-12._ki*s23*m3_s&
+ &q**2*s13**3+6._ki*m3_sq**2*s13**4)/(s13-s23)**4
+ !
+ c_temp_rat=-1._ki/36._ki*(22._ki*s23*s13**2+22._ki*m3_sq*s13**2+4&
+ &9._ki*s23*m3_sq*s13+55._ki*s23**2*s13-5._ki*s23**2*m3_sq-11._ki&
+ &*s23**3)/(s13-s23)**3/(s23+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 1) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/3._ki*(m3_sq**2+s23**2-s23*m3_sq)/(s13-s23)**3*z_log&
+ &(-s13,-1._ki)-1._ki/3._ki*(m3_sq**2+s23**2-s23*m3_sq)/(s13-s23)&
+ &**3*z_log(-s23,-1._ki)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_&
+ &sq**3/(s13-s23)**3+1._ki/3._ki/s13**3*(s23+m3_sq)**2*m3_sq**3/(&
+ &s13-s23)**3*q(3,1._ki+m3_sq/s13,-sc13)-1._ki/3._ki/s23*q(1,1._k&
+ &i+m3_sq/s23,-sc23)*m3_sq**3/(s13-s23)**3-1._ki/s13**2*(s23+m3_s&
+ &q)*m3_sq**3/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/6._ki&
+ &/s13**2*(s13**4+m3_sq*s13**3-4._ki*s23*s13**3+3._ki*s23**2*s13*&
+ &*2-3._ki*m3_sq**2*s13**2-s23**2*s13*m3_sq+4._ki*s23*m3_sq**2*s1&
+ &3+5._ki*m3_sq**3*s13-m3_sq**4-2._ki*s23*m3_sq**3-s23**2*m3_sq**&
+ &2)/(s13-s23)**3
+ !
+ c_temp_rat=1._ki/6._ki*s13*(s13**2+3._ki*m3_sq*s13-3._ki*s23*s13-&
+ &5._ki*s23*m3_sq)/(s13-s23)**2/(s13+m3_sq)**2
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/3._ki*(s13**2-m3_sq*s13+m3_sq**2)/(s13-s23)**3*z_log&
+ &(-s13,-1._ki)-1._ki/3._ki*(s13**2-m3_sq*s13+m3_sq**2)/(s13-s23)&
+ &**3*z_log(-s23,-1._ki)-1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q(&
+ &3,1._ki+m3_sq/s23,-sc23)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m&
+ &3_sq**3/(s13-s23)**3+1._ki/3._ki*m3_sq**3*(s13+m3_sq)**2/s13**3&
+ &/(s13-s23)**3*q(3,1._ki+m3_sq/s13,-sc13)-1._ki/3._ki/s23*q(1,1.&
+ &_ki+m3_sq/s23,-sc23)*m3_sq**3/(s13-s23)**3-m3_sq**3*(s13+m3_sq)&
+ &/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki/s23&
+ &**2*m3_sq**3/(s13-s23)**2*q(2,1._ki+m3_sq/s23,-sc23)-1._ki/6._k&
+ &i/s13**2/s23**2*(-s23*m3_sq*s13**4-m3_sq**2*s13**4+3._ki*s23**2&
+ &*s13**4-4._ki*s23**3*s13**3+4._ki*s23*m3_sq**2*s13**3+s23**3*s1&
+ &3**2*m3_sq+s23**4*s13**2-3._ki*s23**2*s13**2*m3_sq**2-3._ki*m3_&
+ &sq**3*s23**2*s13+s23**2*m3_sq**4)/(s13-s23)**3
+ !
+ c_temp_rat=-1._ki/6._ki*s23*(3._ki*s23*s13+5._ki*m3_sq*s13-s23**2&
+ &-3._ki*s23*m3_sq)/(s13-s23)**2/(s23+m3_sq)**2
+ !
+ else if ( (par1 == 1) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=-1._ki/6._ki*(-2._ki*m3_sq+s23)/(s13-s23)**2*z_log(-s13,-1&
+ &._ki)+1._ki/6._ki*(-2._ki*m3_sq+s23)/(s13-s23)**2*z_log(-s23,-1&
+ &._ki)+1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**&
+ &2+1._ki/3._ki/s13**3*(s23+m3_sq)/(s13-s23)**2*m3_sq**3*q(3,1._k&
+ &i+m3_sq/s13,-sc13)-1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(&
+ &s13-s23)**2*m3_sq**2-1._ki/2._ki*m3_sq**2*(s23+2._ki*m3_sq)/s13&
+ &**2/(s13-s23)**2*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/6._ki/s23**2*&
+ &m3_sq**3/(s13-s23)**2*q(2,1._ki+m3_sq/s23,-sc23)+1._ki/6._ki/s1&
+ &3**2/s23*(-s23**2*m3_sq**2-s23**2*s13**2+2._ki*s23**2*s13*m3_sq&
+ &+s23*s13**3+5._ki*s23*m3_sq**2*s13-s23*m3_sq**3-2._ki*s23*m3_sq&
+ &*s13**2-m3_sq**2*s13**2)/(s13-s23)**2
+ !
+ c_temp_rat=1._ki/6._ki*(s23*s13**2+m3_sq*s13**2-m3_sq**2*s13+m3_s&
+ &q**2*s23)/(s13-s23)/(s13+m3_sq)**2/(s23+m3_sq)
+ !
+ else if ( (par1 == 2) .and. (par2 == 3) .and. (par3 == 3) ) then
+ !
+ c_temp=1._ki/6._ki*(s13-2._ki*m3_sq)/(s13-s23)**2*z_log(-s13,-1._&
+ &ki)-1._ki/6._ki*(s13-2._ki*m3_sq)/(s13-s23)**2*z_log(-s23,-1._k&
+ &i)+1._ki/3._ki/s23**3*m3_sq**3/(s13-s23)*q(3,1._ki+m3_sq/s23,-s&
+ &c23)-1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**2&
+ &-1._ki/3._ki*m3_sq**3*(s13+m3_sq)/s13**3/(s13-s23)**2*q(3,1._ki&
+ &+m3_sq/s13,-sc13)+1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s&
+ &13-s23)**2*m3_sq**2+1._ki/2._ki*m3_sq**2*(s13+2._ki*m3_sq)/s13*&
+ &*2/(s13-s23)**2*q(2,1._ki+m3_sq/s13,-sc13)-1._ki/6._ki*m3_sq**2&
+ &*(m3_sq+3._ki*s13-3._ki*s23)/s23**2/(s13-s23)**2*q(2,1._ki+m3_s&
+ &q/s23,-sc23)-1._ki/6._ki/s13**2/s23**2*(-s23**3*s13**2+s23**2*s&
+ &13**3+4._ki*m3_sq**2*s23**2*s13-m3_sq**3*s23**2+2._ki*m3_sq*s23&
+ &**2*s13**2-2._ki*s23*m3_sq*s13**3-2._ki*s23*m3_sq**2*s13**2+m3_&
+ &sq**2*s13**3)/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/6._ki*(s23**2*s13+m3_sq**2*s13-m3_sq**2*s23+s23&
+ &**2*m3_sq)/(s23+m3_sq)**2/(s13-s23)/(s13+m3_sq)
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) .and. (par3 == 3) ) then
+ !
+ c_temp=-1._ki/6._ki*(2._ki*s23*s13-m3_sq*s13-s23*m3_sq+2._ki*m3_s&
+ &q**2)/(s13-s23)**3*z_log(-s13,-1._ki)+1._ki/6._ki*(2._ki*s23*s1&
+ &3-m3_sq*s13-s23*m3_sq+2._ki*m3_sq**2)/(s13-s23)**3*z_log(-s23,-&
+ &1._ki)-1._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_sq**3/(s13-s23)*&
+ &*3-1._ki/3._ki*(s13+m3_sq)*m3_sq**3*(s23+m3_sq)/s13**3/(s13-s23&
+ &)**3*q(3,1._ki+m3_sq/s13,-sc13)+1._ki/3._ki/s23*q(1,1._ki+m3_sq&
+ &/s23,-sc23)*m3_sq**3/(s13-s23)**3+1._ki/2._ki*m3_sq**3*(s13+s23&
+ &+2._ki*m3_sq)/s13**2/(s13-s23)**3*q(2,1._ki+m3_sq/s13,-sc13)-1.&
+ &_ki/6._ki/s23**2*m3_sq**3/(s13-s23)**2*q(2,1._ki+m3_sq/s23,-sc2&
+ &3)+1._ki/6._ki/s23/s13**2*(-s23**3*s13**2-m3_sq**2*s23**2*s13+2&
+ &._ki*m3_sq*s23**2*s13**2+m3_sq**3*s23**2-4._ki*s23*m3_sq**3*s13&
+ &-2._ki*s23*m3_sq*s13**3+s23*s13**4+s23*m3_sq**4+m3_sq**2*s13**3&
+ &)/(s13-s23)**3
+ !
+ c_temp_rat=1._ki/6._ki*(s23*s13**2+m3_sq*s13**2+s23**2*s13+s23**2&
+ &*m3_sq)/(s13-s23)**2/(s13+m3_sq)/(s23+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function a3p2m_1mi_c:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "unimplemented combination of feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ a3p2m_1mi_c=(/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ a3p2m_1mi_c=(/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ end function a3p2m_1mi_c
+ !
+ !
+ !****if* src/integral/three_point/function_3p2m_1mi/a3p2m_1mi_np2
+ ! NAME
+ !
+ ! Function a3p2m_1mi_np2
+ !
+ ! USAGE
+ !
+ ! real_dim2 = a3p2m_1mi_np2(s23,s13,m3_sq,par1,par2,par3)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the non divergent two off-shell external leg three point function in n+2 dimensions.
+ ! with up to one Feynman parameter in the numerator.
+ ! It retuns an array of 2 reals corresponding to the real/imaginary part of the
+ ! constant term.
+ !
+ ! INPUTS
+ !
+ ! * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter = 0
+ ! * par2 -- an integer, the label of the second Feynman parameter = 0
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real (type ki) array of rank 1 and shape 2 corresponding to
+ ! the real/imaginary part of the coefficient of the constant term. If par1 and/or par2
+ ! are different from zero, an error is returned.
+ !
+ ! EXAMPLE
+ !
+ !
+ !*****
+ function a3p2m_1mi_np2_r(s23,s13,m3_sq,par1,par2,par3)
+ !
+ real(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(2) :: a3p2m_1mi_np2_r
+ !
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: sc13,sc23
+ !
+ a3p2m_1mi_np2_r(:) = 0._ki
+ !
+ sc13=sign(un,s13+m3_sq)
+ !
+ sc23=sign(un,s23+m3_sq)
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ c_temp=1._ki/2._ki*(-s13+m3_sq)/(-s13+s23)*z_log(-s13,-1._ki)+1._&
+ &ki/2._ki*(-m3_sq+s23)/(-s13+s23)*z_log(-s23,-1._ki)+1._ki/2._ki&
+ &*m3_sq**2/s13/(-s13+s23)*q(1,1._ki+m3_sq/s13,-sc13)-3._ki/2._ki&
+ &-1._ki/2._ki*m3_sq**2/s23/(-s13+s23)*q(1,1._ki+m3_sq/s23,-sc23)
+ !
+ c_temp_rat=-3._ki/2._ki
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ a3p2m_1mi_np2_r = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ a3p2m_1mi_np2_r = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ !
+ if (par3 == 1) then
+ !
+ c_temp=-1._ki/6._ki*(-m3_sq*s23+m3_sq**2+2._ki*s13*s23-s13**2)/(s&
+ &13-s23)**2*z_log(-s13,-1._ki)+1._ki/6._ki*(-m3_sq*s23+m3_sq**2+&
+ &s23**2)/(s13-s23)**2*z_log(-s23,-1._ki)-1._ki/3._ki/s13*q(1,1._&
+ &ki+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**3+1._ki/6._ki/s13**2*(s&
+ &23+m3_sq)/(s13-s23)**2*m3_sq**3*q(2,1._ki+m3_sq/s13,-sc13)+1._k&
+ &i/6._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2*m3_sq**3-1.&
+ &_ki/18._ki*(3._ki*m3_sq**3+3._ki*s23*m3_sq**2-3._ki*s13*m3_sq**&
+ &2-3._ki*s23*s13*m3_sq+3._ki*m3_sq*s13**2-19._ki*s23*s13**2+11._&
+ &ki*s23**2*s13+8._ki*s13**3)/s13/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13**2-11._ki*s13*s23+11._ki*s13*&
+ &m3_sq-11._ki*m3_sq*s23)/(s13+m3_sq)/(s13-s23)
+ !
+ else if (par3 == 2) then
+ !
+ c_temp=1._ki/6._ki*(-s13*m3_sq+m3_sq**2+s13**2)/(s13-s23)**2*z_lo&
+ &g(-s13,-1._ki)-1._ki/6._ki*(2._ki*s13*s23-s23**2+m3_sq**2-s13*m&
+ &3_sq)/(s13-s23)**2*z_log(-s23,-1._ki)+1._ki/3._ki/s13*q(1,1._ki&
+ &+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**3-1._ki/6._ki*(s13+m3_sq)&
+ &*m3_sq**3/s13**2/(s13-s23)**2*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/&
+ &6._ki/s23**2/(s13-s23)*m3_sq**3*q(2,1._ki+m3_sq/s23,-sc23)-1._k&
+ &i/6._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2*m3_sq**3+1.&
+ &_ki/18._ki/s23/s13*(3._ki*m3_sq**3*s23+3._ki*s23*s13*m3_sq**2-3&
+ &._ki*m3_sq**2*s13**2+3._ki*m3_sq*s23*s13**2-3._ki*s23**2*s13*m3&
+ &_sq-8._ki*s23**3*s13-11._ki*s13**3*s23+19._ki*s23**2*s13**2)/(s&
+ &13-s23)**2
+ !
+ c_temp_rat=-1._ki/18._ki*(11._ki*s13*m3_sq-11._ki*m3_sq*s23-8._ki&
+ &*s23**2+11._ki*s13*s23)/(s13-s23)/(s23+m3_sq)
+ !
+ else if (par3 == 3) then
+ !
+ c_temp=-1._ki/6._ki*(-s13+2._ki*m3_sq)/(s13-s23)*z_log(-s13,-1._k&
+ &i)+1._ki/6._ki*(2._ki*m3_sq-s23)/(s13-s23)*z_log(-s23,-1._ki)-1&
+ &._ki/2._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_sq**2/(s13-s23)+1.&
+ &_ki/6._ki/s13**2/(s13-s23)*m3_sq**3*q(2,1._ki+m3_sq/s13,-sc13)-&
+ &1._ki/6._ki/s23**2/(s13-s23)*m3_sq**3*q(2,1._ki+m3_sq/s23,-sc23&
+ &)+1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)*m3_sq**2/(s13-s23)&
+ &+1._ki/18._ki*(3._ki*m3_sq**2-8._ki*s13*s23)/s13/s23
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13*m3_sq+8._ki*s13*s23+5._ki*m3_&
+ &sq**2+8._ki*m3_sq*s23)/(s23+m3_sq)/(s13+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function a3p2m_1mi_np2_r:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "unimplemented combination of feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ a3p2m_1mi_np2_r = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ a3p2m_1mi_np2_r = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a3p3m_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &'no need of 3-point integrals in 6 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = &
+ &'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function a3p2m_1mi_np2_r
+ !
+ function a3p2m_1mi_np2_c(s23,s13,m3_sq,par1,par2,par3)
+ !
+ complex(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ real(ki), dimension(2) :: a3p2m_1mi_np2_c
+ !
+ complex(ki) :: c_temp,c_temp_rat
+ real(ki) :: sc13,sc23
+ !
+ a3p2m_1mi_np2_c(:) = 0._ki
+ !
+ sc13=sign(un,real(s13+m3_sq,ki))
+ !
+ sc23=sign(un,real(s23+m3_sq,ki))
+ !
+ ! cas sans parametre de feynman au numerateur
+ if ( (par1 == 0) .and. (par2 == 0) .and. (par3 == 0) ) then
+ !
+ c_temp=1._ki/2._ki*(-s13+m3_sq)/(-s13+s23)*z_log(-s13,-1._ki)+1._&
+ &ki/2._ki*(-m3_sq+s23)/(-s13+s23)*z_log(-s23,-1._ki)+1._ki/2._ki&
+ &*m3_sq**2/s13/(-s13+s23)*q(1,1._ki+m3_sq/s13,-sc13)-3._ki/2._ki&
+ &-1._ki/2._ki*m3_sq**2/s23/(-s13+s23)*q(1,1._ki+m3_sq/s23,-sc23)
+ !
+ c_temp_rat=-3._ki/2._ki
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ a3p2m_1mi_np2_c = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ a3p2m_1mi_np2_c = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function a3p2m_1mi_np2_c:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "unimplemented combination of feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ ! cas avec un parametre de feynman au numerateur
+ else if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ !
+ if (par3 == 1) then
+ !
+ c_temp=-1._ki/6._ki*(-m3_sq*s23+m3_sq**2+2._ki*s13*s23-s13**2)/(s&
+ &13-s23)**2*z_log(-s13,-1._ki)+1._ki/6._ki*(-m3_sq*s23+m3_sq**2+&
+ &s23**2)/(s13-s23)**2*z_log(-s23,-1._ki)-1._ki/3._ki/s13*q(1,1._&
+ &ki+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**3+1._ki/6._ki/s13**2*(s&
+ &23+m3_sq)/(s13-s23)**2*m3_sq**3*q(2,1._ki+m3_sq/s13,-sc13)+1._k&
+ &i/6._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2*m3_sq**3-1.&
+ &_ki/18._ki*(3._ki*m3_sq**3+3._ki*s23*m3_sq**2-3._ki*s13*m3_sq**&
+ &2-3._ki*s23*s13*m3_sq+3._ki*m3_sq*s13**2-19._ki*s23*s13**2+11._&
+ &ki*s23**2*s13+8._ki*s13**3)/s13/(s13-s23)**2
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13**2-11._ki*s13*s23+11._ki*s13*&
+ &m3_sq-11._ki*m3_sq*s23)/(s13+m3_sq)/(s13-s23)
+ !
+ else if (par3 == 2) then
+ !
+ c_temp=1._ki/6._ki*(-s13*m3_sq+m3_sq**2+s13**2)/(s13-s23)**2*z_lo&
+ &g(-s13,-1._ki)-1._ki/6._ki*(2._ki*s13*s23-s23**2+m3_sq**2-s13*m&
+ &3_sq)/(s13-s23)**2*z_log(-s23,-1._ki)+1._ki/3._ki/s13*q(1,1._ki&
+ &+m3_sq/s13,-sc13)/(s13-s23)**2*m3_sq**3-1._ki/6._ki*(s13+m3_sq)&
+ &*m3_sq**3/s13**2/(s13-s23)**2*q(2,1._ki+m3_sq/s13,-sc13)+1._ki/&
+ &6._ki/s23**2/(s13-s23)*m3_sq**3*q(2,1._ki+m3_sq/s23,-sc23)-1._k&
+ &i/6._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)/(s13-s23)**2*m3_sq**3+1.&
+ &_ki/18._ki/s23/s13*(3._ki*m3_sq**3*s23+3._ki*s23*s13*m3_sq**2-3&
+ &._ki*m3_sq**2*s13**2+3._ki*m3_sq*s23*s13**2-3._ki*s23**2*s13*m3&
+ &_sq-8._ki*s23**3*s13-11._ki*s13**3*s23+19._ki*s23**2*s13**2)/(s&
+ &13-s23)**2
+ !
+ c_temp_rat=-1._ki/18._ki*(11._ki*s13*m3_sq-11._ki*m3_sq*s23-8._ki&
+ &*s23**2+11._ki*s13*s23)/(s13-s23)/(s23+m3_sq)
+ !
+ else if (par3 == 3) then
+ !
+ c_temp=-1._ki/6._ki*(-s13+2._ki*m3_sq)/(s13-s23)*z_log(-s13,-1._k&
+ &i)+1._ki/6._ki*(2._ki*m3_sq-s23)/(s13-s23)*z_log(-s23,-1._ki)-1&
+ &._ki/2._ki/s13*q(1,1._ki+m3_sq/s13,-sc13)*m3_sq**2/(s13-s23)+1.&
+ &_ki/6._ki/s13**2/(s13-s23)*m3_sq**3*q(2,1._ki+m3_sq/s13,-sc13)-&
+ &1._ki/6._ki/s23**2/(s13-s23)*m3_sq**3*q(2,1._ki+m3_sq/s23,-sc23&
+ &)+1._ki/2._ki/s23*q(1,1._ki+m3_sq/s23,-sc23)*m3_sq**2/(s13-s23)&
+ &+1._ki/18._ki*(3._ki*m3_sq**2-8._ki*s13*s23)/s13/s23
+ !
+ c_temp_rat=-1._ki/18._ki*(8._ki*s13*m3_sq+8._ki*s13*s23+5._ki*m3_&
+ &sq**2+8._ki*m3_sq*s23)/(s23+m3_sq)/(s13+m3_sq)
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function a3p2m_1mi_np2_c:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "unimplemented combination of feynman parameters"
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'par1=%d0, par2,par3 = %d1'
+ tab_erreur_par(3)%arg_int = par1
+ tab_erreur_par(3)%arg_int_tab = (/par2,par3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ if ( (rat_or_tot_par%tot_selected) ) then
+ !
+ a3p2m_1mi_np2_c = (/real(c_temp,ki),aimag(c_temp)/)
+ !
+ else !if ( (rat_or_tot_par%rat_selected) ) then
+ !
+ a3p2m_1mi_np2_c = (/real(c_temp_rat,ki),aimag(c_temp_rat)/)
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function a3p3m_np2:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ &'no need of 3-point integrals in 6 dimension &
+ &with more than one Feynman parameter in the numerator'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = &
+ &'The value of Feynman parameters in argument: %d1'
+ tab_erreur_par(3)%arg_int_tab = (/packb(par),3/)
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function a3p2m_1mi_np2_c
+ !
+ !
+ !****if* src/integral/three_point/function_3p2m_1mi/eval_numer_gi
+ ! NAME
+ !
+ ! Function eval_numer_gi
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gi(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This function is the integrand that will be computed numerically
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integral variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, use the values of the local (for this module) variables
+ ! eps_glob,s23_glob,s13_glob,s23_glob,par1_glob,par2_glob,par3_glob,dim_glob
+ ! and also the global variables alpha_par,beta_par and lambda_par given
+ ! by the module parametre (src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) which is the value of the
+ ! integrand at the value u
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gi(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gi
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ x = u
+ y = lambda_par*u**alpha_par*(1._ki-u)**beta_par
+ z = x - eps_glob*i_*y
+ jacob = 1._ki - eps_glob*i_*lambda_par*u**(alpha_par-1._ki)&
+ *(1._ki-u)**(beta_par-1._ki)*(alpha_par*(1._ki-u)-beta_par*u)
+ !
+ eval_numer_gi = fg(z,s23_glob,s13_glob,m3_sq_glob,&
+ & par1_glob,par2_glob,par3_glob,&
+ & dim_glob)
+ eval_numer_gi = eval_numer_gi*jacob
+ !
+ end function eval_numer_gi
+ !
+ !****if* src/integral/three_point/function_3p2m_1mi/fg
+ ! NAME
+ !
+ ! Function fg
+ !
+ ! USAGE
+ !
+ ! complex = fg(z,s23,s13,m3_sq,par1,par2,par3,dim)
+ !
+ ! DESCRIPTION
+ !
+ ! This function gives the structure of the integrand for the different cases
+ !
+ ! INPUTS
+ !
+ ! * z -- a complex (type ki), the integral variable
+ ! * s23 -- complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ ! * s13 -- complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ ! * m3_sq -- complex (type ki), the value of the internal mass squared
+ ! * par1 -- an integer, the label of the third Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! * par3 -- an integer, the label of the first Feynman parameter
+ ! * dim -- a character (length 3), to compute in n or n+2 dimensions,
+ ! the values are "ndi", "n+2"
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function fg(z,s23,s13,m3_sq,par1,par2,par3,dim)
+ !
+ complex(ki), intent (in) :: z
+ complex(ki), intent (in) :: s23,s13,m3_sq
+ integer, intent (in) :: par1,par2,par3
+ character (len=3) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(3) :: par
+ integer :: nb_par
+ complex(ki) :: d1_var,d2_var
+ !
+ par = (/par1,par2,par3/)
+ nb_par = count(mask=par/=0)
+ !
+ d1_var=-z*(s13-s23)-s23
+ !
+ d2_var=-z*(s13-s23)-s23-m3_sq
+ !
+ if (dim == "ndi") then
+ !
+ if (nb_par == 0) then
+ !
+ fg=log(d1_var)*m3_sq/d1_var/d2_var-log(m3_sq)*m3_sq/d1_var/d2_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=m3_sq/d1_var*z/d2_var-log(d1_var)*m3_sq**2/d1_var*z/d2_var**2+&
+ &log(m3_sq)*m3_sq**2/d1_var*z/d2_var**2+z/d1_var
+ !
+ case(2)
+ !
+ fg=m3_sq/d1_var/d2_var-log(d1_var)*m3_sq**2/d1_var/d2_var**2+log(&
+ &m3_sq)*m3_sq**2/d1_var/d2_var**2-m3_sq/d1_var*z/d2_var+log(d1_v&
+ &ar)*m3_sq**2/d1_var*z/d2_var**2-log(m3_sq)*m3_sq**2/d1_var*z/d2&
+ &_var**2-z/d1_var+1._ki/d1_var
+ !
+ case(3)
+ !
+ fg=-1._ki/d2_var+m3_sq*log(d1_var)/d2_var**2-m3_sq*log(m3_sq)/d2_&
+ &var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 2) then
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=1._ki/2._ki*m3_sq/d1_var*z**2/d2_var-m3_sq**2/d1_var*z**2/d2_v&
+ &ar**2+log(d1_var)*m3_sq**3/d1_var*z**2/d2_var**3-log(m3_sq)*m3_&
+ &sq**3/d1_var*z**2/d2_var**3+3._ki/2._ki*z**2/d1_var
+ !
+ case(2)
+ !
+ fg=log(d1_var)*m3_sq**3/d1_var*z/d2_var**3-log(m3_sq)*m3_sq**3/d1&
+ &_var*z/d2_var**3-log(d1_var)*m3_sq**3/d1_var*z**2/d2_var**3+log&
+ &(m3_sq)*m3_sq**3/d1_var*z**2/d2_var**3+1._ki/2._ki*m3_sq/d1_var&
+ &*z/d2_var-m3_sq**2/d1_var*z/d2_var**2-1._ki/2._ki*m3_sq/d1_var*&
+ &z**2/d2_var+m3_sq**2/d1_var*z**2/d2_var**2+3._ki/2._ki*z/d1_var&
+ &-3._ki/2._ki*z**2/d1_var
+ !
+ case(3)
+ !
+ fg=-1._ki/2._ki*z/d2_var+m3_sq*z/d2_var**2-m3_sq**2*log(d1_var)*z&
+ &/d2_var**3+m3_sq**2*log(m3_sq)*z/d2_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ fg=1._ki/2._ki*m3_sq/d1_var/d2_var-log(m3_sq)*m3_sq**3/d1_var/d2_&
+ &var**3-m3_sq/d1_var*z/d2_var+2._ki*m3_sq**2/d1_var*z/d2_var**2+&
+ &1._ki/2._ki*m3_sq/d1_var*z**2/d2_var-m3_sq**2/d1_var*z**2/d2_va&
+ &r**2+log(d1_var)*m3_sq**3/d1_var/d2_var**3-m3_sq**2/d1_var/d2_v&
+ &ar**2-2._ki*log(d1_var)*m3_sq**3/d1_var*z/d2_var**3+2._ki*log(m&
+ &3_sq)*m3_sq**3/d1_var*z/d2_var**3+log(d1_var)*m3_sq**3/d1_var*z&
+ &**2/d2_var**3-log(m3_sq)*m3_sq**3/d1_var*z**2/d2_var**3-3._ki*z&
+ &/d1_var+3._ki/2._ki*z**2/d1_var+3._ki/2._ki/d1_var
+ !
+ case(3)
+ !
+ fg=-1._ki/2._ki/d2_var+m3_sq/d2_var**2-m3_sq**2*log(d1_var)/d2_va&
+ &r**3+m3_sq**2*log(m3_sq)/d2_var**3+1._ki/2._ki*z/d2_var-m3_sq*z&
+ &/d2_var**2+m3_sq**2*log(d1_var)*z/d2_var**3-m3_sq**2*log(m3_sq)&
+ &*z/d2_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=-1._ki/2._ki/d2_var+m3_sq*log(d1_var)/d2_var**2-m3_sq*log(m3_s&
+ &q)/d2_var**2-m3_sq/d2_var**2+m3_sq**2*log(d1_var)/d2_var**3-m3_&
+ &sq**2*log(m3_sq)/d2_var**3
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par2 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else if (nb_par == 3) then
+ !
+ select case(par1)
+ !
+ case(1)
+ !
+ select case(par2)
+ !
+ case(1)
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=1._ki/3._ki*m3_sq/d1_var*z**3/d2_var-1._ki/2._ki*m3_sq**2/d1_v&
+ &ar*z**3/d2_var**2+m3_sq**3/d1_var*z**3/d2_var**3-log(d1_var)*m3&
+ &_sq**4/d1_var*z**3/d2_var**4+log(m3_sq)*m3_sq**4/d1_var*z**3/d2&
+ &_var**4+11._ki/6._ki*z**3/d1_var
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*m3_sq/d1_var*z**2/d2_var-1._ki/2._ki*m3_sq**2/d1_v&
+ &ar*z**2/d2_var**2+m3_sq**3/d1_var*z**2/d2_var**3-1._ki/3._ki*m3&
+ &_sq/d1_var*z**3/d2_var+1._ki/2._ki*m3_sq**2/d1_var*z**3/d2_var*&
+ &*2-m3_sq**3/d1_var*z**3/d2_var**3-log(d1_var)*m3_sq**4/d1_var*z&
+ &**2/d2_var**4+log(m3_sq)*m3_sq**4/d1_var*z**2/d2_var**4+log(d1_&
+ &var)*m3_sq**4/d1_var*z**3/d2_var**4-log(m3_sq)*m3_sq**4/d1_var*&
+ &z**3/d2_var**4+11._ki/6._ki*z**2/d1_var-11._ki/6._ki*z**3/d1_va&
+ &r
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki*z**2/d2_var+1._ki/2._ki*m3_sq*z**2/d2_var**2-m3_s&
+ &q**2*z**2/d2_var**3+m3_sq**3*log(d1_var)*z**2/d2_var**4-m3_sq**&
+ &3*log(m3_sq)*z**2/d2_var**4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ fg=1._ki/3._ki*m3_sq/d1_var*z/d2_var-1._ki/2._ki*m3_sq**2/d1_var*&
+ &z/d2_var**2+m3_sq**3/d1_var*z/d2_var**3-2._ki/3._ki*m3_sq/d1_va&
+ &r*z**2/d2_var+m3_sq**2/d1_var*z**2/d2_var**2-2._ki*m3_sq**3/d1_&
+ &var*z**2/d2_var**3+1._ki/3._ki*m3_sq/d1_var*z**3/d2_var-1._ki/2&
+ &._ki*m3_sq**2/d1_var*z**3/d2_var**2+m3_sq**3/d1_var*z**3/d2_var&
+ &**3-log(d1_var)*m3_sq**4/d1_var*z/d2_var**4+log(m3_sq)*m3_sq**4&
+ &/d1_var*z/d2_var**4+2._ki*log(d1_var)*m3_sq**4/d1_var*z**2/d2_v&
+ &ar**4-2._ki*log(m3_sq)*m3_sq**4/d1_var*z**2/d2_var**4-log(d1_va&
+ &r)*m3_sq**4/d1_var*z**3/d2_var**4+log(m3_sq)*m3_sq**4/d1_var*z*&
+ &*3/d2_var**4+11._ki/6._ki*z/d1_var-11._ki/3._ki*z**2/d1_var+11.&
+ &_ki/6._ki*z**3/d1_var
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki*z/d2_var+1._ki/2._ki*m3_sq*z/d2_var**2-m3_sq**2*z&
+ &/d2_var**3+m3_sq**3*log(d1_var)*z/d2_var**4-m3_sq**3*log(m3_sq)&
+ &*z/d2_var**4+1._ki/3._ki*z**2/d2_var-1._ki/2._ki*m3_sq*z**2/d2_&
+ &var**2+m3_sq**2*z**2/d2_var**3-m3_sq**3*log(d1_var)*z**2/d2_var&
+ &**4+m3_sq**3*log(m3_sq)*z**2/d2_var**4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=-1._ki/6._ki*z/d2_var+1._ki/2._ki*m3_sq*z/d2_var**2-m3_sq**2*l&
+ &og(d1_var)*z/d2_var**3+m3_sq**2*log(m3_sq)*z/d2_var**3+m3_sq**2&
+ &*z/d2_var**3-m3_sq**3*log(d1_var)*z/d2_var**4+m3_sq**3*log(m3_s&
+ &q)*z/d2_var**4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par2 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(2)
+ !
+ select case(par2)
+ !
+ case(2)
+ !
+ select case(par3)
+ !
+ case(2)
+ !
+ fg=-3._ki*log(d1_var)*m3_sq**4/d1_var*z**2/d2_var**4+3._ki*log(m3&
+ &_sq)*m3_sq**4/d1_var*z**2/d2_var**4+3._ki*log(d1_var)*m3_sq**4/&
+ &d1_var*z/d2_var**4-3._ki*log(m3_sq)*m3_sq**4/d1_var*z/d2_var**4&
+ &+m3_sq/d1_var*z**2/d2_var-1._ki/3._ki*m3_sq/d1_var*z**3/d2_var-&
+ &m3_sq/d1_var*z/d2_var-3._ki/2._ki*m3_sq**2/d1_var*z**2/d2_var**&
+ &2+1._ki/2._ki*m3_sq**2/d1_var*z**3/d2_var**2-m3_sq**3/d1_var*z*&
+ &*3/d2_var**3+log(d1_var)*m3_sq**4/d1_var*z**3/d2_var**4-log(m3_&
+ &sq)*m3_sq**4/d1_var*z**3/d2_var**4+3._ki*m3_sq**3/d1_var*z**2/d&
+ &2_var**3-3._ki*m3_sq**3/d1_var*z/d2_var**3+1._ki/3._ki*m3_sq/d1&
+ &_var/d2_var-1._ki/2._ki*m3_sq**2/d1_var/d2_var**2+m3_sq**3/d1_v&
+ &ar/d2_var**3+3._ki/2._ki*m3_sq**2/d1_var*z/d2_var**2-log(d1_var&
+ &)*m3_sq**4/d1_var/d2_var**4+log(m3_sq)*m3_sq**4/d1_var/d2_var**&
+ &4-11._ki/2._ki*z/d1_var+11._ki/2._ki*z**2/d1_var-11._ki/6._ki*z&
+ &**3/d1_var+11._ki/6._ki/d1_var
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki/d2_var+1._ki/2._ki*m3_sq/d2_var**2-m3_sq**2/d2_va&
+ &r**3+m3_sq**3*log(d1_var)/d2_var**4-m3_sq**3*log(m3_sq)/d2_var*&
+ &*4+2._ki/3._ki*z/d2_var-m3_sq*z/d2_var**2+2._ki*m3_sq**2*z/d2_v&
+ &ar**3-2._ki*m3_sq**3*log(d1_var)*z/d2_var**4+2._ki*m3_sq**3*log&
+ &(m3_sq)*z/d2_var**4-1._ki/3._ki*z**2/d2_var+1._ki/2._ki*m3_sq*z&
+ &**2/d2_var**2-m3_sq**2*z**2/d2_var**3+m3_sq**3*log(d1_var)*z**2&
+ &/d2_var**4-m3_sq**3*log(m3_sq)*z**2/d2_var**4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=-1._ki/6._ki/d2_var+1._ki/2._ki*m3_sq/d2_var**2-m3_sq**2*log(d&
+ &1_var)/d2_var**3+m3_sq**2*log(m3_sq)/d2_var**3+m3_sq**2/d2_var*&
+ &*3-m3_sq**3*log(d1_var)/d2_var**4+m3_sq**3*log(m3_sq)/d2_var**4&
+ &+1._ki/6._ki*z/d2_var-1._ki/2._ki*m3_sq*z/d2_var**2+m3_sq**2*lo&
+ &g(d1_var)*z/d2_var**3-m3_sq**2*log(m3_sq)*z/d2_var**3-m3_sq**2*&
+ &z/d2_var**3+m3_sq**3*log(d1_var)*z/d2_var**4-m3_sq**3*log(m3_sq&
+ &)*z/d2_var**4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par2 should be 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case(3)
+ !
+ select case(par2)
+ !
+ case(3)
+ !
+ select case(par3)
+ !
+ case(3)
+ !
+ fg=-1._ki/3._ki/d2_var+m3_sq*log(d1_var)/d2_var**2-m3_sq*log(m3_s&
+ &q)/d2_var**2-3._ki/2._ki*m3_sq/d2_var**2+2._ki*m3_sq**2*log(d1_&
+ &var)/d2_var**3-2._ki*m3_sq**2*log(m3_sq)/d2_var**3-m3_sq**2/d2_&
+ &var**3+m3_sq**3*log(d1_var)/d2_var**4-m3_sq**3*log(m3_sq)/d2_va&
+ &r**4
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par2 should be 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par2
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par1 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par1
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unexpected value for nb_par = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else if (dim == "n+2") then
+ !
+ if (nb_par == 0) then
+ !
+ fg=1._ki/2._ki*m3_sq**2*log(m3_sq)/d2_var**2-1._ki/2._ki*(m3_sq-d&
+ &2_var)*(m3_sq+d2_var)/d2_var**2*log(d1_var)+1._ki/2._ki*(m3_sq-&
+ &2._ki*d2_var)/d2_var
+ !
+ else if (nb_par == 1) then
+ !
+ select case(par3)
+ !
+ case(1)
+ !
+ fg=-1._ki/3._ki*m3_sq**3*log(m3_sq)*z/d2_var**3+1._ki/3._ki*log(d&
+ &1_var)/d2_var**3*(m3_sq+d2_var)*(m3_sq**2-m3_sq*d2_var+d2_var**&
+ &2)*z-1._ki/18._ki/d2_var**2*(-3._ki*m3_sq*d2_var+6._ki*m3_sq**2&
+ &+13._ki*d2_var**2)*z
+ !
+ case(2)
+ !
+ fg=-1._ki/3._ki*m3_sq**3*log(m3_sq)/d2_var**3*(1._ki-z)+1._ki/3._&
+ &ki*log(d1_var)/d2_var**3*(m3_sq+d2_var)*(m3_sq**2-m3_sq*d2_var+&
+ &d2_var**2)*(1._ki-z)-1._ki/18._ki/d2_var**2*(-3._ki*m3_sq*d2_va&
+ &r+6._ki*m3_sq**2+13._ki*d2_var**2)*(1._ki-z)
+ !
+ case(3)
+ !
+ fg=1._ki/6._ki*m3_sq**2*(3._ki*d2_var+2._ki*m3_sq)/d2_var**3*log(&
+ &m3_sq)-1._ki/6._ki*(2._ki*m3_sq-d2_var)*(m3_sq+d2_var)**2/d2_va&
+ &r**3*log(d1_var)+1._ki/18._ki*(6._ki*m3_sq*d2_var-5._ki*d2_var*&
+ &*2+6._ki*m3_sq**2)/d2_var**2
+ !
+ case default
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "par3 should be 1, 2 or 3 but is %d0"
+ tab_erreur_par(2)%arg_int = par3
+ call catch_exception(0)
+ !
+ stop
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "Unexpected value for nb_par = %d0"
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'in function fg:'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & "dim is %c0"
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ end function fg
+ !
+end module function_3p2m_1mi
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/cas_merdique.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/cas_merdique.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/cas_merdique.f90 (revision 119)
@@ -0,0 +1,761 @@
+module cas_merdique
+! ToDO :
+! 1) dans function_3p_finite, sumb devient NaN qd s3 et s_moins --->0
+! 2) faire la symetrisation pour le cas ou s2 et s1-s3, s1 et s2-s3 -->0
+! 3) rajouter les cas avec parameter de Feynman
+!
+ !
+ use precision_golem
+ use sortie_erreur
+ use constante
+ use parametre
+ use logarithme
+ use numerical_evaluation
+ use equal
+ implicit none
+ !
+ private
+ ! global variables to this module
+ complex(ki) :: b1_glob,b2_glob,b3_glob,sum_b_glob,b2pb3_glob,b2mb3_glob
+ complex(ki) :: be1_glob,ga1_glob,be2_glob,ga2_glob,be3_glob,ga3_glob
+ real(ki) :: al1_glob,al2_glob,al3_glob,smoins_glob
+ integer :: par1_glob,par2_glob,par3_glob
+ character (len=3) :: dim_glob
+ complex(ki) :: my_log_glob
+ logical :: s3_equal_zero_glob
+ logical :: test_b2_b3_glob
+ public crappy_case
+ !
+ contains
+ !
+ ! this is the case where m2s=m3s
+ function crappy_case(dim,s1,s2,s3,m1s,m2s,m3s,par1,par2,par3)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent(in) :: s1,s2,s3
+ complex(ki), intent(in) :: m1s,m2s,m3s
+ integer, intent (in) :: par1,par2,par3
+ complex(ki) :: crappy_case
+ !
+ !logical :: s3_equal_zero
+ real(ki) :: m1s_r,m2s_r,m3s_r
+ !
+ !write(*,*) 'MR: enter crappy . . . ',dim,s1,s2,s3,m1s,m2s,m3s,par1,par2,par3
+ m1s_r = real(m1s,ki)
+ m2s_r = real(m2s,ki)
+ m3s_r = real(m3s,ki)
+ !
+ if (equal_real(m2s_r,m3s_r)) then
+ !
+ if (equal_real(s3,zero)) then
+ !
+ crappy_case = case_s3_zero(dim,s1,s2,s3,m1s,m2s,m3s,par1,par2,par3)
+ !
+ else
+ !
+ crappy_case = case_s3_nonzero(dim,s1,s2,s3,m1s,m2s,m3s,par1,par2,par3)
+ !
+ end if
+ !
+ else if (equal_real(m1s_r,m2s_r)) then
+ !
+ if (equal_real(s2,zero)) then
+ !
+ crappy_case = case_s3_zero(dim,s3,s1,s2,m3s,m1s,m2s,par3,par1,par2)
+ !
+ else
+ !
+ crappy_case = case_s3_nonzero(dim,s3,s1,s2,m3s,m1s,m2s,par3,par1,par2)
+ !
+ end if
+ !
+ else if (equal_real(m3s_r,m1s_r)) then
+ !
+ if (equal_real(s1,zero)) then
+ !
+ crappy_case = case_s3_zero(dim,s2,s3,s1,m2s,m3s,m1s,par2,par3,par1)
+ !
+ else
+ !
+ crappy_case = case_s3_nonzero(dim,s2,s3,s1,m2s,m3s,m1s,par2,par3,par1)
+ !
+ end if
+ !
+ else
+
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (merdique):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected entry as no pair of equal masses'
+ call catch_exception(0)
+
+ !
+ end if
+ !
+ !
+ end function crappy_case
+ !
+ function case_s3_zero(dim,s1,s2,s3,m1s,m2s,m3s,par1,par2,par3)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent(in) :: s1,s2,s3
+ complex(ki), intent(in) :: m1s,m2s,m3s
+ integer, intent (in) :: par1,par2,par3
+ complex(ki) :: case_s3_zero
+ !
+ real(ki) :: splus,smoins,c,rs3,si_s3,si_smoins
+ complex(ki) :: resto,abserro
+ complex(ki) :: b1_bar_mod,b2_bar_mod,b3_bar_mod,det_s_mod
+ real(ki) :: det_g_mod
+ !
+ splus = s1+s2
+ smoins = s1-s2
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ !
+ b1_bar_mod = 0._ki
+ b2_bar_mod = s1*(-smoins) + (m1s-m3s)*(smoins)
+ b3_bar_mod = s2*(smoins) + (m1s-m3s)*(-smoins)
+ !
+ det_s_mod = 2._ki*( smoins**2*m3s )
+ det_g_mod = -(smoins**2)
+ !
+ sum_b_glob = -1._ki/2._ki/m3s
+ b1_glob = 0._ki
+ b2_glob = (m1s-m3s-s1)/2._ki/m3s
+ b3_glob = (s2-m1s+m3s)/2._ki/m3s
+ b2pb3_glob = sum_b_glob
+ b2mb3_glob = (-splus+2._ki*(m1s-m3s))/2._ki/m3s
+ smoins_glob = smoins
+ !write(*,*) 'test crappy_case zero :',sum_b_glob,b1_glob,b2_glob,b3_glob
+ !
+ al1_glob = 0._ki
+ be1_glob = 0._ki
+ ga1_glob = m3s
+ al2_glob = s1
+ be2_glob = -s1+m3s-m1s
+ ga2_glob = m1s
+ al3_glob = s2
+ be3_glob = -s2+m3s-m1s
+ ga3_glob = m1s
+ !
+ if (equal_real(aimag(sum_b_glob),zero)) then
+ my_log_glob = z_log(-0.5_ki/sum_b_glob,-1._ki)
+ else
+ my_log_glob = log(-0.5_ki/sum_b_glob)
+ end if
+ call generic_eval_numer(eval_numer_g1,0._ki,1._ki,tolerance,resto,abserro)
+ case_s3_zero = resto
+ !
+ end function case_s3_zero
+ !
+ function case_s3_nonzero(dim,s1,s2,s3,m1s,m2s,m3s,par1,par2,par3)
+ !
+ character (len=3), intent (in) :: dim
+ real(ki), intent(in) :: s1,s2,s3
+ complex(ki), intent(in) :: m1s,m2s,m3s
+ integer, intent (in) :: par1,par2,par3
+ complex(ki) :: case_s3_nonzero
+ !
+ real(ki) :: splus,smoins,c,rs3,si_s3,si_smoins,as3
+ complex(ki) :: resto,abserro
+ complex(ki) :: b1_bar_mod,b2_bar_mod,b3_bar_mod,det_s_mod
+ complex(ki) :: b2_bar,b3_bar
+ real(ki) :: det_g_mod
+ !
+ splus = s1+s2
+ smoins = s1-s2
+ !
+ dim_glob = dim
+ par1_glob = par1
+ par2_glob = par2
+ par3_glob = par3
+ !
+ ! we are looking for the case where
+ ! smoins small => s1 and s2 have the same sign
+ ! det_g small and s3 => smoins**2 = s3*(2*splus-s3)
+ ! s3 has the same sign as splus
+ as3 = abs(s3)
+ rs3 = sqrt(as3)
+ si_s3 = sign(un,s3)
+ si_smoins = sign(un,smoins)
+ b2_bar = s1*(s3-smoins)+(m1s-m3s)*(s3+smoins)
+ b3_bar = s2*(s3+smoins)+(m1s-m3s)*(s3-smoins)
+ test_b2_b3_glob = of_order_of(abs(b2_bar)/abs(b3_bar),1._ki)
+ !
+ if (test_b2_b3_glob) then
+ !
+ c = abs(smoins)/rs3
+ !
+ !b1_bar_mod = s3*(splus-s3+2._ki*(m3s-m1s))
+ b1_bar_mod = si_s3*(splus-s3+2._ki*(m3s-m1s))
+ !b2_bar_mod = rs3*( s1*(si_s3*rs3-si_smoins*c) + (m1s-m3s)*(si_s3*rs3+si_smoins*c) )
+ b2_bar_mod = s1*(si_s3*rs3-si_smoins*c) + (m1s-m3s)*(si_s3*rs3+si_smoins*c)
+ !b3_bar_mod = rs3*( s2*(si_s3*rs3+si_smoins*c) + (m1s-m3s)*(si_s3*rs3-si_smoins*c) )
+ b3_bar_mod = s2*(si_s3*rs3+si_smoins*c) + (m1s-m3s)*(si_s3*rs3-si_smoins*c)
+ !
+ !det_s_mod = 2._ki*abs(s3)*( c**2*m3s + abs(s3)*m1s + si_s3*(s1*s2-splus*(m1s+m3s)+(m3s-m1s)**2) )
+ det_s_mod = 2._ki*( c**2*m3s + abs(s3)*m1s + si_s3*(s1*s2-splus*(m1s+m3s)+(m3s-m1s)**2) )
+ !det_g_mod = -abs(s3)*(c**2-2._ki*splus*si_s3+abs(s3))
+ det_g_mod = -(c**2-2._ki*splus*si_s3+abs(s3))
+ !
+ sum_b_glob = det_g_mod/det_s_mod
+ b1_glob = b1_bar_mod/det_s_mod
+ b2_glob = si_smoins*c*b2_bar_mod/det_s_mod
+ b3_glob = si_smoins*c*b3_bar_mod/det_s_mod
+ b2pb3_glob = (si_s3*(splus+2._ki*(m1s-m3s))-c*c)/det_s_mod
+ b2mb3_glob = c*c*(si_s3*as3-splus+2._ki*(m1s-m3s))/det_s_mod
+ !
+ else
+ !
+ c = abs(smoins)/as3
+ !
+ !b1_bar_mod = s3*(splus-s3+2._ki*(m3s-m1s))
+ b1_bar_mod = si_s3*(splus-s3+2._ki*(m3s-m1s))
+ !
+ det_s_mod = 2._ki*( c**2*m3s*as3 + as3*m1s + si_s3*(s1*s2-splus*(m1s+m3s)+(m3s-m1s)**2) )
+ det_g_mod = -(c**2*as3-2._ki*splus*si_s3+as3)
+ !
+ sum_b_glob = det_g_mod/det_s_mod
+ b1_glob = b1_bar_mod/det_s_mod
+ b2pb3_glob = (si_s3*(splus+2._ki*(m1s-m3s))-c*c*as3)/det_s_mod
+ !b2mb3_glob = c*c*as3*(si_s3*as3-splus+2._ki*(m1s-m3s))/det_s_mod
+ b2mb3_glob = si_smoins*c*(si_s3*as3-splus+2._ki*(m1s-m3s))/det_s_mod
+ !
+ end if
+ smoins_glob = smoins
+ !write(*,*) 'test crappy_case non zero:',sum_b_glob,b1_glob,b2_glob,b3_glob
+ !write(*,*) 'test crappy_case non zero:',test_b2_b3_glob,b2_bar,b3_bar
+ !write(*,*) 'test crappy_case non zero 55:',c,splus,m3s,m1s,det_s_mod,det_g_mod
+ !write(*,*) 'test crappy_case non zero 66:',(m1s-m3s)*(si_s3*rs3+si_smoins*c),(m1s-m3s)*(si_s3*rs3-si_smoins*c)
+ !write(*,*) 'test crappy case non zero 77:',s1*(si_s3*rs3-si_smoins*c),s2*(si_s3*rs3+si_smoins*c)
+ !
+ al1_glob = s3
+ be1_glob = -s3
+ ga1_glob = m3s
+ al2_glob = s1
+ be2_glob = -s1+m3s-m1s
+ ga2_glob = m1s
+ !al3_glob = s2
+ !be3_glob = -s2+m1s-m3s
+ !ga3_glob = m3s
+ al3_glob = s2
+ be3_glob = -s2+m3s-m1s
+ ga3_glob = m1s
+ !
+ if (equal_real(aimag(sum_b_glob),zero)) then
+ my_log_glob = z_log(-0.5_ki/sum_b_glob,-1._ki)
+ else
+ my_log_glob = log(-0.5_ki/sum_b_glob)
+ end if
+ !
+ if (test_b2_b3_glob) then
+ !
+ !write(*,*) 'on est passe par la'
+ call generic_eval_numer(eval_numer_g2,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ else
+ !
+ !write(*,*) 'ou encore par la'
+ call generic_eval_numer(eval_numer_g3,0._ki,1._ki,tolerance,resto,abserro)
+ !
+ end if
+ !
+ case_s3_nonzero = resto
+ !
+ end function case_s3_nonzero
+ !
+ function eval_numer_g1(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_g1
+ !
+ !real(ki) :: x,y
+ !complex(ki) :: z1,jacob1
+ !complex(ki) :: z2,jacob2
+ !
+ eval_numer_g1 = ( &
+ &+log_quad(al2_glob,be2_glob,ga3_glob,2,par1_glob,par2_glob,par3_glob,dim_glob,1,u) &
+ &+log_quad(al3_glob,be3_glob,ga3_glob,3,par1_glob,par2_glob,par3_glob,dim_glob,1,u) &
+ &+special_log(al3_glob,be3_glob,ga3_glob,4,par1_glob,par2_glob,par3_glob,dim_glob,1,u) &
+ & +rat_part(par1_glob,par2_glob,par3_glob,dim_glob,1,u))
+ !&)
+ !write(*,*) 'test eval_numer_g1 :',eval_numer_g1
+ !
+ end function eval_numer_g1
+ !
+ function eval_numer_g2(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_g2
+ !
+ eval_numer_g2 = ( &
+ &+log_quad(al1_glob,be1_glob,ga1_glob,1,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ &+log_quad(al2_glob,be2_glob,ga3_glob,2,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ &+log_quad(al3_glob,be3_glob,ga3_glob,3,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ &+special_log(al3_glob,be3_glob,ga3_glob,4,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ & +rat_part(par1_glob,par2_glob,par3_glob,dim_glob,2,u))
+ !
+ end function eval_numer_g2
+ !
+ function eval_numer_g3(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_g3
+ !
+ eval_numer_g3 = ( &
+ &+log_quad(al1_glob,be1_glob,ga1_glob,1,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ &+log_quad(al2_glob,be2_glob,ga3_glob,2,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ &+log_quad(al3_glob,be3_glob,ga3_glob,3,par1_glob,par2_glob,par3_glob,dim_glob,2,u) &
+ & +rat_part(par1_glob,par2_glob,par3_glob,dim_glob,2,u))
+ !
+ end function eval_numer_g3
+ !
+ ! integrale du type :
+ ! g(u)*log(a*u^2+b*u+c-i*lamb)/D(u)
+ ! lorsque z = u + i*f(u)*eps, la partie imaginaire de l'argument du log
+ ! est : (2*a*u+b)*eps*u*f(u) - lamb
+ ! 2*a*u+b > 0 si u > \Sigma et a > 0 ou u < \Sigma et a < 0
+ ! 2*a*u+b < 0 si u > \Sigma et a < 0 ou u < \Sigma et a > 0
+ ! il faut donc que eps*f(u) soit de signe oppose a 2*a*u+b
+ ! Or le Re(pole) est dehors de [0,1], donc seule la coupure du log importe
+ ! Ca marche aussi si nous avons des masses imaginaires : dans ce cas
+ ! la partie imaginaire de l'argument du log devient:
+ ! (2*a*u+Re(b))*eps*u*f(u) + Im(b)*u+Im(c)
+ ! Mais les masses internes ont toutes des parties imaginaires de meme signe (<0)
+ ! donc Im(b)*u+Im(c) est < 0 quand u varie entre 0 et 1, on est donc
+ ! ramene au cas precedent
+ !
+ function log_quad(a,b,c,flag,par1,par2,par3,dim,cas,u)
+ !
+ real(ki), intent(in) :: a
+ complex(ki), intent(in) :: b,c
+ real(ki), intent(in) :: u
+ integer, intent(in) :: flag,cas
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: log_quad
+ !
+ real(ki) :: small
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ real(ki) :: sigma
+ complex(ki) :: my_log
+ !
+ sigma = -real(b,ki)/a/2._ki
+ !
+ x = u
+ !
+ if ( (sigma <= 1._ki) .and. (sigma >= 0._ki) ) then
+ !
+ y = lambda_par*sign(un,a)*u*(u-1._ki)*(u-sigma)
+ z = x + i_*y
+ jacob = 1._ki + i_*lambda_par*sign(un,a)*( (u-1._ki)*(u-sigma) + u*(u-1._ki) + u*(u-sigma) )
+ !
+ else
+ !
+ y = lambda_par*sign(un,a*sigma)*u*(u-1._ki)
+ z = x - i_*y
+ jacob = 1._ki - i_*lambda_par*sign(un,a*sigma)*( (u-1._ki) + u )
+ !
+ end if
+ !
+ if (test_b2_b3_glob) then
+ !
+ log_quad = ( (log(a*z*z+b*z+c)-my_log_glob)*fg(z,flag,par1,par2,par3,dim,cas) )*jacob
+ !if (abs((log(a*z*z+b*z+c)-my_log_glob)*fg(z,flag,par1,par2,par3,dim,cas)) >= 100000._ki) then
+ !write(*,*) 'test log_quad :',log(a*z*z+b*z+c),my_log_glob,fg(z,flag,par1,par2,par3,dim,cas)
+ !write(*,*) 'test log_quad :',z,-b/2._ki/a
+ !end if
+ !
+ else
+ !
+ log_quad = ( (log(a*z*z+b*z+c)-my_log_glob)*fgp(z,flag,par1,par2,par3,dim,cas) )*jacob
+ !
+ end if
+ !write(*,*) 'test log_quad :',fg(z,flag,par1,par2,par3,dim,cas)
+ !
+ !
+ end function log_quad
+ !
+ function special_log(a,b,c,flag,par1,par2,par3,dim,cas,u)
+ !
+ real(ki), intent(in) :: a
+ complex(ki), intent(in) :: b,c
+ real(ki), intent(in) :: u
+ integer, intent(in) :: flag,cas
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: special_log
+ !
+ real(ki) :: small
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ real(ki) :: sigma
+ complex(ki) :: arg_log,coef_log
+ !
+ !
+ !small = delta_glob
+ !
+ sigma = -real(b,ki)/a/2._ki
+ !
+ x = u
+ !
+ if ( (sigma <= 1._ki) .and. (sigma >= 0._ki) ) then
+ !
+ y = lambda_par*sign(un,a)*u*(u-1._ki)*(u-sigma)
+ z = x + i_*y
+ jacob = 1._ki + i_*lambda_par*sign(un,a)*( (u-1._ki)*(u-sigma) + u*(u-1._ki) + u*(u-sigma) )
+ !
+ else
+ !
+ y = lambda_par*sign(un,a*sigma)*u*(u-1._ki)
+ z = x - i_*y
+ jacob = 1._ki - i_*lambda_par*sign(un,a*sigma)*( (u-1._ki) + u )
+ !
+ end if
+ !
+ arg_log = z*(1._ki-z)*smoins_glob/(a*z*z+b*z+c)
+ if (abs(arg_log) <= 1.e-8) then
+ coef_log = q(1,arg_log,sign(un,smoins_glob))*z*(1._ki-z)/(a*z*z+b*z+c)
+ else
+ coef_log = log(1._ki - arg_log)/smoins_glob
+ end if
+ !write(*,*) 'test special_log :',arg_log,coef_log
+ !
+ special_log = ( coef_log*fg(z,flag,par1,par2,par3,dim,cas) )*jacob
+ !
+ !
+ end function special_log
+ !
+ !
+ function rat_part(par1,par2,par3,dim,cas,u)
+ !
+ real(ki), intent(in) :: u
+ integer, intent (in) :: par1,par2,par3,cas
+ character (len=3), intent (in) :: dim
+ complex(ki) :: rat_part
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ !
+ ! for this part, the sign of the contour does matter
+ ! because there is no pole in it
+ !
+ x = u
+ y = lambda_par*u*(u-1._ki)
+ z = x - i_*y
+ jacob = 1._ki - i_*lambda_par*( (u-1._ki) + u )
+ !
+ rat_part = fg(z,5,par1,par2,par3,dim,cas)*jacob
+ !rat_part = jacob
+ !
+ end function rat_part
+ !
+ function fg(z,flag,par1,par2,par3,dim,cas)
+ !
+ complex(ki), intent(in) :: z
+ integer, intent(in) :: flag,cas
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: fg
+ !
+ integer, dimension(3) :: par
+ integer :: nb_par
+ complex(ki) :: g1,g2,g3
+ complex(ki) :: den1,den2,den3,g2mg3_mod
+ !
+ complex(ki) ::&
+ &tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7,tmp8,tmp9,tmp10,&
+ &tmp11,tmp12,tmp13,tmp14,tmp15,tmp16,tmp17,tmp18,tmp19,tmp20,&
+ &tmp21,tmp22,tmp23,tmp24,tmp25,tmp26,tmp27,tmp28,tmp29,tmp30,&
+ &tmp31,tmp32,tmp33,tmp34,tmp35,tmp36,tmp37,tmp38,tmp39,tmp40,&
+ &tmp41,tmp42,tmp43,tmp44,tmp45,tmp46,tmp47,tmp48,tmp49,tmp50,&
+ &tmp51,tmp52,tmp53,tmp54,tmp55,tmp56,tmp57,tmp58,tmp59,tmp60,&
+ &tmp61,tmp62
+ !
+ !write(6,*) "MR: merdique fg ",z,flag,par1,par2,par3,dim
+
+ par = (/par1,par2,par3/)
+ nb_par = count(mask=par/=0)
+ !
+ g1 = al1_glob*z*z+be1_glob*z+ga1_glob
+ g2 = al2_glob*z*z+be2_glob*z+ga2_glob
+ g3 = al3_glob*z*z+be3_glob*z+ga3_glob
+ !g3 = al3_glob*(1._ki-z)**2+be3_glob*(1._ki-z)+ga3_glob
+ ! g2mg3_mod is (g2(z)-g3(z))/smoins = z*(z-1)
+ g2mg3_mod = z*(z-1._ki)
+ !
+ den1 = 2._ki*sum_b_glob*g1+1._ki
+ den2 = 2._ki*sum_b_glob*g2+1._ki
+ den3 = 2._ki*sum_b_glob*g3+1._ki
+ !
+ if (dim == "ndi") then
+ !
+ if (nb_par == 0) then
+ !
+ select case (flag)
+ !
+ case(1)
+ !
+ select case (cas)
+ !
+ case(1)
+ !
+ fg = 0._ki
+ !
+ case(2)
+ !
+ fg = -b1_glob/den1
+ !
+ end select
+ !
+ case(2)
+ !
+ !fg = b2_glob*sum_b_glob*g2mg3_mod/den2/den3
+ !fg = -b3_glob*sum_b_glob*g2mg3_mod/den2/den3
+ fg = (b2pb3_glob - b2mb3_glob*g2mg3_mod*sum_b_glob/den3)/den2/2._ki
+ !
+ case(3)
+ !
+ !fg = -(-b2_glob*sum_b_glob*g2mg3_mod/den2 + (sum_b_glob-b1_glob) )/den3
+ !fg = -(b3_glob*sum_b_glob*g2mg3_mod/den3 + (sum_b_glob-b1_glob) )/den2
+ fg = (b2pb3_glob - b2mb3_glob*g2mg3_mod*sum_b_glob/den2)/den3/2._ki
+ !
+ case(4)
+ !
+ !fg = -b2_glob/2._ki*(1._ki/den2+1._ki/den3)
+ !fg = -b3_glob/2._ki*(1._ki/den2+1._ki/den3)
+ fg = b2mb3_glob/4._ki*(1._ki/den2+1._ki/den3)
+ !
+ case(5)
+ !
+ fg = 0._ki
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (merdique):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ end if
+ !
+ else if (dim == "n+2") then
+ !
+ if (nb_par == 0) then
+ !
+ select case (flag)
+ !
+ case(1)
+ !
+ select case (cas)
+ !
+ case(1)
+ !
+ fg = 0._ki
+ !
+ case(2)
+ !
+ fg = b1_glob*g1/den1
+ !
+ end select
+ !
+ case(2)
+ !
+ fg = (b2pb3_glob*g2 + b2mb3_glob/2._ki*g2mg3_mod/den3)/den2/2._ki
+ !
+ case(3)
+ !
+ fg = (b2pb3_glob*g3 + b2mb3_glob/2._ki*g2mg3_mod/den2)/den3/2._ki
+ !
+ case(4)
+ !
+ fg = b2mb3_glob/4._ki*(g2/den2+g3/den3)
+ !
+ case(5)
+ !
+ fg = -1._ki/2._ki + my_log_glob/2._ki
+ !
+ end select
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (cas_merdique.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (cas_merdique.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for dim = %c0'
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ !write(6,*) "MR: exit merdique fg ",fg
+
+ end function fg
+ !
+ !
+ function fgp(z,flag,par1,par2,par3,dim,cas)
+ !
+ complex(ki), intent(in) :: z
+ integer, intent(in) :: flag,cas
+ integer, intent (in) :: par1,par2,par3
+ character (len=3), intent (in) :: dim
+ complex(ki) :: fgp
+ !
+ integer, dimension(3) :: par
+ integer :: nb_par
+ complex(ki) :: g1,g2,g3
+ complex(ki) :: den1,den2,den3,g2mg3_mod
+ !
+ complex(ki) ::&
+ &tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7,tmp8,tmp9,tmp10,&
+ &tmp11,tmp12,tmp13,tmp14,tmp15,tmp16,tmp17,tmp18,tmp19,tmp20,&
+ &tmp21,tmp22,tmp23,tmp24,tmp25,tmp26,tmp27,tmp28,tmp29,tmp30,&
+ &tmp31,tmp32,tmp33,tmp34,tmp35,tmp36,tmp37,tmp38,tmp39,tmp40,&
+ &tmp41,tmp42,tmp43,tmp44,tmp45,tmp46,tmp47,tmp48,tmp49,tmp50,&
+ &tmp51,tmp52,tmp53,tmp54,tmp55,tmp56,tmp57,tmp58,tmp59,tmp60,&
+ &tmp61,tmp62
+ !
+ !write(6,*) "MR: merdique fg ",z,flag,par1,par2,par3,dim
+
+ par = (/par1,par2,par3/)
+ nb_par = count(mask=par/=0)
+ !
+ g1 = al1_glob*z*z+be1_glob*z+ga1_glob
+ g2 = al2_glob*z*z+be2_glob*z+ga2_glob
+ g3 = al3_glob*z*z+be3_glob*z+ga3_glob
+ !g3 = al3_glob*(1._ki-z)**2+be3_glob*(1._ki-z)+ga3_glob
+ ! g2mg3_mod is (g2(z)-g3(z))/smoins = z*(z-1)
+ g2mg3_mod = z*(z-1._ki)
+ !
+ den1 = 2._ki*sum_b_glob*g1+1._ki
+ den2 = 2._ki*sum_b_glob*g2+1._ki
+ den3 = 2._ki*sum_b_glob*g3+1._ki
+ !
+ if (dim == "ndi") then
+ !
+ if (nb_par == 0) then
+ !
+ select case (flag)
+ !
+ case(1)
+ !
+ select case (cas)
+ !
+ case(1)
+ !
+ fgp = 0._ki
+ !
+ case(2)
+ !
+ fgp = -b1_glob/den1
+ !
+ end select
+ !
+ case(2)
+ !
+ !fgp = b2_glob*sum_b_glob*g2mg3_mod/den2/den3
+ fgp = -(b2pb3_glob + b2mb3_glob)/den2/2._ki
+ !
+ case(3)
+ !
+ !fgp = -(-b2_glob*sum_b_glob*g2mg3_mod/den2 + (sum_b_glob-b1_glob) )/den3
+ fgp = -(b2pb3_glob - b2mb3_glob)/den3/2._ki
+ !
+ end select
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fgp (merdique):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ end if
+ !
+ else if (dim == "n+2") then
+ !
+ if (nb_par == 0) then
+ !
+ select case (flag)
+ !
+ case(1)
+ !
+ select case (cas)
+ !
+ case(1)
+ !
+ fgp = 0._ki
+ !
+ case(2)
+ !
+ fgp = b1_glob*g1/den1
+ !
+ end select
+ !
+ case(2)
+ !
+ fgp = (b2pb3_glob + b2mb3_glob)*g2/den2/2._ki
+ !
+ case(3)
+ !
+ fgp = (b2pb3_glob - b2mb3_glob)*g3/den3/2._ki
+ !
+ end select
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (cas_merdique.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for nb_par = %d0'
+ tab_erreur_par(2)%arg_int = nb_par
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function fg (cas_merdique.f90):'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = &
+ & 'Unexpected value for dim = %c0'
+ tab_erreur_par(2)%arg_char = dim
+ call catch_exception(0)
+ !
+ stop
+ !
+ end if
+ !
+ !write(6,*) "MR: exit merdique fg ",fg
+
+ end function fgp
+ !
+end module cas_merdique
Index: 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_gn.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_gn.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/three_point/mod_gn.f90 (revision 119)
@@ -0,0 +1,846 @@
+!
+!****h* src/integrals/three_point/func_gn
+! NAME
+!
+! Module func_gn
+!
+! USAGE
+!
+! use func_gn
+!
+! DESCRIPTION
+!
+! This module contains several functions for the computation of
+! int^1_0 dx x^(n-1)*ln(a*x^2+b*x+c-i*lambda)/(a*x^2+b*x+c-i*lambda)
+! where a, b and c are real numbers
+!
+! OUTPUT
+!
+! This modules exports three functions:
+! * ge -- a function
+! * gl -- a function
+! * gf -- a function
+!
+! USES
+!
+! * precision_golem (src/module/precision.f90)
+! * numerical_evaluation (src/numerical/mod_numeric.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90) only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+! * parametre (src/module/parametre.f90)
+! * logarithme (src/module/z_log.f90)
+! * dilogarithme (src/module/zdilog.f90)
+! * constante (src/module/constante.f90) only : i_,un,pi
+!
+!*****
+module func_gn
+ !
+ use precision_golem
+ use numerical_evaluation
+ use sortie_erreur, only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ use parametre
+ use logarithme
+ use dilogarithme
+ use constante, only : i_,un,pi
+ implicit none
+ !
+ private
+ real(ki) :: a_glob,b_glob,c_glob
+ real(ki) :: lm_glob
+ real(ki) :: lambda_glob
+ integer :: expo_glob
+ logical :: dist_glob
+ public :: gf,ge,gl
+ !
+ contains
+ !
+ !****f* src/integrals/three_point/func_gn/ge
+ ! NAME
+ !
+ ! Function ge
+ !
+ ! USAGE
+ !
+ ! real_dim2 = ge(n,a,b,c,dist)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! int^1_0 dx x^(n-1)/(a*x^2+b*x+c-i*lambda)
+ ! where a, b and c are reals
+ ! It switches to numerical evaluation if
+ ! (b^2-4*a*c) < coupure_3p1m_2mi
+ ! Around the Landau pole, the divergent part is extracted analytically,
+ ! only the rest is computed numerically
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of x in the integrand
+ ! * a -- a real (type ki), coefficient of x^2
+ ! * b -- a real (type ki), coefficient of x^1
+ ! * c -- a real (type ki), coefficient of x^0
+ ! * dist -- a logical, true if we are close to the real threshold
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variables
+ ! rat_or_tot_par, coupure_3p1m_2mi
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function ge(n,ax,bx,cx,dist)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: ax,bx,cx
+ logical, intent(in) :: dist
+ real(ki), dimension(2) :: ge
+ !
+ real(ki) :: a,b,c
+ complex(ki) :: veri,veri_rat,rest,abserr
+ real(ki) :: x1,x2,deltax
+ complex(ki) :: cx1,cx2,cdeltax
+ real(ki) :: delta
+ complex(ki) :: div_part
+ real(ki) :: coeff
+ complex(ki) :: extra_part,integ1
+ real(ki) :: plus_grand
+ !
+ plus_grand = max(abs(ax),abs(bx),abs(cx))
+ a = ax/plus_grand
+ b = bx/plus_grand
+ c = cx/plus_grand
+ !
+ expo_glob = n
+ delta = b*b-4._ki*a*c
+ a_glob = a
+ b_glob = b
+ c_glob = c
+ lambda_glob = lambda_par
+ dist_glob = dist
+ !
+ origine_info_par = "ge"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(delta)
+ !
+ if (dist) then
+ !
+ if (delta > 0._ki) then
+ !
+ if (a > 0._ki) then
+ !
+ div_part = 2._ki*i_*pi/sqrt(delta)
+ !
+ else if (a < 0._ki) then
+ !
+ div_part = 2._ki*i_*pi/sqrt(delta)
+ !
+ end if
+ !
+ else if (delta <= 0._ki) then
+ !
+ if (a > 0._ki) then
+ !
+ div_part = 2._ki*pi/sqrt(-delta)
+ !
+ else if (a < 0._ki) then
+ !
+ div_part = -2._ki*pi/sqrt(-delta)
+ !
+ end if
+ !
+ end if
+ !
+ integ1 = 1._ki/a*(z_log(a+b+c,-1._ki)-z_log(c,-1._ki))
+ !
+ select case(n)
+ !
+ case(1)
+ !
+ coeff = 1._ki
+ extra_part = 0._ki
+ !
+ case(2)
+ !
+ coeff = -b/(2._ki*a)
+ extra_part = 0.5_ki*integ1
+ !
+ case(3)
+ !
+ coeff = (b**2-2._ki*a*c)/(2._ki*a**2)
+ extra_part = (1._ki-b/2._ki*integ1)/a
+ !
+ case(4)
+ !
+ coeff = (3._ki*a*b*c-b**3)/(2._ki*a**3)
+ extra_part = ( a/2._ki-b + (b*b-c*a)/2._ki*integ1 )/a/a
+ !
+ end select
+ !
+ else
+ !
+ div_part = 0._ki
+ extra_part = 0._ki
+ integ1 = 0._ki
+ !
+ end if
+ !
+ if (delta >= 0._ki) then
+ !
+ x1 = (-b + sqrt(delta))/(2._ki*a)
+ x2 = (-b - sqrt(delta))/(2._ki*a)
+ deltax = x1-x2
+ !
+ if (sqrt(abs(delta)) > coupure_3p1m_2mi) then
+ !
+ if (n == 1) then
+ !
+ veri_rat = 0._ki
+ veri = ( z_log((x1-1._ki)/x1,1._ki) - z_log((x2-1._ki)/x2,-1._ki) ) &
+ /deltax/a
+ !
+ else if (n == 2) then
+ !
+ veri_rat = 0._ki
+ veri = ( x1*z_log((x1-1._ki)/x1,1._ki) - x2*z_log((x2-1._ki)/x2,-1._ki) ) &
+ /deltax/a
+ !
+ else if (n == 3) then
+ !
+ veri_rat = 1._ki/a
+ veri = ( x1**2*z_log((x1-1._ki)/x1,1._ki) - x2**2*z_log((x2-1._ki)/x2,-1._ki) ) &
+ /deltax/a
+ !
+ else if (n == 4) then
+ !
+ veri_rat = ( 1._ki/2._ki + x1 + x2 )/a
+ veri = ( x1**3*z_log((x1-1._ki)/x1,1._ki) - x2**3*z_log((x2-1._ki)/x2,-1._ki) ) &
+ /deltax/a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge (file mod_gn.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'n should be 1,2,3,4 but is %d0'
+ tab_erreur_par(3)%arg_int = n
+ call catch_exception(0)
+ !
+ end if
+ !
+ if ( rat_or_tot_par%tot_selected ) then
+ !
+ rest = veri + veri_rat
+ !
+ else !if ( rat_or_tot_par%rat_selected ) then
+ !
+ rest = veri_rat
+ !
+ end if
+ !
+ else if ( (sqrt(abs(delta)) <= coupure_3p1m_2mi) .and. &
+ & (rat_or_tot_par%tot_selected) ) then
+ !
+ call generic_eval_numer(eval_numer_ge,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ rest = rest + coeff*div_part + extra_part
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge (file mod_gn.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the choice rat has been made, it is'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'singular when abs(delta) is too small: %f0'
+ tab_erreur_par(3)%arg_real = abs(delta)
+ call catch_exception(0)
+ !
+ end if
+ !
+ else
+ !
+ cx1 = -b/(2._ki*a) + i_*sqrt(-delta)/(2._ki*abs(a))
+ cx2 = -b/(2._ki*a) - i_*sqrt(-delta)/(2._ki*abs(a))
+ cdeltax = cx1-cx2
+ !
+ if (sqrt(abs(delta)) > coupure_3p1m_2mi) then
+ !
+ if (n == 1) then
+ !
+ veri_rat = 0._ki
+ veri = ( log((cx1-1._ki)/cx1) - log((cx2-1._ki)/cx2) ) &
+ /cdeltax/a
+ !
+ else if (n == 2) then
+ !
+ veri_rat = 0._ki
+ veri = ( cx1*log((cx1-1._ki)/cx1) - cx2*log((cx2-1._ki)/cx2) ) &
+ /cdeltax/a
+ !
+ else if (n == 3) then
+ !
+ veri_rat = 1._ki/a
+ veri = ( cx1**2*log((cx1-1._ki)/cx1) - cx2**2*log((cx2-1._ki)/cx2) ) &
+ /cdeltax/a
+ !
+ else if (n == 4) then
+ !
+ veri_rat = ( 1._ki/2._ki + cx1 + cx2 )/a
+ veri = ( cx1**3*log((cx1-1._ki)/cx1) - cx2**3*log((cx2-1._ki)/cx2) ) &
+ /cdeltax/a
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge (file mod_gn.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'n should be 1,2,3,4 but is %d0'
+ tab_erreur_par(3)%arg_int = n
+ call catch_exception(0)
+ !
+ end if
+ !
+ if ( rat_or_tot_par%tot_selected ) then
+ !
+ rest = veri + veri_rat
+ !
+ else !if ( rat_or_tot_par%rat_selected ) then
+ !
+ rest = veri_rat
+ !
+ end if
+ !
+ else if ( (sqrt(abs(delta)) <= coupure_3p1m_2mi) .and. &
+ & (rat_or_tot_par%tot_selected) ) then
+ !
+ call generic_eval_numer(eval_numer_ge,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ rest = rest + coeff*div_part + extra_part
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function ge (file mod_gn.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'the choice rat has been made, it is'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'singular when abs(delta) is too small: %f0'
+ tab_erreur_par(3)%arg_real = abs(delta)
+ call catch_exception(0)
+ !
+ end if
+ !
+ end if
+ !
+ ge(1) = real(rest,ki)/plus_grand
+ ge(2) = aimag(rest)/plus_grand
+ !
+ !
+ end function ge
+ !
+ !****f* src/integrals/three_point/func_gn/gl
+ ! NAME
+ !
+ ! Function gl
+ !
+ ! USAGE
+ !
+ ! real_dim2 = gl(n,a,b,c)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! int^1_0 dx x^(n-1)*ln(a*x^2+b*x+c-i*lambda)
+ ! where a, b and c are reals
+ ! here, no need to switch to numerical evaluation
+ ! no numerical problems when (b^2-4*a*c) = 0
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of x in the integrand
+ ! * a -- a real (type ki), coefficient of x^2
+ ! * b -- a real (type ki), coefficient of x^1
+ ! * c -- a real (type ki), coefficient of x^0
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variable
+ ! rat_or_tot_par
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function gl(n,ax,bx,cx)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: ax,bx,cx
+ real(ki), dimension(2) :: gl
+ !
+ real(ki) :: a,b,c
+ complex(ki) :: veri,veri_rat,rest
+ real(ki) :: x1,x2
+ complex(ki) :: cx1,cx2
+ real(ki) :: delta,plus_grand,lm
+ !
+ plus_grand = max(abs(ax),abs(bx),abs(cx))
+ lm = log(plus_grand)
+ a = ax/plus_grand
+ b = bx/plus_grand
+ c = cx/plus_grand
+ !
+ delta = b*b-4._ki*a*c
+ !
+ if (delta >= 0._ki) then
+ !
+ x1 = (-b + sqrt(delta))/(2._ki*a)
+ x2 = (-b - sqrt(delta))/(2._ki*a)
+ !
+ if (n == 1) then
+ !
+ veri_rat = -2._ki
+ veri = ( z_log(a,-1._ki) + (1._ki-x1)*z_log(1._ki-x1,-1._ki) + x1*z_log(-x1,-1._ki) &
+ + (1._ki-x2)*z_log(1._ki-x2,1._ki) + x2*z_log(-x2,1._ki) )
+ !
+ else if (n == 2) then
+ !
+ veri_rat = -(1._ki + x1 + x2)/2._ki
+ veri = ( z_log(a,-1._ki) + (1._ki-x1**2)*z_log(1._ki-x1,-1._ki) + x1**2*z_log(-x1,-1._ki) &
+ + (1._ki-x2**2)*z_log(1._ki-x2,1._ki) + x2**2*z_log(-x2,1._ki) )/2._ki
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gl (file mod_gn.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'value of n not implemented'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'n= %d0'
+ tab_erreur_par(3)%arg_int = n
+ call catch_exception(0)
+ !
+ !
+ end if
+ !
+ veri = veri + veri_rat
+ rest = veri
+ !
+ else
+ !
+ !
+ cx1 = -b/(2._ki*a) + i_*sqrt(-delta)/(2._ki*abs(a))
+ cx2 = -b/(2._ki*a) - i_*sqrt(-delta)/(2._ki*abs(a))
+ !
+ if (n == 1) then
+ !
+ veri_rat = -2._ki
+ veri = ( z_log(a,-1._ki) + (1._ki-cx1)*log(1._ki-cx1) + cx1*log(-cx1) &
+ + (1._ki-cx2)*log(1._ki-cx2) + cx2*log(-cx2) )
+ !
+ else if (n == 2) then
+ !
+ veri_rat = -(1._ki + cx1 + cx2)/2._ki
+ veri = ( z_log(a,-1._ki) + (1._ki-cx1**2)*log(1._ki-cx1) + cx1**2*log(-cx1) &
+ + (1._ki-cx2**2)*log(1._ki-cx2) + cx2**2*log(-cx2) )/2._ki
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'In function gl (file mod_gn.f90)'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 'value of n not implemented'
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'n= %d0'
+ tab_erreur_par(3)%arg_int = n
+ call catch_exception(0)
+ !
+ !
+ end if
+ !
+ veri = veri + veri_rat
+ rest = veri
+ !
+ end if
+ !
+ gl(1) = real(rest,ki) + lm/real(n,ki)
+ gl(2) = aimag(rest)
+ !
+ end function gl
+ !
+ !****f* src/integrals/three_point/func_gn/gf
+ ! NAME
+ !
+ ! Function gf
+ !
+ ! USAGE
+ !
+ ! real_dim2 = gf(n,a,b,c,dist)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes:
+ ! int^1_0 dx x^(n-1)*ln(a*x^2+b*x+c-i*lambda)/(a*x^2+b*x+c-i*lambda)
+ ! where a, b and c are reals
+ ! It switches to numerical evaluation if
+ ! (b^2-4*a*c) < coupure_3p1m_2mi
+ ! Around the Landau pole, the divergent part is extracted analytically,
+ ! only the rest is computed numerically
+ !
+ ! INPUTS
+ !
+ ! * n -- an integer, the power of x in the integrand
+ ! * a -- a real (type ki), coefficient of x^2
+ ! * b -- a real (type ki), coefficient of x^1
+ ! * c -- a real (type ki), coefficient of x^0
+ ! * dist -- a logical, true if we are close to the real threshold
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, the returned value depends on the global variables
+ ! rat_or_tot_par, coupure_3p1m_2mi
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function gf(n,ax,bx,cx,dist)
+ !
+ integer, intent(in) :: n
+ real(ki), intent(in) :: ax,bx,cx
+ logical, intent(in) :: dist
+ real(ki), dimension(2) :: gf
+ !
+ real(ki) :: a,b,c
+ complex(ki) :: veri,verim,rest,abserr
+ real(ki) :: x1,x2,deltax
+ complex(ki) :: cx1,cx2,cdeltax
+ real(ki) :: delta,plus_grand
+ complex(ki) :: div_part
+ !
+ plus_grand = max(abs(ax),abs(bx),abs(cx))
+ lm_glob = log(plus_grand)
+ a = ax/plus_grand
+ b = bx/plus_grand
+ c = cx/plus_grand
+ !
+ expo_glob = n
+ delta = b*b-4._ki*a*c
+ a_glob = a
+ b_glob = b
+ c_glob = c
+ lambda_glob = lambda_par
+ dist_glob = dist
+ !
+ origine_info_par = "gf"
+ num_grand_b_info_par = n
+ denom_grand_b_info_par = abs(delta)
+ !
+ ! divergent part for Landau singularities
+ if (dist) then
+ !
+ if (delta > 0._ki) then
+ !
+ if (a > 0._ki) then
+ !
+ div_part = 2._ki*i_*pi/sqrt(delta)*(log(delta/a) - i_*pi + lm_glob )
+ !
+ else if (a < 0._ki) then
+ !
+ div_part = 2._ki*i_*pi/sqrt(delta)*(log(-delta/a) + lm_glob)
+ !
+ end if
+ !
+ else if (delta <= 0._ki) then
+ !
+ if (a > 0._ki) then
+ !
+ div_part = 2._ki*pi/sqrt(-delta)*(log(-delta/a) + lm_glob)
+ !
+ else if (a < 0._ki) then
+ !
+ div_part = -2._ki*pi/sqrt(-delta)*(log(delta/a) - i_*pi + lm_glob)
+ !
+ end if
+ !
+ end if
+ !
+ else
+ !
+ div_part = 0._ki
+ !
+ end if
+ !
+ if (delta >= 0._ki) then
+ !
+ x1 = (-b + sqrt(delta))/(2._ki*a)
+ x2 = (-b - sqrt(delta))/(2._ki*a)
+ deltax = x1-x2
+ !
+ if (sqrt(abs(delta)) > coupure_3p1m_2mi) then
+ !
+ veri = ( -zdilog((1._ki-x2)/(1._ki-x1),sign(1._ki,2._ki-x1-x2)) + zdilog(x2/x1,sign(1._ki,-x1-x2)) &
+ + zdilog((1._ki-x1)/(1._ki-x2),sign(1._ki,-2._ki+x1+x2)) - zdilog(x1/x2,sign(1._ki,x1+x2)) &
+ + ( 2._ki*z_log(deltax,1._ki) - i_*pi + z_log(a,-1._ki) ) &
+ *( z_log((x1-1._ki)/x1,1._ki) - z_log((x2-1._ki)/x2,-1._ki) ) &
+ )/deltax/a
+ verim = ( z_log((x1-1._ki)/x1,1._ki) - z_log((x2-1._ki)/x2,-1._ki) ) &
+ /deltax/a
+ !
+ rest = ( veri + verim*lm_glob )/plus_grand
+ !
+ else
+ !
+ call generic_eval_numer(eval_numer_gf,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ rest = (rest + div_part)/plus_grand
+ !
+ end if
+ !
+ else
+ !
+ cx1 = -b/(2._ki*a) + i_*sqrt(-delta)/(2._ki*abs(a))
+ cx2 = -b/(2._ki*a) - i_*sqrt(-delta)/(2._ki*abs(a))
+ cdeltax = cx1-cx2
+ !
+ if (sqrt(abs(delta)) > coupure_3p1m_2mi) then
+ !
+ veri = ( -cdilog((1._ki-cx2)/(1._ki-cx1)) + cdilog(cx2/cx1) &
+ + cdilog((1._ki-cx1)/(1._ki-cx2)) - cdilog(cx1/cx2) &
+ + ( 2._ki*log(cdeltax) - i_*pi + z_log(a,-1._ki) ) &
+ *( log((cx1-1._ki)/cx1) - log((cx2-1._ki)/cx2) ) &
+ )/cdeltax/a
+ verim = ( log((cx1-1._ki)/cx1) - log((cx2-1._ki)/cx2) ) &
+ /cdeltax/a
+ !
+ rest = ( veri + verim*lm_glob )/plus_grand
+ !
+ else
+ !
+ call generic_eval_numer(eval_numer_gf,0._ki,1._ki,tolerance,rest,abserr)
+ !
+ rest = ( rest + div_part )/plus_grand
+ !
+ end if
+ !
+ end if
+ !
+ gf(1) = real(rest,ki)
+ gf(2) = aimag(rest)
+ !
+ !
+ end function gf
+ !
+ !****if* src/integrals/three_point/func_gn/eval_numer_ge
+ ! NAME
+ !
+ ! Function eval_numer_ge
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_ge(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation for ge.
+ ! Depending if
+ ! part 1/( (z-x_1)*(z-x_2) )
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables of type xxx_glob
+ ! are global in this module
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_ge(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_ge
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ real(ki) :: sigma,delta
+ complex(ki) :: integ2
+ !
+ if (dist_glob) then
+ !
+ sigma = 1._ki+b_glob/a_glob/2._ki
+ !
+ else
+ !
+ sigma = -b_glob/a_glob/2._ki
+ !
+ end if
+ !
+ delta = b_glob*b_glob-4._ki*a_glob*c_glob
+ !
+ x = u
+ !
+ if ( (sigma <= 1._ki) .and. (sigma >= 0._ki) ) then
+ !
+ y = lambda_glob*sign(un,a_glob)*u*(u-1._ki)*(u-sigma)
+ z = x + i_*y
+ jacob = 1._ki + i_*lambda_glob*sign(un,a_glob)*( (u-1._ki)*(u-sigma) + u*(u-1._ki) + u*(u-sigma) )
+ !
+ else
+ !
+ y = lambda_glob*sign(un,a_glob*sigma)*u*(u-1._ki)
+ z = x - i_*y
+ jacob = 1._ki - i_*lambda_glob*sign(un,a_glob*sigma)*( (u-1._ki) + u )
+ !
+ end if
+ !
+ if (dist_glob) then
+ !
+ integ2 = -b_glob/(2._ki*a_glob+b_glob) &
+ &/(-delta*a_glob/(2._ki*a_glob+b_glob)**2*z*z+delta/(2._ki*a_glob+b_glob)*z+c_glob)
+ !
+ select case(expo_glob)
+ !
+ case(1)
+ !
+ eval_numer_ge = -integ2
+ !
+ case(2)
+ !
+ eval_numer_ge = b_glob/2._ki/a_glob*integ2
+ !
+ case(3)
+ !
+ eval_numer_ge = (c_glob-b_glob*b_glob/2._ki/a_glob)*integ2/a_glob
+ !
+ case(4)
+ !
+ eval_numer_ge = -b_glob*(3._ki*a_glob*c_glob-b_glob*b_glob)/2._ki/a_glob**3&
+ &*integ2
+ !
+ end select
+ !
+ else
+ !
+ eval_numer_ge = z**(expo_glob-1)/(a_glob*z*z+b_glob*z+c_glob)
+ !
+ end if
+ !
+ eval_numer_ge = eval_numer_ge*jacob
+ !
+ end function eval_numer_ge
+ !
+ !****if* src/integrals/three_point/func_gn/eval_numer_gf
+ ! NAME
+ !
+ ! Function eval_numer_gf
+ !
+ ! USAGE
+ !
+ ! complex = eval_numer_gf(u)
+ !
+ ! DESCRIPTION
+ !
+ ! This is the integrand for the numerical evaluation of gf,
+ ! part ln(z-x_1)/( (z-x_1)*(z-x_2) )
+ !
+ ! INPUTS
+ !
+ ! * u -- a real (type ki), the integration variable
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect. The variables of type xxx_glob
+ ! are global in this module
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki)
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ function eval_numer_gf(u)
+ !
+ real(ki), intent (in) :: u
+ complex(ki) :: eval_numer_gf
+ !
+ real(ki) :: x,y
+ complex(ki) :: z,jacob
+ real(ki) :: sigma,delta,a_coeff
+ !
+ !
+ delta = b_glob*b_glob-4._ki*a_glob*c_glob
+ !
+ if (dist_glob) then
+ !
+ sigma = 1._ki+b_glob/a_glob/2._ki
+ a_coeff = -delta
+ !
+ else
+ !
+ sigma = -b_glob/a_glob/2._ki
+ a_coeff = a_glob
+ !
+ end if
+ !
+ x = u
+ !
+ if ( (sigma <= 1._ki) .and. (sigma >= 0._ki) ) then
+ !
+ y = lambda_glob*sign(un,a_coeff)*u*(u-1._ki)*(u-sigma)
+ z = x + i_*y
+ jacob = 1._ki + i_*lambda_glob*sign(un,a_coeff)*( (u-1._ki)*(u-sigma) + u*(u-1._ki) + u*(u-sigma) )
+ !
+ else
+ !
+ y = lambda_glob*sign(un,a_coeff*sigma)*u*(u-1._ki)
+ z = x + i_*y
+ jacob = 1._ki + i_*lambda_glob*sign(un,a_coeff*sigma)*( (u-1._ki) + u )
+ !
+ end if
+ !
+ if (dist_glob) then
+ !
+ eval_numer_gf = -b_glob/(2._ki*a_glob+b_glob) &
+ &*log( (1._ki-2._ki*a_glob/(2._ki*a_glob+b_glob)*z)**2 /&
+ & (-delta*a_glob/(2._ki*a_glob+b_glob)**2*z*z+delta/(2._ki*a_glob+b_glob)*z+c_glob) )&
+ &/(-delta*a_glob/(2._ki*a_glob+b_glob)**2*z*z+delta/(2._ki*a_glob+b_glob)*z+c_glob)
+ eval_numer_gf = eval_numer_gf + lm_glob*( b_glob/(2._ki*a_glob+b_glob) &
+ &/(-delta*a_glob/(2._ki*a_glob+b_glob)**2*z*z+delta/(2._ki*a_glob+b_glob)*z+c_glob) )
+ !
+ else
+ !
+ eval_numer_gf = (log(a_glob*z*z+b_glob*z+c_glob)+lm_glob)/(a_glob*z*z+b_glob*z+c_glob)
+ !
+ end if
+ !
+ eval_numer_gf = eval_numer_gf*jacob
+ !
+ end function eval_numer_gf
+ !
+end module func_gn
+
Index: 95/branches/golem95_without_olo_cmake/src/integrals/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/Makefile.in (revision 119)
@@ -0,0 +1,571 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/integrals
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = one_point two_point three_point four_point
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/integrals/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/integrals/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.dep
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.dep (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.dep (revision 119)
@@ -0,0 +1,7 @@
+# Module dependencies
+function_2p_m1m2.o: function_2p0m_1mi.o
+function_2p_m1m2.lo: function_2p0m_1mi.lo
+function_2p_m1m2.obj: function_2p0m_1mi.obj
+generic_function_2p.o: function_2p0m_1mi.o function_2p_m1m2.o
+generic_function_2p.lo: function_2p0m_1mi.lo function_2p_m1m2.lo
+generic_function_2p.obj: function_2p0m_1mi.obj function_2p_m1m2.obj
Index: 95/branches/golem95_without_olo_cmake/src/integrals/two_point/function_2p0m_1mi.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/two_point/function_2p0m_1mi.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/two_point/function_2p0m_1mi.f90 (revision 119)
@@ -0,0 +1,972 @@
+!~ changed 13.5.2010 to include scale (mu^2)^eps
+!~ the default scale is 1, defined in parametre.f90
+!****h* src/integral/two_point/function_2p0m
+! NAME
+!
+! Module function_2p0m
+!
+! USAGE
+!
+! use function_2p0m
+!
+! DESCRIPTION
+!
+! This module is used to compute the two-point function
+! with zero momentum and two equal masses: I_2(0,m^2,m^2)
+! and the two-point function
+! with zero momentum and two different masses: I_2(0,m1^2,m2^2)
+! with/without Feynman parameters in n dimensions
+!
+! OUTPUT
+!
+! This module exports the functions:
+! * f2p0m_1mi -- a function for the computation of the
+! two-point integrals
+! with zero momentum and two equal masses: I2({j})(0,m^2,m^2)
+! with/without Feynman parameters, in n dimensions
+!
+! * f2p0m_m1m2 -- a function for the computation of the
+! two-point integrals
+! with zero momentum and two different masses: I2({j})(0,m1^2,m2^2)
+! with/without Feynman parameters, in n dimensions
+!
+! scalar functions:
+!
+! i20m1: computes the scalar two point function
+! with zero momentum and one propagator having nonzero mass:
+! I_2^n(0,0,m^2)
+!
+! i20mm: computes the scalar two point function
+! with zero momentum and two massive propagators
+! with equal masses: I_2^n(0,m^2,m^2)
+!
+! i20m1m2: computes the scalar two point function
+! with zero momentum and two massive propagators
+! with different masses: I_2^n(0,m1^2,m2^2)
+!
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * constante (src/module/constante.f90)
+!
+!*****
+module function_2p0m_1mi
+ !
+ use precision_golem
+ use logarithme
+ use sortie_erreur
+ use equal
+ use parametre
+ use constante, only : zero, czero
+ !
+ implicit none
+ !
+ private
+ !
+ interface i20m1
+ !
+ module procedure i20m1_r, i20m1_c
+ !
+ end interface
+ !
+ interface i20mm
+ !
+ module procedure i20mm_r, i20mm_c
+ !
+ end interface
+ !
+ interface f2p0m_1mi
+ !
+ module procedure f2p0m_1mi_r, f2p0m_1mi_c
+ !
+ end interface
+ !
+ interface f2p0m_m1m2
+ !
+ module procedure f2p0m_m1m2_r, f2p0m_m1m2_c
+ !
+ end interface
+ !
+ interface i20m1m2
+ !
+ module procedure i20m1m2_r, i20m1m2_c
+ !
+ end interface
+ !
+ public :: f2p0m_1mi, f2p0m_m1m2, i20m1, i20mm,i20m1m2
+ !
+contains
+ !
+ !
+ !****f* src/integral/two_point/function_2p0m/f2p0m_1mi
+ ! NAME
+ !
+ ! Function f2p0m_1mi
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f2p0m_1mi(msq_r,par1,par2)
+ ! complex_dim2 = f2p0m_1mi(msq_c,par1,par2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the two point function in n dimensions
+ ! with zero momentum and two massive propagators with m1=m2
+ ! with up to two Feynman parameters in the numerator.
+ ! It retuns an array of (4 reals / 2 complex) corresponding to the
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! corresponds to eqs.(A.9),(A.10) in hep-ph/0504267
+ ! note overall minus sign has to be corrected in first line of (A.10)
+ ! note also that for rank one A_j^{2,1}=MINUS I_2(j,...)
+ !
+ ! INPUTS
+ !
+ ! * m1_sq -- real/complex (type ki), the value of the mass
+ ! * par1 -- an integer, the label of one Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! Note that par1,par2 are ordered internally, i.e.
+ ! par1 <= par2, note also to use zero for par1, par2
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real/complex (type ki) array of rank 1 and shape 4/2 corresponding to
+ ! the real/imaginary part of the coefficient of the coefficient
+ ! of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ ! light-like-momentum two point function without Feynman parameters
+ ! f2p0m_1mi(msq,0,0)
+ ! with one Feynman parameter in the numerator z_1
+ ! f2p0m_1mi(msq,0,1)
+ ! with two Feynman parameters in the numerator z_2**2
+ ! f2p0m_1mi(msq,2,2)
+ ! with two Feynman parameters in the numerator z1*z_2
+ ! f2p0m_1mi(msq,1,2)
+ !
+ !*****
+ !
+ function f2p0m_1mi_r(m1_sq,par1,par2)
+ !
+ real(ki), intent (in) :: m1_sq
+ integer, intent (in) :: par1,par2
+ real(ki), dimension(4) :: f2p0m_1mi_r
+ !
+ f2p0m_1mi_r(:) = 0._ki
+ !
+ ! scalar case
+ if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f2p0m_1mi_r = i20mm(m1_sq)
+ !
+ ! rank one
+ else if ( (par1 == 0) .and. (par2 == 1) ) then
+ !
+ f2p0m_1mi_r = i20mm(m1_sq)/2._ki
+ !
+ else if ( (par1 == 0) .and. (par2 == 2) ) then
+ !
+ f2p0m_1mi_r = i20mm(m1_sq)/2._ki
+ !
+ ! rank two
+ else if ( (par1 == 1) .and. (par2 == 1) ) then
+ !
+ f2p0m_1mi_r = i20mm(m1_sq)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) ) then
+ !
+ f2p0m_1mi_r = i20mm(m1_sq)/6._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) ) then
+ !
+ f2p0m_1mi_r = i20mm(m1_sq)/3._ki
+ !
+ end if
+ !
+ !
+ end function f2p0m_1mi_r
+ !
+ function f2p0m_1mi_c(m1_sq,par1,par2)
+ !
+ complex(ki), intent (in) :: m1_sq
+ integer, intent (in) :: par1,par2
+ complex(ki), dimension(2) :: f2p0m_1mi_c
+ !
+ f2p0m_1mi_c(:) = czero
+ !
+ ! scalar case
+ if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f2p0m_1mi_c = i20mm(m1_sq)
+ !
+ ! rank one
+ else if ( (par1 == 0) .and. (par2 == 1) ) then
+ !
+ f2p0m_1mi_c = i20mm(m1_sq)/2._ki
+ !
+ else if ( (par1 == 0) .and. (par2 == 2) ) then
+ !
+ f2p0m_1mi_c = i20mm(m1_sq)/2._ki
+ !
+ ! rank two
+ else if ( (par1 == 1) .and. (par2 == 1) ) then
+ !
+ f2p0m_1mi_c = i20mm(m1_sq)/3._ki
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) ) then
+ !
+ f2p0m_1mi_c = i20mm(m1_sq)/6._ki
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) ) then
+ !
+ f2p0m_1mi_c = i20mm(m1_sq)/3._ki
+ !
+ end if
+ !
+ !
+ end function f2p0m_1mi_c
+ !
+ !****f* src/integral/two_point/function_2p0m/f2p0m_m1m2
+ ! NAME
+ !
+ ! Function f2p0m_m1m2
+ !
+ ! USAGE
+ !
+ ! real_dim6 = f2p0m_m1m2(m1sq_r,m2sq_r,par1,par2)
+ ! complex_dim3 = f2p0m_m1m2(m1sq_c,m2sq_c,par1,par2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the two point function in n dimensions
+ ! with zero momentum and two massive propagators with m1 not= m2
+ ! with up to two Feynman parameters in the numerator.
+ ! It retuns an array of (6 reals / 3 complex) corresponding to the real/imaginary
+ ! part of the coefficient of the 1/epsilon**2 term, real/imaginary part of the
+ ! coefficient of the 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ ! corresponds to eqs.(A.8) in hep-ph/0504267
+ ! note that for rank one A_j^{2,1}=MINUS I_2(j,...)
+ !
+ ! INPUTS
+ !
+ ! * m1_sq,m2_sq -- real/complex (type ki), the values of the masses
+ ! * par1 -- an integer, the label of one Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! Note that par1,par2 are ordered internally, i.e.
+ ! par1 <= par2, note also to use zero for par1, par2
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real/complex (type ki) array of rank 1 and shape 6/3 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon**2 term,
+ ! real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ ! light-like-momentum two point function without Feynman parameters
+ ! f2p0m_m1m2(m1sq,m2sq,0,0)
+ ! with one Feynman parameter in the numerator z_1
+ ! f2p0m_m1m2(m1sq,m2sq,0,1)
+ ! with two Feynman parameters in the numerator z_2**2
+ ! f2p0m_m1m2(m1sq,m2sq,2,2)
+ ! with two Feynman parameters in the numerator z1*z_2
+ ! f2p0m_m1m2(m1sq,m2sq,1,2)
+ !
+ !*****
+ function f2p0m_m1m2_r(m1_sq,m2_sq,par1,par2)
+ !
+ real(ki), intent (in) :: m1_sq,m2_sq
+ integer, intent (in) :: par1,par2
+ real(ki), dimension(4) :: f2p0m_m1m2_r
+ real(ki) :: small,diffrm
+ !
+ f2p0m_m1m2_r(:) = 0._ki
+ diffrm=sqrt(m1_sq)-sqrt(m2_sq)
+ small=1.e-6_ki
+ !
+ ! scalar case
+ if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f2p0m_m1m2_r = i20m1m2(m1_sq,m2_sq)
+ !
+ ! rank one, z1
+ else if ( (par1 == 0) .and. (par2 == 1) ) then
+ !
+ f2p0m_m1m2_r(1) = 1._ki/2._ki
+ f2p0m_m1m2_r(2) = 0._ki
+ !
+ !
+ if (abs(diffrm) > small ) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = -(-m1_sq**2 + 4._ki*m1_sq*m2_sq - 3._ki*m2_sq**2 + &
+ & 2._ki*m1_sq*(m1_sq - 2._ki*m2_sq)*real(z_log(m1_sq/mu2_scale_par,-1._ki)) + &
+ & 2._ki*m2_sq**2*real(z_log(m2_sq/mu2_scale_par,-1._ki)))/(4._ki*(m1_sq - m2_sq)**2)
+ f2p0m_m1m2_r(4) =-(2._ki*m1_sq*(m1_sq - 2._ki*m2_sq)*aimag(z_log(m1_sq/mu2_scale_par,-1._ki)) + &
+ & 2._ki*m2_sq**2*aimag(z_log(m2_sq/mu2_scale_par,-1._ki)))/(4._ki*(m1_sq - m2_sq)**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq - 3._ki*m2_sq)/(4._ki*(m1_sq - m2_sq))
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq) * ( 27._ki*m1_sq**2 - 9._ki*m1_sq*m2_sq + 2._ki*m2_sq**2 )/(120._ki*m1_sq**3) - &
+ & real(z_log(m1_sq/mu2_scale_par,-1._ki))/2._ki
+ !
+ f2p0m_m1m2_r(4) = - aimag(z_log(m1_sq/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq) * ( 27._ki*m1_sq**2 - 9._ki*m1_sq*m2_sq + 2._ki*m2_sq**2 )/(120._ki*m1_sq**3)
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ ! rank one, z2
+ else if ( (par1 == 0) .and. (par2 == 2) ) then
+ !
+ f2p0m_m1m2_r(1) = 1._ki/2._ki
+ f2p0m_m1m2_r(2) = 0._ki
+ !
+ if (abs(diffrm) > small ) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = -(-m2_sq**2 + 4._ki*m2_sq*m1_sq - 3._ki*m1_sq**2 + &
+ & 2._ki*m2_sq*(m2_sq - 2._ki*m1_sq)*real(z_log(m2_sq/mu2_scale_par,-1._ki)) + &
+ & 2._ki*m1_sq**2*real(z_log(m1_sq/mu2_scale_par,-1._ki)))/(4._ki*(m2_sq - m1_sq)**2)
+ f2p0m_m1m2_r(4) =-(2._ki*m2_sq*(m2_sq - 2._ki*m1_sq)*aimag(z_log(m2_sq/mu2_scale_par,-1._ki)) + &
+ & 2._ki*m1_sq**2*aimag(z_log(m1_sq/mu2_scale_par,-1._ki)))/(4._ki*(m2_sq - m1_sq)**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m2_sq - 3._ki*m1_sq)/(4._ki*(m2_sq - m1_sq))
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*(63._ki*m1_sq**2 - 31._ki*m1_sq*m2_sq + 8._ki*m2_sq**2 )/(120._ki*m1_sq**3) - &
+ & real(z_log(m1_sq/mu2_scale_par,-1._ki),ki)/2._ki
+ !
+ f2p0m_m1m2_r(4) = - aimag(z_log(m1_sq/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*(63._ki*m1_sq**2 - 31._ki*m1_sq*m2_sq + 8._ki*m2_sq**2 )/(120._ki*m1_sq**3)
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ ! rank two
+ else if ( (par1 == 1) .and. (par2 == 1) ) then
+ !
+ f2p0m_m1m2_r(1) = 1._ki/3._ki
+ f2p0m_m1m2_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ if (abs(diffrm) > small ) then
+ ! write(6,*) 'using unexpanded expression, diffrm=',diffrm
+ f2p0m_m1m2_r(3) = 1._ki/9._ki-m2_sq/(m1_sq-m2_sq)/6._ki + &
+ & m2_sq**2/(m1_sq-m2_sq)**2/3._ki - &
+ & real(z_log(m1_sq/mu2_scale_par,-1._ki))/3._ki - &
+ & m2_sq**3*(real(z_log(m1_sq/mu2_scale_par,-1._ki))- &
+ & real(z_log(m2_sq/mu2_scale_par,-1._ki)))/(m1_sq-m2_sq)**3/3._ki
+ !
+ f2p0m_m1m2_r(4) = - aimag(z_log(m1_sq/mu2_scale_par,-1._ki))/3._ki - &
+ & m2_sq**3*(aimag(z_log(m1_sq/mu2_scale_par,-1._ki))- &
+ & aimag(z_log(m2_sq/mu2_scale_par,-1._ki)))/(m1_sq-m2_sq)**3/3._ki
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*( 19._ki*m1_sq**2 - 5._ki*m1_sq*m2_sq + m2_sq**2 )/(180._ki*m1_sq**3) -&
+ & real(z_log(m1_sq/mu2_scale_par,-1._ki))/3._ki
+ !
+ f2p0m_m1m2_r(4) = - aimag(z_log(m1_sq,-1._ki))/3._ki
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ if (abs(diffrm) > small ) then
+ f2p0m_m1m2_r(3) = 1._ki/9._ki-m2_sq/(m1_sq-m2_sq)/6._ki + &
+ & m2_sq**2/(m1_sq-m2_sq)**2/3._ki
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*( 19._ki*m1_sq**2 - 5._ki*m1_sq*m2_sq + m2_sq**2 )/(180._ki*m1_sq**3)
+ end if ! end if abs(diffrm) > small
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) ) then
+ !
+ f2p0m_m1m2_r(1) = 1._ki/6._ki
+ f2p0m_m1m2_r(2) = 0._ki
+ !
+ if (abs(diffrm) > small ) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = (5._ki*m1_sq**3 - 27._ki*m1_sq**2*m2_sq + 27._ki*m1_sq*m2_sq**2 - &
+ & 5._ki*m2_sq**3 - 6._ki*m1_sq**2*(m1_sq - 3._ki*m2_sq)*real(z_log(m1_sq/mu2_scale_par,-1._ki),ki) + &
+ & 6._ki*m2_sq**2*(-3._ki*m1_sq + m2_sq)*real(z_log(m2_sq/mu2_scale_par,-1._ki),ki))/ &
+ & (36._ki*(m1_sq - m2_sq)**3)
+ f2p0m_m1m2_r(4) =( - 6._ki*m1_sq**2*(m1_sq - 3._ki*m2_sq)*aimag(z_log(m1_sq/mu2_scale_par,-1._ki)) + &
+ & 6._ki*m2_sq**2*(-3._ki*m1_sq + m2_sq)*aimag(z_log(m2_sq/mu2_scale_par,-1._ki)))/ &
+ & (36._ki*(m1_sq - m2_sq)**3)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (5._ki*m1_sq**2 - 22._ki*m1_sq*m2_sq + 5._ki*m2_sq**2)/(36._ki*(m1_sq - m2_sq)**2)
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*(43._ki*m1_sq**2 - 17._ki*m1_sq*m2_sq + 4._ki*m2_sq**2 )/(360._ki*m1_sq**3) - &
+ & real(z_log(m1_sq/mu2_scale_par,-1._ki))/6._ki
+ !
+ f2p0m_m1m2_r(4) = - aimag(z_log(m1_sq/mu2_scale_par,-1._ki))/6._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*(43._ki*m1_sq**2 - 17._ki*m1_sq*m2_sq + 4._ki*m2_sq**2 )/(360._ki*m1_sq**3)
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) ) then
+ !
+ f2p0m_m1m2_r(1) = 1._ki/3._ki
+ f2p0m_m1m2_r(2) = 0._ki
+ !
+ if (abs(diffrm) > small ) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = (11._ki*m1_sq**3 - 18._ki*m1_sq**2*m2_sq + &
+ & 9._ki*m1_sq*m2_sq**2 - 2._ki*m2_sq**3 - &
+ & 6._ki*m1_sq**3*real(z_log(m1_sq/mu2_scale_par,-1._ki)) + &
+ & 6._ki*m2_sq*(3._ki*m1_sq**2 - 3._ki*m1_sq*m2_sq + &
+ & m2_sq**2)*real(z_log(m2_sq/mu2_scale_par,-1._ki)))/ &
+ & (18._ki*(m1_sq - m2_sq)**3)
+ f2p0m_m1m2_r(4) =( -6._ki*m1_sq**3*aimag(z_log(m1_sq/mu2_scale_par,-1._ki)) + &
+ & 6._ki*m2_sq*(3._ki*m1_sq**2 - 3._ki*m1_sq*m2_sq + &
+ & m2_sq**2)*aimag(z_log(m2_sq/mu2_scale_par,-1._ki)))/ &
+ & (18._ki*(m1_sq - m2_sq)**3)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (11._ki*m1_sq**2 - 7._ki*m1_sq*m2_sq + 2._ki*m2_sq**2 )/(18._ki*(m1_sq - m2_sq)**2)
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2_sq-m1sq) up to order 3
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*(73._ki*m1_sq**2 - 38._ki*m1_sq*m2_sq + 10._ki*m2_sq**2 )/(180._ki*m1_sq**3) - &
+ & real(z_log(m1_sq/mu2_scale_par,-1._ki))/3._ki
+ !
+ f2p0m_m1m2_r(4) = - aimag(z_log(m1_sq/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_r(3) = (m1_sq-m2_sq)*(73._ki*m1_sq**2 - 38._ki*m1_sq*m2_sq + 10._ki*m2_sq**2 )/(180._ki*m1_sq**3)
+ f2p0m_m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ end if ! end test values of par1,par2
+ !
+ !
+ end function f2p0m_m1m2_r
+ !
+ !
+ function f2p0m_m1m2_c(m1_sq,m2_sq,par1,par2)
+ !
+ complex(ki), intent (in) :: m1_sq,m2_sq
+ integer, intent (in) :: par1,par2
+ complex(ki), dimension(2) :: f2p0m_m1m2_c
+ complex(ki) :: ratpart
+ real(ki) :: small,diffrm
+ !
+ f2p0m_m1m2_c(:) = czero
+ diffrm = sqrt(abs(m1_sq-m2_sq))
+ small = 1.e-6_ki
+ !
+ ! scalar case
+ if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f2p0m_m1m2_c = i20m1m2(m1_sq,m2_sq)
+ !
+ ! rank one, z1
+ else if ( (par1 == 0) .and. (par2 == 1) ) then
+ !
+ f2p0m_m1m2_c(1) = 1._ki/2._ki
+ !
+ !
+ if (diffrm > small ) then
+ !
+ ratpart = (m1_sq - 3._ki*m2_sq)/((m1_sq - m2_sq)*4._ki)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - ( m1_sq*(m1_sq - 2._ki*m2_sq)*z_log(m1_sq/mu2_scale_par,-1._ki) + &
+ & m2_sq**2*z_log(m2_sq/mu2_scale_par,-1._ki) )/(2._ki*(m1_sq - m2_sq)**2)
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ ratpart = (m1_sq-m2_sq)*(27._ki*m1_sq**2 - 9._ki*m1_sq*m2_sq + 2._ki*m2_sq**2)/(120._ki*m1_sq**3)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - z_log(m1_sq/mu2_scale_par,-1._ki)/2._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ ! rank one, z2
+ else if ( (par1 == 0) .and. (par2 == 2) ) then
+ !
+ f2p0m_m1m2_c(1) = 1._ki/2._ki
+ !
+ if (diffrm > small ) then
+ !
+ ratpart = (3._ki*m1_sq - m2_sq)/(4._ki*(m1_sq-m2_sq))
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - ( m2_sq*(m2_sq - 2._ki*m1_sq)*z_log(m2_sq/mu2_scale_par,-1._ki) + &
+ & m1_sq**2*z_log(m1_sq/mu2_scale_par,-1._ki) )/(2._ki*(m2_sq - m1_sq)**2)
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ ratpart = (m1_sq - m2_sq)*(63._ki*m1_sq**2 - 31._ki*m1_sq*m2_sq + 8._ki*m2_sq**2)/(120._ki*m1_sq**3)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - z_log(m1_sq/mu2_scale_par,-1._ki)/2._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ ! rank two
+ else if ( (par1 == 1) .and. (par2 == 1) ) then
+ !
+ f2p0m_m1m2_c(1) = 1._ki/3._ki
+ !
+ if (diffrm > small ) then
+ !
+ ratpart = (2._ki*m1_sq**2 - 7._ki*m1_sq*m2_sq + 11._ki*m2_sq**2)/(18._ki*(m1_sq - m2_sq)**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - ( m1_sq*(m1_sq**2-3._ki*m1_sq*m2_sq+3._ki*m2_sq**2)*z_log(m1_sq/mu2_scale_par,-1._ki) - &
+ & m2_sq**3*z_log(m2_sq/mu2_scale_par,-1._ki) )/(3._ki*(m1_sq - m2_sq)**3)
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ write(6,*) 'using expansion in m1s-m2s, diffrm=',diffrm
+ !
+ ratpart = (m1_sq - m2_sq)*(19._ki*m1_sq**2 - 5._ki*m1_sq*m2_sq + m2_sq**2)/(180._ki*m1_sq**3)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - z_log(m1_sq/mu2_scale_par,-1._ki)/3._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) ) then
+ !
+ f2p0m_m1m2_c(1) = 1._ki/6._ki
+ !
+ if (diffrm > small ) then
+ !
+ ratpart = (5._ki*m1_sq**2 - 22._ki*m1_sq*m2_sq + 5._ki*m2_sq**2)/(36._ki*(m1_sq - m2_sq)**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - ( m1_sq**2*(m1_sq - 3._ki*m2_sq)*z_log(m1_sq/mu2_scale_par,-1._ki) - &
+ & m2_sq**2*(m2_sq - 3._ki*m1_sq)*z_log(m2_sq/mu2_scale_par,-1._ki) )/(6._ki*(m1_sq - m2_sq)**3)
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ ratpart = (m1_sq - m2_sq)*(43._ki*m1_sq**2 - 17._ki*m1_sq*m2_sq + 4._ki*m2_sq**2)/(360._ki*m1_sq**3)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - z_log(m1_sq/mu2_scale_par,-1._ki)/6._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) ) then
+ !
+ f2p0m_m1m2_c(1) = 1._ki/3._ki
+ !
+ if (diffrm > small ) then
+ !
+ ratpart = (11._ki*m1_sq**2 - 7._ki*m1_sq*m2_sq + 2._ki*m2_sq**2)/(18._ki*(m1_sq - m2_sq)**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - ( m1_sq**3*z_log(m1_sq/mu2_scale_par,-1._ki) - &
+ & m2_sq*(3._ki*m1_sq**2-3._ki*m1_sq*m2_sq+m2_sq**2)*z_log(m2_sq/mu2_scale_par,-1._ki) )/ &
+ & (3._ki*(m1_sq-m2_sq)**3)
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2_sq-m1sq) up to order 3
+ !
+ ratpart = (m1_sq - m2_sq)*(73._ki*m1_sq**2 - 38._ki*m1_sq*m2_sq + 10._ki*m2_sq**2)/(180._ki*m1_sq**3)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p0m_m1m2_c(2) = ratpart - z_log(m1_sq/mu2_scale_par,-1._ki)/3._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ end if ! end test values of par1,par2
+ !
+ !
+ end function f2p0m_m1m2_c
+ !
+ !
+ !
+ ! ************* scalar functions *****************
+ !
+ ! ****f* src/integral/two_point/i20m1
+ ! NAME
+ !
+ ! Function i20m1
+ !
+ ! USAGE
+ !
+ ! real_dim4 = i20m1(msq_r)
+ ! complex_dim2 = i20m1(msq_c)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the scalar two point function
+ ! with zero momentum and one nonzero mass: I_2(0,0,m**2)
+ ! in n dimensions
+ !
+ ! INPUTS
+ !
+ ! * msq -- a real/complex (type ki), the mass squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 4/2
+ !
+ !*****
+ function i20m1_r(msq)
+ !
+ real(ki), intent(in) :: msq
+ real(ki), dimension(4) :: i20m1_r
+ !
+ i20m1_r(1) = 1._ki
+ i20m1_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ i20m1_r(3) = 1._ki-real(z_log(msq/mu2_scale_par,-1._ki))
+ i20m1_r(4) = -aimag(z_log(msq/mu2_scale_par,-1._ki))
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ i20m1_r(3) = 1._ki
+ i20m1_r(4) = 0._ki
+ !
+ end if
+ !
+ end function i20m1_r
+ !
+ function i20m1_c(msq)
+ !
+ complex(ki), intent(in) :: msq
+ complex(ki), dimension(2) :: i20m1_c
+ !
+ i20m1_c(1) = cmplx(1._ki,0._ki,ki)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i20m1_c(2) = cmplx(1._ki,0._ki,ki)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ i20m1_c(2) = 1._ki - z_log(msq,-1._ki)
+ !
+ end if
+ !
+ end function i20m1_c
+ !
+ ! ****f* src/integral/two_point/i20mm
+ ! NAME
+ !
+ ! Function i20mm
+ !
+ ! USAGE
+ !
+ ! real_dim4 = i20mm(msq_r)
+ ! complex_dim2 = i20mm(msq_c)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the scalar two point function
+ ! with zero momentum and two equal nonzero masses: I_2(0,m^2,m^2)
+ ! in n dimensions
+ !
+ ! INPUTS
+ !
+ ! * msq -- a real/complex (type ki), the mass squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 4/2
+ !
+ !*****
+ function i20mm_r(msq)
+ !
+ real(ki), intent(in) :: msq
+ real(ki), dimension(4) :: i20mm_r
+ !
+ i20mm_r(1) = 1._ki
+ i20mm_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ i20mm_r(3) = -real(z_log(msq/mu2_scale_par,-1._ki))
+ i20mm_r(4) = -aimag(z_log(msq/mu2_scale_par,-1._ki))
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ i20mm_r(3) = 0._ki
+ i20mm_r(4) = 0._ki
+ !
+ end if
+ !
+ end function i20mm_r
+ !
+ function i20mm_c(msq)
+ !
+ complex(ki), intent(in) :: msq
+ complex(ki), dimension(2) :: i20mm_c
+ !
+ i20mm_c(1) = cmplx(1._ki,0._ki,ki)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i20mm_c(2) = czero
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ i20mm_c(2) = -z_log(msq,-1._ki)
+ !
+ end if
+ !
+ end function i20mm_c
+ !
+ ! ****f* src/integral/two_point/i20m1m2
+ ! NAME
+ !
+ ! Function i20m1m2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = i20m1m2(msq1_r,msq2_r)
+ ! complex_dim2 = i20m1m2(msq1_c,msq2_c)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the scalar two point function
+ ! with zero momentum and two equal nonzero masses: I_2(0,m1**2,m2**2)
+ ! in n dimensions
+ !
+ ! INPUTS
+ !
+ ! * m1sq,m2sq -- real/complex (type ki), the masses squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 4/2
+ !
+ !*****
+ function i20m1m2_r(m1sq,m2sq)
+ !
+ real(ki), intent(in) :: m1sq,m2sq
+ real(ki), dimension(4) :: i20m1m2_r
+ !
+ if (equal_real(m1sq,m2sq)) then
+ !
+ i20m1m2_r = i20mm(m1sq)
+ !
+ else
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ i20m1m2_r = (m2sq*i20m1(m2sq)-m1sq*i20m1(m1sq))/(m2sq-m1sq)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ i20m1m2_r(1) = 1._ki
+ i20m1m2_r(2) = 0._ki
+ i20m1m2_r(3) = 1._ki
+ i20m1m2_r(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test if m1=m2
+ !
+ end function i20m1m2_r
+ !
+ function i20m1m2_c(m1sq,m2sq)
+ !
+ complex(ki), intent(in) :: m1sq,m2sq
+ complex(ki), dimension(2) :: i20m1m2_c
+ real(ki) :: diffm
+ !
+ diffm = abs(m1sq-m2sq)
+ !
+ if (equal_real(diffm,zero)) then
+ !
+ i20m1m2_c = i20mm(m1sq)
+ !
+ else
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i20m1m2_c(1) = cmplx(1._ki,0._ki,ki)
+ i20m1m2_c(2) = cmplx(1._ki,0._ki,ki)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ i20m1m2_c = (m2sq*i20m1(m2sq)-m1sq*i20m1(m1sq))/(m2sq-m1sq)
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test if m1=m2
+ !
+ end function i20m1m2_c
+ !
+ !
+ !
+end module function_2p0m_1mi
Index: 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.am (revision 119)
@@ -0,0 +1,17 @@
+noinst_LTLIBRARIES=libgolem95_integrals_two_point.la
+
+AM_FCFLAGS= \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical \
+ -I$(top_builddir)/src/integrals/one_point
+
+libgolem95_integrals_two_point_la_SOURCES= \
+ function_2p0m_1mi.f90 function_2p_m1m2.f90 generic_function_2p.f90
+libgolem95_integrals_two_point_la_FCFLAGS= $(AM_FCFLAGS)
+
+nodist_pkginclude_HEADERS= function_2p_m1m2.mod function_2p0m_1mi.mod \
+ generic_function_2p.mod
+CLEANFILES=*.mod
+
+include Makefile.dep
Index: 95/branches/golem95_without_olo_cmake/src/integrals/two_point/function_2p_m1m2.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/two_point/function_2p_m1m2.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/two_point/function_2p_m1m2.f90 (revision 119)
@@ -0,0 +1,1255 @@
+!~ changed 13.5.2010 to include scale (mu^2)^eps
+!~ the default scale is 1, defined in parametre.f90
+!****h* src/integral/two_point/function_2p_m1m2
+! NAME
+!
+! Module function_2p_m1m2
+!
+! USAGE
+!
+! use function_2p_m1m2
+!
+! DESCRIPTION
+!
+! This module is used to compute the two-point function
+! I_2(s,m1^2,m2^2)
+! with/without Feynman parameters in n dimensions
+!
+! OUTPUT
+!
+! This module exports the functions:
+! * f2p_m1m2 -- a function for the computation of
+! two-point integrals
+! with non-zero momentum and two masses: I2^n({zj})(s,m1^2,m2^2)
+! with/without Feynman parameters, in n dimensions
+! one of the masses can be zero
+! massless case is already contained in generic_function_2p
+!
+!
+! i2sm1m2: computes the scalar two point function
+! where both propagators have nonzero mass:
+! I_2^n(s,m1^2,m2^2)
+!
+! i2sm1: computes the scalar two point function
+! where only one propagator has nonzero mass:
+! I_2^n(s,m^2,0)
+!
+!
+! USES
+!
+! * precision (src/module/precision_golem.f90)
+! * logarithme (src/module/z_log.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * function_2p0m_1mi (src/integrals/two_point/function_2p0m_1mi.f90)
+!
+!*****
+!
+module function_2p_m1m2
+ !
+ use precision_golem
+ use logarithme
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use constante
+ use equal
+ use function_2p0m_1mi
+ use parametre, only : rat_or_tot_par,mu2_scale_par
+ !
+ implicit none
+ !
+ private
+ !
+ interface f2p_m1m2
+ !
+ module procedure f2p_m1m2_r, f2p_m1m2_c
+ !
+ end interface
+ !
+ interface i2sm1m2
+ !
+ module procedure i2sm1m2_r, i2sm1m2_c
+ !
+ end interface
+ !
+ interface i2sm1
+ !
+ module procedure i2sm1_r, i2sm1_c
+ !
+ end interface
+ !
+ real(ki) :: grand_glob = huge(1._ki)
+ !
+ public :: f2p_m1m2, i2sm1m2, i2sm1, i2sm1m2_old
+ !
+contains
+ !
+ !
+ !****f* src/integral/two_point/function_2p_m1m2/f2p_m1m2
+ ! NAME
+ !
+ ! Function f2p_m1m2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = f2p_m1m2(s,msq1_r,msq2_r,par1,par2)
+ ! complex_dim2 = f2p_m1m2(s,msq1_c,msq2_c,par1,par2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the
+ ! two point function in n dimensions
+ ! with non-zero momentum and two massive propagators
+ ! with up to two Feynman parameters in the numerator.
+ ! It retuns an array of 4 reals / 2 complex corresponding to the real/imaginary
+ ! part of the coefficient of the
+ ! 1/epsilon term and the real/imaginary part of the
+ ! constant term.
+ ! corresponds to eqs.(A.5),(A.7) in hep-ph/0504267
+ ! note that for rank one A_j^{2,1}=MINUS I_2(j,...)
+ !
+ ! INPUTS
+ !
+ ! * m1,m2 -- real/complex (type ki), the value of the masses
+ ! * par1 -- an integer, the label of one Feynman parameter
+ ! * par2 -- an integer, the label of the second Feynman parameter
+ ! Note that par1,par2 are ordered internally, i.e.
+ ! par1 <= par2, note also to use zero for par1, par2
+ ! if this Feynman parameter does not exist.
+ ! Use the routine tri_int(t_in,t_out) to order the labels in the module
+ ! tri_croissant (src/module/tri.f90)
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! An real/complex (type ki) array of rank 1 and shape 4/2 corresponding to
+ ! the real/imaginary part of the coefficient of the 1/epsilon term
+ ! and the real/imaginary part of the constant term.
+ !
+ ! EXAMPLE
+ !
+ ! light-like-momentum two point function without Feynman parameters
+ ! f2p_m1m2(s,m1sq,m2sq,0,0)
+ ! with one Feynman parameter in the numerator z_1
+ ! f2p_m1m2(s,m1sq,m2sq,0,1)
+ ! with two Feynman parameters in the numerator z_2^2
+ ! f2p_m1m2(s,m1sq,m2sq,2,2)
+ ! with two Feynman parameters in the numerator z1*z_2
+ ! f2p_m1m2(s,m1sq,m2sq,1,2)
+ !
+ !*****
+ function f2p_m1m2_r(s,m1,m2,par1,par2)
+ ! m1 and m2 are the squared masses
+ ! should only be called if s, m1, m2 are nonzero
+ !
+ real(ki), intent (in) :: s,m1,m2
+ integer, intent (in) :: par1,par2
+ real(ki), dimension(4) :: f2p_m1m2_r, i2sca
+ !
+ f2p_m1m2_r(:) = 0._ki
+ i2sca = i2sm1m2(s,m1,m2)
+ !
+ ! scalar case
+ if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f2p_m1m2_r = i2sca
+ !
+ ! rank one: note that rat or tot is distinguished in i2sm1m2
+ else if ( (par1 == 0) .and. (par2 == 1) ) then
+ !
+ f2p_m1m2_r = i2sca/2._ki - &
+ & (m1-m2)/s/2._ki*( i2sca - i20m1m2(m1,m2) )
+ !
+ else if ( (par1 == 0) .and. (par2 == 2) ) then
+ !
+ f2p_m1m2_r = i2sca/2._ki + &
+ & (m1-m2)/s/2._ki*( i2sca - i20m1m2(m1,m2) )
+ !
+ ! rank two: rat singled out explicitly here
+ else if ( (par1 == 1) .and. (par2 == 1) ) then
+ !
+ f2p_m1m2_r(1) = 1._ki/3._ki
+ f2p_m1m2_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_m1m2_r(3) = (-6._ki*m1**2 + 12._ki*m1*m2 - 6._ki*m2**2 + 9._ki*m1*s - 9._ki*m2*s + s**2 + &
+ & 6._ki*(m1**2 + m2**2 + m2*s + s**2 - 2._ki*m1*(m2 + s))* &
+ & i2sca(3) + &
+ & 6._ki*m1*(m1 - m2 - 2._ki*s)*real(z_log(m1/mu2_scale_par,-1._ki)) - &
+ & 6._ki*m2*(m1 - m2 - s)*real(z_log(m2/mu2_scale_par,-1._ki)))/(18._ki*s**2)
+ !
+ f2p_m1m2_r(4) = ( 6._ki*(m1**2 + m2**2 + m2*s + s**2 - 2._ki*m1*(m2 + s))* &
+ & i2sca(4) + &
+ & 6._ki*m1*(m1 - m2 - 2*s)*aimag(z_log(m1/mu2_scale_par,-1._ki)) - &
+ & 6._ki*m2*(m1 - m2 - s)*aimag(z_log(m2/mu2_scale_par,-1._ki)))/(18._ki*s**2)
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_m1m2_r(3) = (-6._ki*m1**2 + 12._ki*m1*m2 - 6._ki*m2**2 + 9._ki*m1*s - 9._ki*m2*s + s**2 + &
+ & 6._ki*(m1**2 + m2**2 + m2*s + s**2 - 2._ki*m1*(m2 + s))* &
+ & i2sca(3) )/(18._ki*s**2)
+ !
+ f2p_m1m2_r(4) = ( 6._ki*(m1**2 + m2**2 + m2*s + s**2 - 2._ki*m1*(m2 + s))* &
+ & i2sca(4) )/(18._ki*s**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) ) then
+ !
+ f2p_m1m2_r(1) = 1._ki/6._ki
+ f2p_m1m2_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_m1m2_r(3) = (6._ki*m1**2 - 12._ki*m1*m2 + 6._ki*m2**2 - s**2 + &
+ & 3._ki*(-2._ki*m1**2 - 2._ki*m2**2 + m2*s + s**2 + m1*(4._ki*m2 + s))* &
+ & i2sca(3) + &
+ & 3._ki*m1*(-2._ki*m1 + 2._ki*m2 + s)*real(z_log(m1/mu2_scale_par,-1._ki)) + &
+ & 3._ki*m2*( 2._ki*m1 - 2._ki*m2 + s)*&
+ & real(z_log(m2/mu2_scale_par,-1._ki)))/(18._ki*s**2)
+ !
+ f2p_m1m2_r(4) = (3._ki*(-2._ki*m1**2 - 2._ki*m2**2 + m2*s + s**2 + m1*(4._ki*m2 + s))* &
+ & i2sca(4) + &
+ & 3._ki*m1*(-2._ki*m1 + 2._ki*m2 + s)*aimag(z_log(m1/mu2_scale_par,-1._ki)) + &
+ & 3._ki*m2*( 2._ki*m1 - 2._ki*m2 + s)*aimag(z_log(m2/mu2_scale_par,-1._ki)))/ &
+ & (18._ki*s**2)
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_m1m2_r(3) = (6._ki*m1**2 - 12._ki*m1*m2 + 6._ki*m2**2 - s**2 + &
+ & 3._ki*(-2._ki*m1**2 - 2._ki*m2**2 + m2*s + s**2 + m1*(4._ki*m2 + s))* &
+ & i2sca(3) )/(18._ki*s**2)
+ !
+ f2p_m1m2_r(4) = (3._ki*(-2._ki*m1**2 - 2._ki*m2**2 + m2*s + s**2 + m1*(4._ki*m2 + s))* &
+ & i2sca(4) )/(18._ki*s**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) ) then
+ !
+ f2p_m1m2_r(1) = 1._ki/3._ki
+ f2p_m1m2_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_m1m2_r(3) = (-6._ki*m1**2 + 12._ki*m1*m2 - 6._ki*m2**2 - 9._ki*m1*s + 9._ki*m2*s + s**2 + &
+ & 6._ki*(m1**2 + (m2 - s)**2 + m1*(-2._ki*m2 + s))*i2sca(3) + &
+ & 6._ki*m1*(m1 - m2 + s)*real(z_log(m1/mu2_scale_par,-1._ki)) - &
+ & 6._ki*m2*(m1 - m2 + 2._ki*s)*real(z_log(m2/mu2_scale_par,-1._ki)))/(18._ki*s**2)
+ !
+ f2p_m1m2_r(4) = ( 6._ki*(m1**2 + (m2 - s)**2 + m1*(-2._ki*m2 + s))*i2sca(4) + &
+ & 6._ki*m1*(m1 - m2 + s)*aimag(z_log(m1/mu2_scale_par,-1._ki)) - &
+ & 6._ki*m2*(m1 - m2 + 2._ki*s)*aimag(z_log(m2/mu2_scale_par,-1._ki)))/(18._ki*s**2)
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_m1m2_r(3) = ( -6._ki*m1**2 + 12._ki*m1*m2 - 6._ki*m2**2 - 9._ki*m1*s + 9._ki*m2*s + s**2 + &
+ & 6._ki*(m1**2 + (m2 - s)**2 + m1*(-2._ki*m2 + s))* &
+ & i2sca(3) )/(18._ki*s**2)
+ !
+ f2p_m1m2_r(4) = ( 6._ki*(m1**2 + (m2 - s)**2 + m1*(-2._ki*m2 + s))* &
+ & i2sca(4) )/(18._ki*s**2)
+ !
+ end if ! end if rat or tot
+ !
+ end if
+ !
+ !
+ end function f2p_m1m2_r
+ !
+ !
+ function f2p_m1m2_c(s,m1,m2,par1,par2)
+ ! m1 and m2 are the squared masses
+ ! should only be called if s, m1, m2 are nonzero
+ !
+ real(ki), intent (in) :: s
+ complex(ki), intent(in) :: m1,m2
+ integer, intent (in) :: par1,par2
+ complex(ki), dimension(2) :: f2p_m1m2_c, i2sca
+ complex(ki) :: ratpart
+ !
+ f2p_m1m2_c(:) = czero
+ i2sca=i2sm1m2(s,m1,m2)
+ !
+ ! scalar case
+ if ( (par1 == 0) .and. (par2 == 0) ) then
+ !
+ f2p_m1m2_c = i2sca
+ !
+ ! rank one: note that rat or tot is distinguished in i2sm1m2
+ else if ( (par1 == 0) .and. (par2 == 1) ) then
+ !
+ f2p_m1m2_c = i2sca/2._ki - &
+ & (m1-m2)/s/2._ki*( i2sca - i20m1m2(m1,m2) )
+ !
+ else if ( (par1 == 0) .and. (par2 == 2) ) then
+ !
+ f2p_m1m2_c = i2sca/2._ki + &
+ & (m1-m2)/s/2._ki*( i2sca - i20m1m2(m1,m2) )
+ !
+ ! rank two: rat singled out explicitly here
+ else if ( (par1 == 1) .and. (par2 == 1) ) then
+ !
+ f2p_m1m2_c(1) = 1._ki/3._ki
+ !
+ ratpart = (-6._ki*(m1-m2)**2 + 9._ki*s*(m1-m2) + s**2 + &
+ & 6._ki*(m1**2 + m2**2 + m2*s + s**2 - 2._ki*m1*(m2 + s) )*i2sca(2) )/(18._ki*s**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_m1m2_c(2) = ratpart
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_m1m2_c(2) = ratpart + ( m1*(m1 - m2 - 2._ki*s)*z_log(m1/mu2_scale_par,-1._ki) + &
+ & m2*(m2 - m1 + s)*z_log(m2/mu2_scale_par,-1._ki) )/(3._ki*s**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (par1 == 1) .and. (par2 == 2) ) then
+ !
+ f2p_m1m2_c(1) = 1._ki/6._ki
+ !
+ ratpart = ( 6._ki*(m1-m2)**2 - s**2 + 3._ki*(-2._ki*(m1-m2)**2 + s*(m1+m2) +s**2)*i2sca(2) )/(18._ki*s**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_m1m2_c(2) = ratpart
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_m1m2_c(2) = ratpart + (m1*(s - 2._ki*(m1-m2))*z_log(m1/mu2_scale_par,-1._ki) + &
+ & m2*(s + 2._ki*(m1-m2))*z_log(m2/mu2_scale_par,-1._ki))/(6._ki*s**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (par1 == 2) .and. (par2 == 2) ) then
+ !
+ f2p_m1m2_c(1) = 1._ki/3._ki
+ !
+ ratpart = (-6._ki*(m1-m2)**2-9._ki*(m1-m2)*s+s**2+6._ki*((m1-m2)**2 + s*(m1-2*m2) + &
+ & s**2)*i2sca(2))/(18._ki*s**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_m1m2_c(2) = ratpart
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_m1m2_c(2) = ratpart + (m1*(m1 - m2 + s)*z_log(m1/mu2_scale_par,-1._ki) + &
+ & m2*(m2 - m1 -2._ki*s)*z_log(m2/mu2_scale_par,-1._ki))/(3._ki*s**2)
+ !
+ end if ! end if rat or tot
+ !
+ end if
+ !
+ !
+ end function f2p_m1m2_c
+ !
+ ! ****f* src/integral/two_point/i2sm1m2
+ ! NAME
+ !
+ ! Function i2sm1m2
+ !
+ ! USAGE
+ !
+ ! real_dim4 = i2sm1m2(s,m1sq_r,m2sq_r)
+ ! complex_dim2 = i2sm1m2(s,m1sq_r,m2sq_r)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the scalar two point function
+ ! with non-zero momentum and two nonzero masses: I_2(s,m1^2,m2^2)
+ ! in n dimensions
+ !
+ ! INPUTS
+ !
+ ! * msq1,m2sq -- real/complex (type ki), the masses squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 4/2
+ !
+ !*****
+ function i2sm1m2_old(s,m1,m2)
+ !
+ real(ki), intent(in) :: s,m1,m2
+ real(ki), dimension(4) :: i2sm1m2_old
+ real(ki) :: delta,sig
+ complex(ki) :: i2fin,tlog1,tlog2,x1,x2,t1,t2,r1,r2,rlog1,rlog2
+ !
+ delta = s**2+m2**2+m1**2-2._ki*s*m2-2._ki*s*m1-2._ki*m2*m1
+ sig = sign(1._ki,s)
+ !
+ if (delta >= 0._ki) then
+ !
+ x1 = (s+m1-m2+sqrt(delta))/(2._ki*s) ! Im x1 =sign(s)*i*eps
+ x2 = (s+m1-m2-sqrt(delta))/(2._ki*s) ! Im x2 =-sign(s)*i*eps
+ !
+ else !if (delta < 0._ki) then
+ !
+ x1 = (s+m1-m2+(-sig*i_)*sqrt(-delta))/(2._ki*s)
+ x2 = (s+m1-m2-(-sig*i_)*sqrt(-delta))/(2._ki*s)
+ !
+ end if
+ !
+ t1=(x1-1._ki)
+ t2=(x2-1._ki)
+ r1=(x1-1._ki)/x1
+ r2=(x2-1._ki)/x2
+ !
+ if ( .not.(equal_real(aimag(t1),zero))) then
+ tlog1= log(t1)
+ else
+ tlog1=z_log(real(t1),1._ki*sig)
+ endif
+ !
+ if ( .not.(equal_real(aimag(t2),zero))) then
+ tlog2= log(t2)
+ else
+ tlog2=z_log(real(t2),-1._ki*sig)
+ endif
+ !
+ if ( .not.(equal_real(aimag(x1),zero))) then
+ rlog1= log(x1)
+ else
+ rlog1=z_log(real(x1),1._ki*sig)
+ endif
+ !
+ if ( .not.(equal_real(aimag(x2),zero))) then
+ rlog2= log(x2)
+ else
+ rlog2=z_log(real(x2),-1._ki*sig)
+ endif
+ !
+ !
+ ! ***** to be checked ! **************************
+ !
+ i2fin = 2._ki-z_log(s/mu2_scale_par,1._ki) + t1*tlog1-x1*rlog1 + t2*tlog2-x2*rlog2
+ !
+ ! *************************************************
+ !
+ i2sm1m2_old(1) = 1._ki
+ i2sm1m2_old(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ i2sm1m2_old(3) = real(i2fin)
+ i2sm1m2_old(4) = aimag(i2fin)
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1m2_old(3) = 2._ki
+ i2sm1m2_old(4) = 0._ki
+ !
+ end if
+ !
+ end function i2sm1m2_old
+ !
+ ! Direct computation of I2
+ ! We have to compute \int^1_0 dx \ln(s x^2+x (-s+m1-m2)+m2-i \lambda)
+ ! \ln(s x^2+x (-s+m1-m2)+m2-i \lambda) = \ln(s - i \lamda) + \ln(x - x_1) + x - x_2) + \eta(-x_1,-x_2)
+ ! where x_1 and x_2 are the roots of the quadratic form
+ ! Note that in the case of real masses, the eta function is 0 because x_1 and x_2 are complex conjugate
+ ! (this is not the case when m1 and m2 are complex!!!!)
+ ! \int^1_0 dx \ln(x-x_i) = (1-x_i) \ln(1-x_i) + x_i \ln(-x_i)
+ ! When a mass is zero, x_1 (x_2) goes to 1 (0) but this formula is well behaved numerically
+ ! because x*log(x) --> 0 when x-->0 even in Fortran .....
+ !
+ function i2sm1m2_r(s,m1,m2)
+ !
+ real(ki), intent(in) :: s,m1,m2
+ real(ki), dimension(4) :: i2sm1m2_r
+ !
+ real(ki) :: delta, x1_r,x2_r
+ complex(ki) :: x1_c,x2_c
+ complex(ki) :: i2fin,part
+ real(ki) :: sm,rap1,rap2,rapm
+ real(ki) :: sq_ab,delta_t
+ !real(ki), dimension(4) :: old_i2
+ !
+ delta = s*s+m1*m1+m2*m2-2._ki*s*m1-2._ki*s*m2-2._ki*m1*m2
+ sm = sign(un,m1-m2)
+ !
+ if (equal_real(m1,0._ki) ) then
+ !
+ rap1 = grand_glob*sign(un,s)
+ !
+ else
+ !
+ rap1 = s/m1
+ !
+ end if
+ !
+ if (equal_real(m2,0._ki) ) then
+ !
+ rap2 = grand_glob*sign(un,s)
+ !
+ else
+ !
+ rap2 = s/m2
+ !
+ end if
+ !
+ if (equal_real(s,0._ki) .and. .not.(equal_real(abs(m1-m2),0._ki)) ) then
+ !
+ rapm = grand_glob*sign(un,s)
+ !
+ else
+ !
+ rapm = (m1-m2)/s
+ !
+ end if
+ !write(*,*) 'test i2sm1m2_r rap :',s,m1,m2,delta
+ delta_t = abs(s)*(1._ki+rapm*rapm)-2._ki*sign(un,s)*(m1+m2)
+ sq_ab = sqrt(abs(s))
+ !
+ !
+ ! no eta function in this case for x1 and x2 are complex conjugate
+ !
+ if (delta >= 0._ki) then
+ !
+ ! careful treatment of s -->0 (only in the case delta > 0)
+ ! we have to distinguish the case where |s| << m1,|m1-m2| (or |s| << m2,|m1-m2|)
+ ! and the case |s|,|m1-m2| << m1,m2
+ !
+ !write(*,*) 'test i2sm1m2_r rap :',rap1,rap2,rapm,sm
+ if ( (abs(rap1) <= 1.e-4_ki) .or. (abs(rap2) <= 1.e-4_ki) ) then
+ !
+ ! Case |s|,|m1-m2| << m1,m2
+ ! In this case both x1 and x2 --> infinity when s-->0
+ !
+ if ( abs(rapm) <= 1.e-4_ki) then
+ !
+ if (sq_ab > grand_glob) then
+ !
+ x1_r = sign(un,s)*grand_glob
+ x2_r = -sign(un,s)*grand_glob
+ !
+ else
+ !
+ x1_r = (1._ki-rapm)/2._ki + sign(un,s)*sqrt(delta_t)/2._ki/sq_ab
+ x2_r = (1._ki-rapm)/2._ki - sign(un,s)*sqrt(delta_t)/2._ki/sq_ab
+ !
+ end if
+ !
+ if (sm > 0._ki) then
+ !
+ part = z_log(m1/mu2_scale_par,-1._ki)-q(1,1._ki/x1_r,-1._ki)-q(1,1._ki/x2_r,1._ki)
+ !
+ else if (sm <= 0._ki) then
+ !
+ part = z_log(m2/mu2_scale_par,-1._ki)-q(1,1._ki/(1._ki-x1_r),-1._ki)-q(1,1._ki/(1._ki-x2_r),1._ki)
+ !
+ end if
+ !
+ else ! case where |s| << m1,|m1-m2| (or |s| << m2,|m1-m2|)
+ !
+ if (sm > 0._ki) then
+ !
+ x1_r = -2._ki*m2/(-s+m1-m2+sqrt(delta))
+ !
+ if (abs((m1-m2)/s) > grand_glob) then
+ !
+ x2_r = -grand_glob
+ !
+ else
+ !
+ x2_r = ( -(-s+m1-m2) - sqrt(delta) )/2._ki/s ! -i_*lambda
+ !
+ end if
+ !
+ !write(*,*) 'test i2sm1m2_r :',s,m1,m2,x1_r,x2_r
+ part = z_log(m1/mu2_scale_par,-1._ki)-x1_r*z_log((1._ki-x1_r)/(-x1_r),1._ki)-q(1,1._ki/x2_r,1._ki)
+ !write(*,*) 'test i2sm1m2_r :',z_log(s/mu2_scale_par,-1._ki)+(1._ki-x1_r)*z_log(1._ki-x1_r,-1._ki)+x1_r*z_log(-x1_r,-1._ki) &
+ !& + (1._ki-x2_r)*z_log(1._ki-x2_r,1._ki)+x2_r*z_log(-x2_r,1._ki),part
+ !
+ else if (sm <= 0._ki) then
+ !
+ x2_r = 2._ki*m2/(s-m1+m2+sqrt(delta))
+ !
+ if (abs((m1-m2)/s) > grand_glob) then
+ !
+ x1_r = grand_glob
+ !
+ else
+ !
+ x1_r = ( -(-s+m1-m2) + sqrt(delta) )/2._ki/s ! i_*lambda
+ !
+ end if
+ !
+ part = z_log(m2/mu2_scale_par,-1._ki)-q(1,1._ki/(1._ki-x1_r),-1._ki)+(1._ki-x2_r)*z_log((1._ki-x2_r)/(-x2_r),-1._ki)
+ !
+ end if
+ !
+ end if
+ !
+ else ! Case where |s| is large
+ !
+ x1_r = ( -(-s+m1-m2) + sqrt(delta) )/2._ki/s ! +i_*lambda
+ x2_r = ( -(-s+m1-m2) - sqrt(delta) )/2._ki/s ! -i_*lambda
+ !
+ part = z_log(s/mu2_scale_par,-1._ki) &
+ & + (1._ki-x1_r)*z_log(1._ki-x1_r,-1._ki)+x1_r*z_log(-x1_r,-1._ki) &
+ & + (1._ki-x2_r)*z_log(1._ki-x2_r,1._ki)+x2_r*z_log(-x2_r,1._ki)
+ !
+ end if
+ !
+ else
+ !
+ !
+ ! Case |s|,|m1-m2| << m1,m2
+ ! In this case both x1 and x2 --> infinity when s-->0
+ !
+ if ( (abs(rapm) <= 1.e-4_ki) .and. ( (abs(rap1) <= 1.e-4_ki) .or. (abs(rap2) <= 1.e-4_ki) ) ) then
+ !
+ if (sq_ab > grand_glob) then
+ !
+ x1_c = i_*grand_glob
+ x2_c = -i_*grand_glob
+ !
+ else
+ !
+ x1_c = (1._ki-rapm)/2._ki + i_*sqrt(abs(delta_t))/2._ki/sq_ab
+ x2_c = (1._ki-rapm)/2._ki - i_*sqrt(abs(delta_t))/2._ki/sq_ab
+ !
+ end if
+ !
+ if (sm > 0._ki) then
+ !
+ part = z_log(m1/mu2_scale_par,-1._ki)-q(1,1._ki/x1_c,-1._ki)-q(1,1._ki/x2_c,1._ki)
+ !
+ else if (sm <= 0._ki) then
+ !
+ part = z_log(m2/mu2_scale_par,-1._ki)-q(1,1._ki/(1._ki-x1_c),-1._ki)-q(1,1._ki/(1._ki-x2_c),1._ki)
+ !
+ end if
+ !
+ else
+ ! we don't care which is x_1 and x_2, they play a symetric role in the formula
+ !
+ x1_c = ( -(-s+m1-m2) + i_*sqrt(abs(delta)) )/2._ki/s
+ x2_c = ( -(-s+m1-m2) - i_*sqrt(abs(delta)) )/2._ki/s
+ !
+ part = z_log(s/mu2_scale_par,-1._ki) &
+ & + (1._ki-x1_c)*log(1._ki-x1_c)+x1_c*log(-x1_c) &
+ & + (1._ki-x2_c)*log(1._ki-x2_c)+x2_c*log(-x2_c)
+ !part = z_log(m1/mu2_scale_par,-1._ki)-q(1,1._ki/x1_c,-1._ki)-q(1,1._ki/x2_c,1._ki)
+ !write(*,*) 'test i2sm1m2 r cc :',part,z_log(m1/mu2_scale_par,-1._ki)-q(1,1._ki/x1_c,-1._ki)-q(1,1._ki/x2_c,1._ki)
+ !
+ end if
+ !
+ end if
+ !
+ !i2fin = 2._ki - (z_log(s/mu2_scale_par,-1._ki) + part)
+ i2fin = 2._ki - part
+ !
+ !write(*,*) 'test i2sm1m2_r :',s,m1,m2,x1_c,x2_c
+ !write(*,*) 'test i2sm1m2_r :',s,m1,m2,x1_r,x2_r
+ !old_i2 = i2sm1m2_rp(s,m1,m2)
+ !write(*,*) 'old formula r :',old_i2
+ !
+ ! *************************************************
+ !
+ i2sm1m2_r(1) = 1._ki
+ i2sm1m2_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1m2_r(3) = 2._ki
+ i2sm1m2_r(4) = 0._ki
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ i2sm1m2_r(3) = real(i2fin,ki)
+ i2sm1m2_r(4) = aimag(i2fin)
+ !
+ end if
+ !
+ end function i2sm1m2_r
+ !
+ !function i2sm1m2_r(s,m1,m2)
+ function i2sm1m2_rp(s,m1,m2)
+ !
+ real(ki), intent(in) :: s,m1,m2
+ !real(ki), dimension(4) :: i2sm1m2_r
+ real(ki), dimension(4) :: i2sm1m2_rp
+ real(ki) :: delta, smm
+ complex(ki) :: xlog1, xlog2, x1, x2, sqrtd, lm1, lm2
+ complex(ki) :: i2fin
+ logical :: m1greaterm2
+ !
+ ! for m1>=m2, divide the roots x1 and x2 by m1, and vice-versa.
+ if(m1>=m2) then
+ m1greaterm2=.true.
+ elseif (m1<m2) then
+ m1greaterm2=.false.
+ endif
+
+ delta = s**2+m2**2+m1**2-2._ki*s*m2-2._ki*s*m1-2._ki*m2*m1
+ !
+ smm = -s+m1+m2
+ lm1 = cmplx(log(m1/mu2_scale_par),0._ki,ki)
+ lm2 = cmplx(log(m2/mu2_scale_par),0._ki,ki)
+ !
+ if (equal_real(delta,zero) ) then
+ !
+ sqrtd = czero
+ if(m1greaterm2) then
+ x1 = ( cmplx(smm,0._ki,ki) + sqrtd )/m1 ! Im r1 = +i*eps
+ x2 = ( cmplx(smm,0._ki,ki) - sqrtd )/m1 ! Im r2 = -i*eps
+ else
+ x1 = ( cmplx(smm,0._ki,ki) + sqrtd )/m2
+ x2 = ( cmplx(smm,0._ki,ki) - sqrtd )/m2
+ endif
+ xlog1 = czero !!! this is set to zero to allow a faster evaluation
+ xlog2 = czero
+ !
+ else if (delta .gt. 0._ki) then
+ !
+ sqrtd = cmplx(sqrt(delta),0._ki,ki)
+ if(m1greaterm2) then
+ x1 = ( cmplx(smm,0._ki,ki) + sqrtd )/m1 ! Im r1 = +i*eps
+ x2 = ( cmplx(smm,0._ki,ki) - sqrtd )/m1 ! Im r2 = -i*eps
+ else
+ x1 = ( cmplx(smm,0._ki,ki) + sqrtd )/m2
+ x2 = ( cmplx(smm,0._ki,ki) - sqrtd )/m2
+ endif
+ xlog1 = z_log(x1,1._ki)
+ xlog2 = z_log(x2,-1._ki)
+ !
+ else !if (delta .lt. 0._ki) then
+ !
+ sqrtd = cmplx(0._ki,sqrt(-delta),ki)
+ if(m1greaterm2) then
+ x1 = ( cmplx(smm,0._ki,ki) + sqrtd )/m1 ! Im r1 = +i*eps
+ x2 = ( cmplx(smm,0._ki,ki) - sqrtd )/m1 ! Im r2 = -i*eps
+ else
+ x1 = ( cmplx(smm,0._ki,ki) + sqrtd )/m2
+ x2 = ( cmplx(smm,0._ki,ki) - sqrtd )/m2
+ endif
+ xlog1 = z_log(x1,1._ki)
+ xlog2 = z_log(x2,-1._ki)
+ !
+ end if
+ !
+ ! ***** to be checked ! **************************
+ !
+ !first limb only for non-small m1, second only non-small m2
+ if(m1greaterm2) then
+ i2fin = 2._ki + ( -2._ki*cmplx(m1,0._ki,ki)*lm1 -2._ki*cmplx(m2,0._ki,ki)*lm2 &
+ & + x1*cmplx(m1,0._ki,ki)*lm1 + x2*cmplx(m1,0._ki,ki)*lm2 &
+ & - sqrtd*log(4._ki) + 2*sqrtd*xlog1 )/2._ki/s
+ else
+ i2fin = 2._ki + ( -2._ki*cmplx(m1,0._ki,ki)*lm1 -2._ki*cmplx(m2,0._ki,ki)*lm2 &
+ & + x1*cmplx(m2,0._ki,ki)*lm2 + x2*cmplx(m2,0._ki,ki)*lm1 &
+ & - sqrtd*log(4._ki) + 2*sqrtd*xlog1 )/2._ki/s
+ endif
+
+ !!
+ !! *************************************************
+ !!
+ !i2sm1m2_r(1) = 1._ki
+ !i2sm1m2_r(2) = 0._ki
+ !!
+ !if (rat_or_tot_par%rat_selected) then
+ !!
+ !i2sm1m2_r(3) = 2._ki
+ !i2sm1m2_r(4) = 0._ki
+ !!
+ !else !if (rat_or_tot_par%tot_selected) then
+ !!
+ !i2sm1m2_r(3) = real(i2fin,ki)
+ !i2sm1m2_r(4) = aimag(i2fin)
+ !!
+ !end if
+ !
+ ! *************************************************
+ !
+ i2sm1m2_rp(1) = 1._ki
+ i2sm1m2_rp(2) = 0._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1m2_rp(3) = 2._ki
+ i2sm1m2_rp(4) = 0._ki
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ i2sm1m2_rp(3) = real(i2fin,ki)
+ i2sm1m2_rp(4) = aimag(i2fin)
+ !
+ end if
+ !
+ !end function i2sm1m2_r
+ end function i2sm1m2_rp
+ !
+ function i2sm1m2_c(s,m1,m2)
+ !
+ real(ki), intent(in) :: s
+ complex(ki), intent(in) :: m1,m2
+ complex(ki), dimension(2) :: i2sm1m2_c
+ !
+ complex(ki) :: delta,x1,x2
+ complex(ki) :: i2fin,part
+ real(ki) :: sm,rap1,rap2,rapm
+ real(ki) :: m1_r,m2_r,sq_ab
+ complex(ki) :: delta_t
+ real(ki) :: lambda
+ !complex(ki), dimension(2) :: old_i2
+ !
+ delta = s*s+m1*m1+m2*m2-2._ki*s*m1-2._ki*s*m2-2._ki*m1*m2
+ !
+ m1_r = abs(m1)
+ m2_r = abs(m2)
+ sm = sign(un,m1_r-m2_r)
+ lambda = epsilon(1._ki)
+
+ !write(6,*) 'MR enter i2sm1m2_c smm sm ',s,m1,m2,sm,' m ',m1_r,m2_r
+
+ !
+ if (equal_real(m1_r,0._ki) ) then
+ !
+ rap1 = grand_glob*sign(un,s)
+ !
+ else
+ !
+ rap1 = s/m1_r
+ !
+ end if
+ !
+ if (equal_real(m2_r,0._ki) ) then
+ !
+ rap2 = grand_glob*sign(un,s)
+ !
+ else
+ !
+ rap2 = s/m2_r
+ !
+ end if
+ !
+ if (equal_real(s,0._ki) .and. .not.(equal_real(abs(m1-m2),0._ki)) ) then
+ !
+ rapm = grand_glob*sign(un,s)*(m1-m2)/abs(m1-m2)
+ !
+ else
+ !
+ rapm = (m1-m2)/s
+ !
+ end if
+ !
+ delta_t = abs(s)*(1._ki+rapm*rapm)-2._ki*sign(un,s)*(m1+m2)
+ sq_ab = sqrt(abs(s))
+ !
+ !
+ ! careful treatment of s -->0 (only in the case delta > 0)
+ ! we have to distinguish the case where |s| << m1,|m1-m2| (or |s| << m2,|m1-m2|)
+ ! and the case |s|,|m1-m2| << m1,m2
+ !
+ !write(6,*) 'MR test i2sm1m2_c rap :',rap1,rap2,rapm,sm
+ !write(*,*) 'test i2sm1m2_r rap :',rap1,rap2,rapm,sm
+ if ( (abs(rap1) <= 1.e-4_ki) .or. (abs(rap2) <= 1.e-4_ki) ) then
+ !write(6,*) 'MR enter raps<E-4 :',rap1,rap2
+ !
+ ! Case |s|,|m1-m2| << m1,m2
+ ! In this case both x1 and x2 --> infinity when s-->0
+ !
+ if ( abs(rapm) <= 1.e-4_ki) then
+ !
+ !write(6,*) 'MR enter rapm<E-4 :',rapm,sm
+ if (sq_ab > grand_glob) then
+ !
+ x1 = sign(un,s)*grand_glob*sqrt(delta_t)/abs(sqrt(delta_t))
+ x2 = -sign(un,s)*grand_glob*sqrt(delta_t)/abs(sqrt(delta_t))
+ !
+ else
+ !
+ x1 = (1._ki-rapm)/2._ki + sign(un,s)*sqrt(delta_t)/2._ki/sq_ab
+ x2 = (1._ki-rapm)/2._ki - sign(un,s)*sqrt(delta_t)/2._ki/sq_ab
+ !
+ end if
+ !
+ if (sm > 0._ki) then
+ !
+ !part = z_log(m1/mu2_scale_par,-1._ki)-q(1,1._ki/x1,-1._ki)-q(1,1._ki/x2,1._ki) &
+ !& - eta(1._ki-x1,1._ki-x2)
+ part = z_log(m1/mu2_scale_par,-1._ki)-q(1,1._ki/x1,-1._ki)-q(1,1._ki/x2,1._ki) &
+ & - eta(1._ki-x1,1._ki-x2,(m1-i_*lambda)/s) + eta(-x1,-x2,(m2-i_*lambda)/s)
+ !
+ else if (sm <= 0._ki) then
+ !
+ !part = z_log(m2/mu2_scale_par,-1._ki)-q(1,1._ki/(1._ki-x1),-1._ki)-q(1,1._ki/(1._ki-x2),1._ki) &
+ !& - eta(-x1,-x2)
+ part = z_log(m2/mu2_scale_par,-1._ki)-q(1,1._ki/(1._ki-x1),-1._ki)-q(1,1._ki/(1._ki-x2),1._ki)
+ !
+ end if
+
+ !write(6,*) 'MR rapm<E-4,rap12<E-4 x part :',x1,x2,part
+ !
+ else ! case where |s| << m1,|m1-m2| (or |s| << m2,|m1-m2|)
+ !
+ if (sm > 0._ki) then
+ !
+ x1 = -2._ki*m2/(-s+m1-m2+sqrt(delta))
+ !
+ if (abs((m1-m2)/s) > grand_glob) then
+ !
+ x2 = -grand_glob*(-s+m1-m2)/abs(-s+m1-m2)
+ !
+ else
+ !
+ x2 = ( -(-s+m1-m2) - sqrt(delta) )/2._ki/s ! -i_*lambda
+ !
+ end if
+ !
+ !part = log(m1/mu2_scale_par) - x1*log((1._ki-x1)/(-x1)) - q(1,1._ki/x2,1._ki) &
+ !& - eta(1._ki-x1,1._ki-x2)
+ part = log(m1/mu2_scale_par) - x1*log((1._ki-x1)/(-x1)) - q(1,1._ki/x2,1._ki) &
+ & - eta(1._ki-x1,1._ki-x2,(m1-i_*lambda)/s) + eta(-x1,-x2,(m2-i_*lambda)/s)
+ !
+ else if (sm <= 0._ki) then
+ !
+ x2 = 2._ki*m2/(s-m1+m2+sqrt(delta))
+ !
+ if (abs((m1-m2)/s) > grand_glob) then
+ !
+ x1 = grand_glob*(-s+m1-m2)/abs(-s+m1-m2)
+ !
+ else
+ !
+ x1 = ( -(-s+m1-m2) + sqrt(delta) )/2._ki/s ! i_*lambda
+ !
+ end if
+ !
+ !part = log(m2/mu2_scale_par) - q(1,1._ki/(1._ki-x1),-1._ki) + (1._ki-x2)*log((1._ki-x2)/(-x2)) &
+ !& - eta(-x1,-x2)
+ part = log(m2/mu2_scale_par) - q(1,1._ki/(1._ki-x1),-1._ki) + (1._ki-x2)*log((1._ki-x2)/(-x2))
+ !
+ end if
+ !
+ !write(6,*) 'MR rap12<E-4 only x part :',x1,x2,part
+
+
+ end if
+ !
+ else ! Case where |s| is large
+ !
+ !write(6,*) 'MR rap12>E-4 inputs smm :',s,m1,m2,' d ',delta,' mu ',mu2_scale_par
+ x1 = ( -(-s+m1-m2) + sqrt(delta) )/2._ki/s ! +i_*lambda
+ x2 = ( -(-s+m1-m2) - sqrt(delta) )/2._ki/s ! -i_*lambda
+ !
+ !write(6,*) 'MR rap12>E-4 for part log ',log(s/mu2_scale_par),' ar ',s/mu2_scale_par,' 1-x ln 1-x ',&
+!&(1._ki-x1)*log(1._ki-x1),(1._ki-x2)*log(1._ki-x2),' x ln -x ',x1*log(-x1),x2*log(-x2)
+
+! part = z_log(s/mu2_scale_par) &
+! & + (1._ki-x1)*log(1._ki-x1)+x1*log(-x1) &
+! & + (1._ki-x2)*log(1._ki-x2)+x2*log(-x2)
+ !part = z_log(s/mu2_scale_par,-1._ki) &
+ !& + (1._ki-x1)*log(1._ki-x1) + x1*log(-x1) &
+ !& + (1._ki-x2)*log(1._ki-x2) + x2*log(-x2) + eta(-x1,-x2)
+ part = z_log(s/mu2_scale_par,-1._ki) &
+ & + (1._ki-x1)*log(1._ki-x1) + x1*log(-x1) &
+ & + (1._ki-x2)*log(1._ki-x2) + x2*log(-x2) &
+ & + eta(-x1,-x2,(m2-i_*lambda)/s)
+
+ !write(6,*) 'MR rap12>E-4 x part :',x1,x2,part
+ !write(*,*) 'test eta mod :',eta_mod(real(-x1,ki),aimag(-x1),real(-x2,ki),aimag(-x2),aimag((m2-i_*epsilon(1._ki))/s) )
+ !write(*,*) 'test eta :',eta(-x1,-x2,(m2-i_*lambda)/s)
+ !
+ end if
+ !
+ !
+ !i2fin = 2._ki - (z_log(s/mu2_scale_par,-1._ki) + part)
+ i2fin = 2._ki - part
+ !
+ !write(*,*) 'test i2sm1m2_c :',s,m1,m2,x1,x2
+ !old_i2 = i2sm1m2_cp(s,m1,m2)
+ !write(*,*) 'old formula c :',old_i2
+ !
+ ! *************************************************
+ !
+ i2sm1m2_c(1) = 1._ki
+ !
+
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1m2_c(2) = 2._ki
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ i2sm1m2_c(2) = i2fin
+ !
+ end if
+ !
+ end function i2sm1m2_c
+ !
+ !function i2sm1m2_c(s,m1,m2)
+ function i2sm1m2_cp(s,m1,m2)
+ !
+ real(ki), intent(in) :: s
+ complex(ki) , intent(in) :: m1, m2
+ !complex(ki), dimension(2) :: i2sm1m2_c
+ complex(ki), dimension(2) :: i2sm1m2_cp
+ real(ki) :: sig
+ complex(ki) :: delta, smm, sc
+ complex(ki) :: i2finprevious, i2fin, xlog1, xlog2, x1, x2, sqrtd, lm1, lm2
+ logical :: usebothforms,useonlynewform,m1greaterm2
+ !
+ usebothforms=.false.
+ useonlynewform=.true.
+
+ if(usebothforms.or..not.useonlynewform) then
+
+ sc = cmplx(s,zero,ki)
+ !
+ smm = -sc+m1+m2
+ ! delta = sc**2+m2**2+m1**2-2._ki*sc*m2-2._ki*sc*m1-2._ki*m2*m1
+ delta = smm*smm - 4._ki * m1*m2
+ !
+ lm1 = z_log(m1/mu2_scale_par,-1._ki)
+ lm2 = z_log(m2/mu2_scale_par,-1._ki)
+ !
+ if ( (equal_real(aimag(delta),zero) .and. (real(delta,ki) .lt. zero) ) ) then
+ !
+ sig = sign(un,s)
+ sqrtd = (sig*i_)*sqrt(-delta)
+ !
+ else
+ !
+ sqrtd = sqrt(delta)
+ !
+ end if
+ !
+ x1 = (smm + sqrtd)/m1
+ x2 = (smm - sqrtd)/m1
+ !
+ !
+ xlog1 = z_log(x1, 1._ki) !!! If im-part vanishes, the real part is always positive! (for real s).
+ xlog2 = z_log(x2,-1._ki) !!! eps-prescription checked for maximal complex s,
+!!! (si=-(Sqrt[m1gam1]+Sqrt[m2gam2])^2!
+ ! !!! in case of real masses, the right branch is taken!!
+ !
+ ! *** This needs to be checked ***
+ !
+ i2fin = 2._ki + ( (smm-2._ki*m1)*lm1 + &
+ & (smm-2._ki*m2)*lm2 + sqrtd*(xlog1-xlog2) )/2._ki/sc
+
+ if(usebothforms) i2finprevious=i2fin
+ !
+! write(6,*) "MR says: For smm ",smm," m1 ",m1,"sqrtd",sqrtd," xlog1 ",xlog1," xlog2 ",xlog2," sc ",sc
+! write(6,*) " i2fin previous is ",i2finprevious
+
+ endif !either use both or (not use new)
+
+
+ if(usebothforms.or.useonlynewform) then
+
+ ! for abs(m1)>=abs(m2), divide the roots x1 and x2 by m1, and vice-versa.
+ ! for similar masses, the change will make little difference, so in terms of this change we don't need to worry too much about the border region (although it is not tested).
+ if(abs(m1)>=abs(m2)) then
+ m1greaterm2=.true.
+ elseif (abs(m1)<abs(m2)) then
+ m1greaterm2=.false.
+ endif
+
+ sc = cmplx(s,zero,ki)
+ !
+ smm = -sc+m1+m2
+ ! delta = sc**2+m2**2+m1**2-2._ki*sc*m2-2._ki*sc*m1-2._ki*m2*m1
+ delta = smm*smm - 4._ki * m1*m2
+ !
+ lm1 = z_log(m1/mu2_scale_par,-1._ki)
+ lm2 = z_log(m2/mu2_scale_par,-1._ki)
+ !
+ if ( (equal_real(aimag(delta),zero) .and. (real(delta,ki) .lt. zero) ) ) then
+ !
+ sig = sign(un,s)
+ sqrtd = (sig*i_)*sqrt(-delta)
+ !
+ else
+ !
+ sqrtd = sqrt(delta)
+ !
+ end if
+ !
+ if(m1greaterm2) then
+ x1 = (smm + sqrtd)/m1
+ x2 = (smm - sqrtd)/m1
+ else
+ x1 = (smm + sqrtd)/m2
+ x2 = (smm - sqrtd)/m2
+ endif !m1>m2
+
+ !
+ !
+ xlog1 = z_log(x1, 1._ki) !!! If im-part vanishes, the real part is always positive! (for real s).
+ xlog2 = z_log(x2,-1._ki) !!! eps-prescription checked for maximal complex s,
+!!! (si=-(Sqrt[m1gam1]+Sqrt[m2gam2])^2!
+ ! !!! in case of real masses, the right branch is taken!!
+
+
+
+ !
+ ! *** This needs to be checked ***
+ !
+ !first limb only for non-small m1, second only non-small m2
+ if(m1greaterm2) then
+ i2fin = 2._ki + ( -2._ki*m1*lm1 -2._ki*m2*lm2 &
+ & + x1*m1*lm1 + x2*m1*lm2 &
+ & - sqrtd*log(4._ki) + 2*sqrtd*xlog1 )/2._ki/sc
+ else
+ i2fin = 2._ki + ( -2._ki*m1*lm1 -2._ki*m2*lm2 &
+ & + x1*m2*lm2 + x2*m2*lm1 &
+ & - sqrtd*log(4._ki) + 2*sqrtd*xlog1 )/2._ki/sc
+ endif
+
+! write(6,*) "MR says: NEW For smm ",smm," m1 ",m1,"sqrtd",sqrtd," xlog1 ",xlog1," xlog2 ",xlog2," sc ",sc
+! write(6,*) " i2fin NEW is ",i2fin
+
+ endif ! either useboth or usenew
+
+ if(usebothforms) write(6,*) "MR says i2fin previous-new ",i2finprevious-i2fin
+
+ !! *************************************************
+ !!
+ !i2sm1m2_c(1) = 1._ki
+ !!
+
+ !if (rat_or_tot_par%rat_selected) then
+ !!
+ !i2sm1m2_c(2) = 2._ki
+ !!
+ !else !if (rat_or_tot_par%tot_selected) then
+ !!
+ !i2sm1m2_c(2) = i2fin
+ !!
+ !end if
+ ! *************************************************
+ !
+ i2sm1m2_cp(1) = 1._ki
+ !
+
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1m2_cp(2) = 2._ki
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ i2sm1m2_cp(2) = i2fin
+ !
+ end if
+ !
+ !end function i2sm1m2_c
+ end function i2sm1m2_cp
+ !
+ !
+ !
+ ! ****f* src/integral/two_point/i2sm1
+ ! NAME
+ !
+ ! Function i2sm1
+ !
+ ! USAGE
+ !
+ ! real_dim4 = i2sm1(s,msq_r)
+ ! complex_dim2 = i2sm1(s,msq)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the scalar two point function
+ ! with non-zero momentum and m2=0: I_2(s,m^2,0)
+ ! in n dimensions
+ !
+ ! INPUTS
+ !
+ ! * msq -- a real/complex (type ki), the mass squared
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect, it uses the value of rat_or_tot_par
+ ! (in src/module/parametre.f90)
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a real/complex (type ki) array of rank 1 and shape 4/2
+ !
+ !*****
+ function i2sm1_r(s1,m1s)
+ !
+ real(ki), intent(in) :: s1,m1s
+ real(ki), dimension(4) :: i2sm1_r
+ real(ki) :: delta
+ !
+ delta=1000*epsilon(1._ki)
+ !
+ i2sm1_r(1) = 1._ki
+ i2sm1_r(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ if ( abs(m1s-s1) > delta) then
+ !
+ i2sm1_r(3) = real( -z_log(m1s/mu2_scale_par,-1._ki)+2._ki+ &
+ & (m1s-s1)/s1*( z_log((m1s-s1)/mu2_scale_par,-1._ki) - &
+ & z_log(m1s/mu2_scale_par,-1._ki) ) )
+ i2sm1_r(4) = aimag( -z_log(m1s/mu2_scale_par,-1._ki)+2._ki+ &
+ & (m1s-s1)/s1*( z_log((m1s-s1)/mu2_scale_par,-1._ki) - &
+ & z_log(m1s/mu2_scale_par,-1._ki) ) )
+ !
+ else
+ !
+ i2sm1_r(3) = real( -z_log(m1s/mu2_scale_par,-1._ki)+2._ki )
+ i2sm1_r(4) = aimag( -z_log(m1s/mu2_scale_par,-1._ki)+2._ki )
+ !
+ end if
+ !
+ else !if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1_r(3) = 2._ki
+ i2sm1_r(4) = 0._ki
+ !
+ end if
+ !
+ end function i2sm1_r
+ !
+ function i2sm1_c(s1,m1s)
+ !
+ real(ki), intent(in) :: s1
+ complex(ki), intent(in) :: m1s
+ complex(ki), dimension(2) :: i2sm1_c
+ real(ki) :: delta
+ !
+ delta=1000*epsilon(1._ki)
+ !
+ i2sm1_c(1) = cmplx(1._ki,0._ki,ki)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ i2sm1_c(2) = cmplx(2._ki,0._ki,ki)
+ !
+ else !if (rat_or_tot_par%tot_selected) then
+ !
+ if ( abs( m1s - cmplx(s1,0._ki,ki) ) > delta) then
+ !
+ i2sm1_c(2) = 2._ki + ( (m1s-s1)*z_log((m1s-s1)/mu2_scale_par,-1._ki) - &
+ & m1s*z_log(m1s/mu2_scale_par,-1._ki) )/s1
+ !
+ else
+ !
+ i2sm1_c(2) = 2._ki - z_log(m1s/mu2_scale_par,-1._ki)
+ !
+ end if
+ !
+ end if
+ !
+ end function i2sm1_c
+ !
+ !
+end module function_2p_m1m2
Index: 95/branches/golem95_without_olo_cmake/src/integrals/two_point/generic_function_2p.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/two_point/generic_function_2p.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/two_point/generic_function_2p.f90 (revision 119)
@@ -0,0 +1,2024 @@
+!****h* src/integrals/two_point/generic_function_2p
+!~ changed 13.5.2010 to include scale (mu^2)^eps
+!~ the default scale is 1, defined in parametre.f90
+! NAME
+!
+! Module generic_function_2p
+!
+! USAGE
+!
+! use generic_function_2p
+!
+! DESCRIPTION
+!
+! This module contains the generic routines to compute the
+! two point functions in n and n+2 dimensions
+!
+! OUTPUT
+!
+! It exports two public routine:
+! * f2p -- a function to compute the two point function in n dimensions
+! * f2p_np2 -- a function to compute the two point function in n+2 dimensions
+!
+! USES
+!
+! * precision (src/module/precision.f90)
+! * array (src/module/array.f90)
+! * logarithme (src/module/z_log.f90)
+! * tri_croissant (src/module/tri.f90)
+! * constante (src/module/constante.f90)
+! * sortie_erreur (src/module/sortie_erreur.f90)
+! * parametre (src/module/parametre.f90)
+! * function_2p0m_1mi (src/integrals/two_point/function_2p0m_1mi.f90)
+! * function_2p_m1m2 (src/integrals/two_point/function_2p_m1m2.f90)
+! * s_matrix_type (src/module/s_matrix_type.f90)
+!
+!*****
+module generic_function_2p
+ !
+ use precision_golem
+ use array
+ use logarithme
+ use tri_croissant
+ use constante
+ use sortie_erreur, only : tab_erreur_par,catch_exception
+ use parametre
+ use equal
+ use s_matrix_type
+ use function_2p0m_1mi
+ use function_2p_m1m2
+ !
+ implicit none
+ !
+ private
+ !
+ interface f2p
+ !
+ module procedure f2p_p
+ !
+ end interface
+ !
+ interface f2p_np2
+ !
+ module procedure f2p_np2_p
+ !
+ end interface
+ !
+ public :: f2p, f2p_np2
+ public :: f2p_ra, f2p_np2_ra
+ !
+contains
+ !
+ !****f* src/integrals/two_point/generic_function_2p/f2p
+ ! NAME
+ !
+ ! Function f2p
+ !
+ ! USAGE
+ !
+ ! cmplx_dim2 = f2p(s_mat_p,b_pro,parf1,parf2)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic two point function in n dimensions,
+ ! with or without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat -- a derived type s_matrix_poly, the S matrix
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ ! * parf1 -- an integer (optional), the label of the one Feynman parameter
+ ! * parf2 -- an integer (optional), the label of the second Feynman parameter
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2
+ !
+ !
+ !*****
+ function f2p_ra(s_mat_p,b_pro,parf1,parf2)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent(in) :: b_pro
+ integer, intent(in), optional :: parf1, parf2
+ real(ki), dimension(4) :: f2p_ra
+ complex(ki), dimension(2) :: f2p_ca
+ !
+ f2p_ca = f2p_p(s_mat_p,b_pro,parf1=parf1,parf2=parf2)
+ !
+ f2p_ra(1) = real(f2p_ca(1),ki)
+ f2p_ra(2) = aimag(f2p_ca(1))
+ f2p_ra(3) = real(f2p_ca(2),ki)
+ f2p_ra(4) = aimag(f2p_ca(2))
+ !
+ end function f2p_ra
+ !
+ function f2p_p(s_mat_p,b_pro,parf1,parf2)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent(in) :: b_pro
+ integer, intent(in), optional :: parf1, parf2
+ complex(ki), dimension(2) :: f2p_p
+ !
+ if (iand(s_mat_p%b_cmplx, b_pro) .eq. 0 ) then
+ !
+ f2p_p = f2p_r(s_mat_p%pt_real, b_pro, parf1=parf1, parf2=parf2)
+ !
+ else
+ !
+ f2p_p = f2p_c(s_mat_p%pt_cmplx, b_pro, parf1=parf1, parf2=parf2)
+ !
+ end if
+ !
+ end function f2p_p
+ !
+ function f2p_r(s_mat_r,b_pro,parf1,parf2)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2
+ complex(ki), dimension(2) :: f2p_r
+ !
+ real(ki), dimension(4) :: i2sonem,f2p_rr
+ integer :: par1,par2
+ integer, dimension(2) :: z_param_ini,z_param_out
+ real(ki) :: arg1, s12, mass1, mass2, diffm
+ integer :: m1,m2,dim_pro
+ integer, dimension(2) :: s
+ logical :: sz, mz1, mz2
+ !
+ par1 = 0
+ par2 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ !
+ z_param_ini = (/ par1,par2 /)
+ !
+ where (z_param_ini /= 0)
+ !
+ z_param_ini = locateb(z_param_ini,b_pro)
+ !
+ elsewhere
+ !
+ z_param_ini = 0
+ !
+ end where
+ !
+ if ( minval(z_param_ini) == -1 ) then
+ !
+ f2p_rr(:) = 0._ki
+ !
+ else
+ !
+ call tri_int2(z_param_ini,z_param_out)
+ !
+ if (b_pro<256) then
+ dim_pro = bit_count(b_pro)
+ s = bit_sets(8*b_pro:8*b_pro+dim_pro-1)
+ else
+ dim_pro = countb(b_pro)
+ s = unpackb(b_pro,dim_pro)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ !
+ arg1 = s_mat_r(m1,m2)
+ !
+ ! internal masses
+ mass1 = -s_mat_r(m1,m1)/2._ki
+ mass2 = -s_mat_r(m2,m2)/2._ki
+ s12 = arg1+mass1+mass2
+ !
+ call cut_s(s12,mass1,mass2)
+ !
+ mz1 = equal_real(mass1, zero,1000._ki) ! 1000 added by MR 10.11.11
+ mz2 = equal_real(mass2, zero,1000._ki) ! 1000 added by MR 10.11.11
+ sz = equal_real(s12,zero,1000._ki) ! 1000 added by MR 10.11.11
+ !
+ diffm=mass1-mass2
+ !
+ if ( (sz) .and. (mz1) .and. (mz2) ) then
+ !
+ f2p_rr(:) = 0._ki
+ ! (scaleless two-point function is zero)
+ !
+ else if ( .not.(sz) .and. (mz1) .and. (mz2) ) then
+ ! massless case
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr(1) = 1._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = 2._ki-real(z_log(-s12/mu2_scale_par,-1._ki))
+ f2p_rr(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 2._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) /= 0) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = 1._ki-real(z_log(-s12/mu2_scale_par,-1._ki))/2._ki
+ f2p_rr(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 1._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if
+ !
+ else if ( (z_param_out(1) /= 0) .and. (z_param_out(2) /= 0) ) then
+ !
+ if (z_param_out(1) == z_param_out(2)) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = 13._ki/18._ki-real(z_log(-s12/mu2_scale_par,-1._ki))/3._ki
+ f2p_rr(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 13._ki/18._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if
+ !
+ else
+ !
+ f2p_rr(1) = 1._ki/6._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = 5._ki/18._ki-real(z_log(-s12/mu2_scale_par,-1._ki),ki)/6._ki
+ f2p_rr(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))/6._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 5._ki/18._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if z1==z2
+ !
+ end if ! end test value of z1,z2
+ !
+ !
+ !*************** massive cases *******************************
+ ! added 07.08.09
+ ! assumes real masses in numerator
+ ! ************************************************************
+ else if ( (sz) .and. (.not.(mz1)) .and. (mz2) ) then
+ ! case p^2=0, m1 nonzero, m2=0
+ ! write(6,*) 'case (2b): s12 =0, m2 =0, m1 nonzero'
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = i20m1(mass1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -(-1._ki + 2._ki*real(z_log(mass1/mu2_scale_par,-1._ki)))/4._ki
+ f2p_rr(4) = -aimag(z_log(mass1/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 1._ki/4._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -(-3._ki + 2._ki*real(z_log(mass1/mu2_scale_par,-1._ki)))/4._ki
+ f2p_rr(4) = -aimag(z_log(mass1/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 3._ki/4._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (1._ki - 3._ki*real(z_log(mass1/mu2_scale_par,-1._ki)))/9._ki
+ f2p_rr(4) = - aimag(z_log(mass1/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 1._ki/9._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/6._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (5._ki - 6._ki*real(z_log(mass1/mu2_scale_par,-1._ki)))/36._ki
+ f2p_rr(4) = - aimag(z_log(mass1/mu2_scale_par,-1._ki))/6._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 5._ki/36._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (11 - 6*real(z_log(mass1/mu2_scale_par,-1._ki)))/18._ki
+ f2p_rr(4) = - aimag(z_log(mass1/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 11._ki/18._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ else if ( (sz) .and. (mz1) .and. (.not.(mz2)) ) then
+ ! case p^2=0, m2 nonzero, m1=0
+ ! write(6,*) 'case (2a) s12 =0, m1 =0, m2 nonzero'
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = i20m1(mass2)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -(-3._ki + 2._ki*real(z_log(mass2/mu2_scale_par,-1._ki)))/4._ki
+ f2p_rr(4) = -aimag(z_log(mass2/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 3._ki/4._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -(-1._ki + 2._ki*real(z_log(mass2/mu2_scale_par,-1._ki)))/4._ki
+ f2p_rr(4) = -aimag(z_log(mass2/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 1._ki/4._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (11._ki - 6._ki*real(z_log(mass2/mu2_scale_par,-1._ki)))/18._ki
+ f2p_rr(4) = - aimag(z_log(mass2/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 11._ki/18._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/6._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (5._ki - 6._ki*real(z_log(mass2/mu2_scale_par,-1._ki)))/36._ki
+ f2p_rr(4) = - aimag(z_log(mass2/mu2_scale_par,-1._ki))/6._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 5._ki/36._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (1._ki - 3._ki*real(z_log(mass2/mu2_scale_par,-1._ki)))/9._ki
+ f2p_rr(4) = - aimag(z_log(mass2/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = 1._ki/9._ki
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ ! ** eq. (A.10) ****
+ else if ( (sz) .and. (.not.(mz1)) .and. (equal_real(diffm,zero)) ) then
+ ! case p^2=0, m1 nonzero, m2=m1
+ ! write(6,*) 'case (2c): s12 =0, m1 nonzero, m2=m1'
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = f2p0m_1mi(mass1,0,0)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr = f2p0m_1mi(mass1,0,1)
+ !
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p0m_1mi(mass1,0,2)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr = f2p0m_1mi(mass1,1,1)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p0m_1mi(mass1,1,2)
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p0m_1mi(mass1,2,2)
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ ! ** eq. (A.8) ****
+ else if ( (sz) .and. (.not.(mz1)) .and. (.not.(mz2)) .and. .not.(equal_real(diffm,zero)) ) then
+ ! case p^2=0, m1 nonzero, m2 nonzero, m2 NOT=m1
+ ! write(6,*) 'case (2d): s12 =0, m1 and m2 nonzero, m2 not= m1 '
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = f2p0m_m1m2(mass1,mass2,0,0)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr = f2p0m_m1m2(mass1,mass2,0,1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p0m_m1m2(mass1,mass2,0,2)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr = f2p0m_m1m2(mass1,mass2,1,1)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p0m_m1m2(mass1,mass2,1,2)
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p0m_m1m2(mass1,mass2,2,2)
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ************ now case s12 nonzero **********************
+ else if ( (.not.(sz)) .and. (mz1) .and. (.not.(mz2)) ) then
+ ! case p^2 nonzero, m1=0, m2 nonzero
+ ! write(6,*) 'case (1a): s12 nonzero, m2 nonzero, m1 =0'
+ !
+ i2sonem=i2sm1(s12,mass2)
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = i2sonem
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -(mass2 - (mass2 + s12)*i2sonem(3) - &
+ & mass2*real(z_log(mass2/mu2_scale_par,-1._ki)))/(2._ki*s12)
+ f2p_rr(4) = -( - (mass2 + s12)*i2sonem(4) - &
+ & mass2*aimag(z_log(mass2/mu2_scale_par,-1._ki)))/(2._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = -( mass2 - (mass2 + s12)*i2sonem(3) )/(2._ki*s12)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -( (mass2 - s12)*i2sonem(3) + mass2*(-1._ki + &
+ & real(z_log(mass2/mu2_scale_par,-1._ki))) )/(2._ki*s12)
+ f2p_rr(4) = -( (mass2 - s12)*i2sonem(4) + &
+ & mass2*aimag(z_log(mass2/mu2_scale_par,-1._ki)) )/(2._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = -((mass2 - s12)*i2sonem(3) - mass2)/(2._ki*s12)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass2**2 - 9._ki*mass2*s12 + s12**2 + &
+ & 6._ki*(mass2**2 + mass2*s12 + s12**2)*i2sonem(3) + &
+ & 6._ki*mass2*(mass2 + s12)* &
+ & real(z_log(mass2/mu2_scale_par,-1._ki)) )/(18._ki*s12**2)
+ f2p_rr(4) = ( 6._ki*(mass2**2 + mass2*s12 + s12**2)*i2sonem(4) + &
+ & 6._ki*mass2*(mass2 + s12)* &
+ & aimag(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = ( -6._ki*mass2**2 - 9._ki*mass2*s12 + s12**2 + &
+ & 6._ki*(mass2**2 + mass2*s12 + s12**2)*i2sonem(3) )/(18._ki*s12**2)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/6._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (6._ki*mass2**2 - s12**2 + &
+ & 3._ki*(-2._ki*mass2**2 + mass2*s12 + s12**2)*i2sonem(3) + &
+ & 3._ki*mass2*(-2._ki*mass2 + s12)* &
+ & real(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ f2p_rr(4) = ( 3._ki*(-2._ki*mass2**2 + mass2*s12 + s12**2)*i2sonem(4) + &
+ & 3._ki*mass2*(-2._ki*mass2 + s12)* &
+ & aimag(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = (6._ki*mass2**2 - s12**2 + &
+ & 3._ki*(-2*mass2**2 + mass2*s12 + s12**2)*i2sonem(3) )/(18._ki*s12**2)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass2**2 + 9._ki*mass2*s12 + s12**2 + &
+ & 6._ki*(mass2 - s12)**2*i2sonem(3) + &
+ & 6._ki*mass2*(mass2 - 2._ki*s12)* &
+ & real(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ f2p_rr(4) = ( 6._ki*(mass2 - s12)**2*i2sonem(4) + &
+ & 6._ki*mass2*(mass2 - 2._ki*s12)* &
+ & aimag(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass2**2 + 9._ki*mass2*s12 + s12**2 + &
+ & 6._ki*(mass2 - s12)**2*i2sonem(3) )/(18._ki*s12**2)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ ! ******************
+ else if ( (.not.(sz)) .and. (.not.(mz1)) .and. (mz2) ) then
+ ! case p^2 nonzero, m1 nonzero, m2=0
+ ! write(6,*) 'case (1b): s12 nonzero, m1 nonzero, m2 =0'
+ !
+ i2sonem=i2sm1(s12,mass1)
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = i2sonem
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -( (mass1 - s12)*i2sonem(3) + &
+ & mass1*(-1._ki + real(z_log(mass1/mu2_scale_par,-1._ki))))/(2._ki*s12)
+ f2p_rr(4) = -( (mass1 - s12)*i2sonem(4) + &
+ & mass1*aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(2._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = -((mass1 - s12)*i2sonem(3) - mass1)/(2._ki*s12)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/2._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = -(mass1 - (mass1 + s12)*i2sonem(3) - &
+ & mass1*real(z_log(mass1/mu2_scale_par,-1._ki)))/(2._ki*s12)
+ f2p_rr(4) = -( - (mass1 + s12)*i2sonem(4) - &
+ & mass1*aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(2._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = -( mass1 - (mass1 + s12)*i2sonem(3) )/(2._ki*s12)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass1**2 + 9._ki*mass1*s12 + s12**2 + &
+ & 6._ki*(mass1 - s12)**2*i2sonem(3) + &
+ & 6._ki*mass1*(mass1 - 2*s12)* &
+ & real(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ f2p_rr(4) =( 6._ki*(mass1 - s12)**2*i2sonem(4) + &
+ & 6._ki*mass1*(mass1 - 2._ki*s12)* &
+ & aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass1**2 + 9._ki*mass1*s12 + s12**2 + &
+ & 6._ki*(mass1 - s12)**2*i2sonem(3) )/(18._ki*s12**2)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/6._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (6._ki*mass1**2 - s12**2 + &
+ & 3._ki*(-2._ki*mass1**2 + mass1*s12 + s12**2)*i2sonem(3) + &
+ & 3._ki*mass1*(-2._ki*mass1 + s12)* &
+ & real(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ f2p_rr(4) = ( 3._ki*(-2._ki*mass1**2 + mass1*s12 + s12**2)*i2sonem(4) + &
+ & 3._ki*mass1*(-2._ki*mass1 + s12)* &
+ & aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = (6._ki*mass1**2 - s12**2 + &
+ & 3._ki*(-2._ki*mass1**2 + mass1*s12 + s12**2)*i2sonem(3) )/(18._ki*s12**2)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr(1) = 1._ki/3._ki
+ f2p_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass1**2 - 9._ki*mass1*s12 + s12**2 + &
+ & 6._ki*(mass1**2 + mass1*s12 + s12**2)*i2sonem(3) + &
+ & 6._ki*mass1*(mass1 + s12)* &
+ & real(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ f2p_rr(4) = ( 6._ki*(mass1**2 + mass1*s12 + s12**2)*i2sonem(4) + &
+ & 6._ki*mass1*(mass1 + s12)* &
+ & aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_rr(3) = (-6._ki*mass1**2 - 9._ki*mass1*s12 + s12**2 + &
+ & 6._ki*(mass1**2 + mass1*s12 + s12**2)*i2sonem(3))/(18._ki*s12**2)
+ f2p_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ else if ( (.not.(sz)) .and. (.not.(mz1)) .and. (.not.(mz2)) ) then
+ ! case p^2 nonzero, m1 nonzero, m2 nonzero, eq.(A.5)
+ ! includes case m1=m2
+ ! write(6,*) 'cases (1c) and (1d): s12 nonzero, m1 and m2 nonzero'
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_rr = f2p_m1m2(s12,mass1,mass2,0,0)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr = f2p_m1m2(s12,mass1,mass2,0,1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p_m1m2(s12,mass1,mass2,0,2)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_rr = f2p_m1m2(s12,mass1,mass2,1,1)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p_m1m2(s12,mass1,mass2,1,2)
+ !
+
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_rr = f2p_m1m2(s12,mass1,mass2,2,2)
+ !
+ end if ! end test value of z1,z2
+ ! ******************************************************************
+ !
+ else
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'something wrong with arguments of two-point function f2p'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 's12= %f0'
+ tab_erreur_par(2)%arg_real = s12
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'm1s= %f0'
+ tab_erreur_par(3)%arg_real = mass1
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'm2s= %f0'
+ tab_erreur_par(4)%arg_real = mass2
+ !
+ call catch_exception(0)
+ end if ! end if s12,m1,m2 eq. zero
+ !
+ end if ! end if ( minval(z_param_ini) == -1 )
+ !
+ f2p_r(1) = f2p_rr(1) + i_ * f2p_rr(2)
+ f2p_r(2) = f2p_rr(3) + i_ * f2p_rr(4)
+ !
+ end function f2p_r
+ !
+ function f2p_c(s_mat_c,b_pro,parf1,parf2)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in) :: b_pro
+ integer, intent (in), optional :: parf1,parf2
+ complex(ki), dimension(2) :: f2p_c
+ !
+ real(ki), dimension(4) :: f2p_cc
+ complex(ki), dimension(2) :: i2sonem
+ integer :: par1, par2
+ integer, dimension(2) :: z_param_ini, z_param_out
+ complex(ki) :: mass1, mass2, ratpart, diffm
+ real(ki) :: s12
+ integer :: m1,m2,dim_pro
+ integer, dimension(2) :: s
+ logical :: sz, mz1, mz2, diffz
+ !
+ par1 = 0
+ par2 = 0
+ !
+ if (present(parf1)) par1 = parf1
+ if (present(parf2)) par2 = parf2
+ !
+ z_param_ini = (/ par1,par2 /)
+ !
+ where (z_param_ini /= 0)
+ !
+ z_param_ini = locateb(z_param_ini,b_pro)
+ !
+ elsewhere
+ !
+ z_param_ini = 0
+ !
+ end where
+ !
+ if ( minval(z_param_ini) == -1 ) then
+ !
+ f2p_c(:) = czero
+ !
+ else
+ !
+ call tri_int2(z_param_ini,z_param_out)
+ !
+ if (b_pro<256) then
+ dim_pro = bit_count(b_pro)
+ s = bit_sets(8*b_pro:8*b_pro+dim_pro-1)
+ else
+ dim_pro = countb(b_pro)
+ s = unpackb(b_pro,dim_pro)
+ end if
+ !
+ m1 = s(1)
+ m2 = s(2)
+ !
+ ! internal masses
+ mass1 = -s_mat_c(m1,m1)/2._ki
+ mass2 = -s_mat_c(m2,m2)/2._ki
+ s12 = real(s_mat_c(m1,m2)+mass1+mass2,ki)
+ !
+ call cut_s(s12,mass1,mass2)
+ !
+ diffm = mass1-mass2
+ !
+ mz1 = ( equal_real(real(mass1,ki), zero,1000._ki) .and. equal_real(aimag(mass1), zero,1000._ki) ) ! 1000 added by MR 10.11.11
+ mz2 = ( equal_real(real(mass2,ki), zero,1000._ki) .and. equal_real(aimag(mass2), zero,1000._ki) ) ! 1000 added by MR 10.11.11
+ sz = equal_real(s12,zero) ! 1000 added by MR 10.11.11
+ !
+ diffz = ( equal_real(real(diffm,ki), zero) .and. equal_real(aimag(diffm), zero) ) ! -- not altered by MR
+ !
+ !write(6,*) "MR,A says s m1 m2 ",s12,mass1 ,mass2, " and eqs ",mz1 ,mz2,sz
+ !write(6,*) "MR,A says so ((sz) .and. (mz1) .and. (mz2)) ",((sz) .and. (mz1) .and. (mz2))&
+!&, " ( .not.(sz) .and. (mz1) .and. (mz2) ) ",( .not.(sz) .and. (mz1) .and. (mz2) )
+
+ ! implement the massless case, for any complex masses of order 10^-14 that come this far.
+ if ( (sz) .and. (mz1) .and. (mz2) ) then
+ !
+ f2p_cc(:) = 0._ki
+ ! (scaleless two-point function is zero)
+ !
+ elseif ( .not.(sz) .and. (mz1) .and. (mz2) ) then
+ ! massless case
+ !write(6,*) "MR,A, _massless case_ ",s12,mass1 ,mass2, " and eqs ",mz1 ,mz2,sz," z_par ",z_param_out
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_cc(1) = 1._ki
+ f2p_cc(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ !write(6,*) "MR,A, _massless case_, tot, _c ",s12,mu2_scale_par
+ f2p_cc(3) = 2._ki-real(z_log(-s12/mu2_scale_par,-1._ki))
+ f2p_cc(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))
+ !write(6,*) "MR,A, _massless case_, tot, _cc ",s12,mu2_scale_par," res ",f2p_cc
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_cc(3) = 2._ki
+ f2p_cc(4) = 0._ki
+ !
+ end if
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) /= 0) ) then
+ !
+ f2p_cc(1) = 1._ki/2._ki
+ f2p_cc(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_cc(3) = 1._ki-real(z_log(-s12/mu2_scale_par,-1._ki))/2._ki
+ f2p_cc(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_cc(3) = 1._ki
+ f2p_cc(4) = 0._ki
+ !
+ end if
+ !
+ else if ( (z_param_out(1) /= 0) .and. (z_param_out(2) /= 0) ) then
+ !
+ if (z_param_out(1) == z_param_out(2)) then
+ !
+ f2p_cc(1) = 1._ki/3._ki
+ f2p_cc(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_cc(3) = 13._ki/18._ki-real(z_log(-s12/mu2_scale_par,-1._ki))/3._ki
+ f2p_cc(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))/3._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_cc(3) = 13._ki/18._ki
+ f2p_cc(4) = 0._ki
+ !
+ end if
+ !
+ else
+ !
+ f2p_cc(1) = 1._ki/6._ki
+ f2p_cc(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_cc(3) = 5._ki/18._ki-real(z_log(-s12/mu2_scale_par,-1._ki),ki)/6._ki
+ f2p_cc(4) = -aimag(z_log(-s12/mu2_scale_par,-1._ki))/6._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_cc(3) = 5._ki/18._ki
+ f2p_cc(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if z1==z2
+ !
+ end if ! end test value of z1,z2
+
+ f2p_c(1) = f2p_cc(1) + i_ * f2p_cc(2)
+ f2p_c(2) = f2p_cc(3) + i_ * f2p_cc(4)
+ !
+ !end if ! end if(massless)
+
+ !
+ ! *************** massive cases, complex *******************************
+ ! ** (this function is only called with at least one non-zero mass) **
+ ! **********************************************************************
+ !
+ else if ( sz .and. (.not. mz1) .and. mz2 ) then
+ ! case p^2=0, m1 nonzero, m2=0
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = i20m1(mass1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 1._ki/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = -(-1._ki + 2._ki*z_log(mass1/mu2_scale_par,-1._ki))/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 3._ki/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = -(-3._ki + 2._ki*z_log(mass1/mu2_scale_par,-1._ki))/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 1._ki/9._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = (1._ki - 3._ki*z_log(mass1/mu2_scale_par,-1._ki))/9._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/6._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 5._ki/36._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = (5._ki - 6._ki*z_log(mass1/mu2_scale_par,-1._ki))/36._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 11._ki/18._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = (11._ki - 6._ki*z_log(mass1/mu2_scale_par,-1._ki))/18._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ else if ( sz .and. mz1 .and. (.not. mz2) ) then
+ ! case p^2=0, m2 nonzero, m1=0
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = i20m1(mass2)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 3._ki/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = -(-3._ki + 2._ki*z_log(mass2/mu2_scale_par,-1._ki))/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 1._ki/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = -(-1._ki + 2._ki*z_log(mass2/mu2_scale_par,-1._ki))/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 11._ki/18._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = (11._ki - 6._ki*z_log(mass2/mu2_scale_par,-1._ki))/18._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/6._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 5._ki/36._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = (5._ki - 6._ki*z_log(mass2/mu2_scale_par,-1._ki))/36._ki
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = 1._ki/9._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = (1 - 3*z_log(mass2/mu2_scale_par,-1._ki))/9._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ ! ** eq. (A.10) ****
+ !
+ else if ( sz .and. (.not. mz1) .and. diffz ) then
+ ! case p^2=0, m1 nonzero, m2=m1
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = f2p0m_1mi(mass1,0,0)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c = f2p0m_1mi(mass1,0,1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p0m_1mi(mass1,0,2)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c = f2p0m_1mi(mass1,1,1)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p0m_1mi(mass1,1,2)
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p0m_1mi(mass1,2,2)
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ ! ** eq. (A.8) ****
+ else if ( sz .and. (.not. mz1) .and. (.not. mz2) .and. (.not. diffz) ) then
+ ! case p^2=0, m1 nonzero, m2 nonzero, m2 NOT=m1
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = f2p0m_m1m2(mass1,mass2,0,0)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c = f2p0m_m1m2(mass1,mass2,0,1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p0m_m1m2(mass1,mass2,0,2)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c = f2p0m_m1m2(mass1,mass2,1,1)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p0m_m1m2(mass1,mass2,1,2)
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p0m_m1m2(mass1,mass2,2,2)
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ************ now case s12 nonzero **********************
+ !
+ else if ( (.not. sz) .and. mz1 .and. (.not.mz2) ) then
+ ! case p^2 nonzero, m1=0, m2 nonzero
+ !
+ i2sonem=i2sm1(s12,mass2)
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = i2sonem
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = -( mass2 - (mass2 + s12)*i2sonem(2) )/(2._ki*s12)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = -(mass2 - (mass2 + s12)*i2sonem(2) - &
+ & mass2*z_log(mass2/mu2_scale_par,-1._ki))/(2._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = -((mass2 - s12)*i2sonem(2) - mass2)/(2._ki*s12)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = -((mass2 - s12)*i2sonem(2) + &
+ & mass2*(-1._ki + z_log(mass2/mu2_scale_par,-1._ki)))/(2._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ ratpart = (-6._ki*mass2**2 - 9._ki*mass2*s12 + s12**2 + &
+ & 6._ki*(mass2**2 + mass2*s12 + s12**2)*i2sonem(2))/(18._ki*s12**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then !!!checked!!!
+ !
+ f2p_c(2) = ratpart + mass2*(mass2 + s12)* &
+ & z_log(mass2/mu2_scale_par,-1._ki)/(3._ki*s12**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/6._ki
+ !
+ ratpart = (6._ki*mass2**2 - s12**2 + &
+ & 3._ki*(-2._ki*mass2**2 + mass2*s12 + s12**2)*i2sonem(2) )/(18._ki*s12**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart + mass2*(-2._ki*mass2 + s12)* &
+ & z_log(mass2/mu2_scale_par,-1._ki)/(6._ki*s12**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ ratpart = (-6._ki*mass2**2 + 9._ki*mass2*s12 + s12**2 + &
+ & 6._ki*(mass2 - s12)**2*i2sonem(2) )/(18._ki*s12**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart + mass2*(mass2 - 2._ki*s12)* &
+ & z_log(mass2/mu2_scale_par,-1._ki)/(3._ki*s12**2)
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ !
+ else if ( (.not. sz) .and. (.not. mz1) .and. mz2 ) then
+ ! case p^2 nonzero, m1 nonzero, m2=0
+ !
+ i2sonem = i2sm1(s12,mass1)
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = i2sonem
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ ratpart = -((mass1 - s12)*i2sonem(2) - mass1)/(2._ki*s12)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart - mass1*z_log(mass1/mu2_scale_par,-1._ki)/(2._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/2._ki
+ !
+ ratpart = -( mass1 - (mass1 + s12)*i2sonem(2) )/(2._ki*s12)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart + mass1*z_log(mass1/mu2_scale_par,-1._ki)/(2._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ ratpart = (-6._ki*mass1**2 + 9._ki*mass1*s12 + s12**2 + &
+ & 6._ki*(mass1 - s12)**2*i2sonem(2) )/(18._ki*s12**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart + mass1*(mass1 - 2._ki*s12)* &
+ & z_log(mass1/mu2_scale_par,-1._ki)/(3._ki*s12**2)
+ !
+ end if ! end if rat or tot
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/6._ki
+ !
+ ratpart = (6._ki*mass1**2 - s12**2 + &
+ & 3._ki*(-2._ki*mass1**2 + mass1*s12 + s12**2)*i2sonem(2) )/(18._ki*s12**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart + mass1*(-2._ki*mass1 + s12)* &
+ & z_log(mass1/mu2_scale_par,-1._ki)/(6._ki*s12**2)
+ !
+ end if ! end if rat or tot
+ !
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c(1) = 1._ki/3._ki
+ !
+ ratpart = (-6._ki*mass1**2 - 9._ki*mass1*s12 + s12**2 + &
+ & 6._ki*(mass1**2 + mass1*s12 + s12**2)*i2sonem(2))/(18._ki*s12**2)
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_c(2) = ratpart
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_c(2) = ratpart + mass1*(mass1 + s12)* &
+ & z_log(mass1/mu2_scale_par,-1._ki)/(3._ki*s12**2)
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end test value of z1,z2
+ !
+ ! ******************
+ !
+ else if ( (.not. sz) .and. (.not. mz1) .and. (.not. mz2) ) then
+ ! case p^2 nonzero, m1 nonzero, m2 nonzero, eq.(A.5)
+ ! includes case m1=m2
+ !
+ if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 0) ) then
+ !
+ f2p_c = f2p_m1m2(s12,mass1,mass2,0,0)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c = f2p_m1m2(s12,mass1,mass2,0,1)
+ !
+ else if ( (z_param_out(1) == 0) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p_m1m2(s12,mass1,mass2,0,2)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 1) ) then
+ !
+ f2p_c = f2p_m1m2(s12,mass1,mass2,1,1)
+ !
+ else if ( (z_param_out(1) == 1) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p_m1m2(s12,mass1,mass2,1,2)
+ !
+ else if ( (z_param_out(1) == 2) .and. (z_param_out(2) == 2) ) then
+ !
+ f2p_c = f2p_m1m2(s12,mass1,mass2,2,2)
+ !
+ end if ! end test value of z1,z2
+ ! ******************************************************************
+ !
+ else
+ !
+ tab_erreur_par(1)%a_imprimer = .true.
+ tab_erreur_par(1)%chaine = 'something wrong with arguments of two-point function f2p'
+ tab_erreur_par(2)%a_imprimer = .true.
+ tab_erreur_par(2)%chaine = 's12= %f0'
+ tab_erreur_par(2)%arg_real = s12
+ tab_erreur_par(3)%a_imprimer = .true.
+ tab_erreur_par(3)%chaine = 'm1s= %f0'
+ tab_erreur_par(3)%arg_real = mass1
+ tab_erreur_par(4)%a_imprimer = .true.
+ tab_erreur_par(4)%chaine = 'm2s= %f0'
+ tab_erreur_par(4)%arg_real = mass2
+ !
+ call catch_exception(0)
+ !
+ end if ! end if s12,m1,m2 eq. zero
+ !
+ end if ! end if ( minval(z_param_ini) == -1 )
+ !
+ end function f2p_c
+ !
+ !****f* src/integrals/two_point/generic_function_2p/f2p_np2
+ ! NAME
+ !
+ ! Function f2p_np2
+ !
+ ! USAGE
+ !
+ ! cmplx_dim2 = f2p_np2(s_mat_p,b_pro)
+ !
+ ! DESCRIPTION
+ !
+ ! This function computes the generic two point function in n+2 dimensions,
+ ! without Feynman parameters in the numerator
+ !
+ ! INPUTS
+ !
+ ! * s_mat_p -- a s_matrix_poly type object
+ ! * b_pro -- an integer which represents the set of the four unpinched
+ ! propagators
+ !
+ ! SIDE EFFECTS
+ !
+ ! No side effect
+ !
+ ! RETURN VALUE
+ !
+ ! It returns a complex (type ki) array of rank 1 and shape 2
+ !
+ ! EXAMPLE
+ !
+ !
+ !
+ !*****
+ !
+ function f2p_np2_ra(s_mat_p,b_pro)
+ !
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent(in) :: b_pro
+ real(ki), dimension(4) :: f2p_np2_ra
+ complex(ki), dimension(2) :: f2p_np2_ca
+ !
+ f2p_np2_ca = f2p_np2_p(s_mat_p,b_pro)
+ !
+ f2p_np2_ra(1) = real(f2p_np2_ca(1),ki)
+ f2p_np2_ra(2) = aimag(f2p_np2_ca(1))
+ f2p_np2_ra(3) = real(f2p_np2_ca(2),ki)
+ f2p_np2_ra(4) = aimag(f2p_np2_ca(2))
+ !
+ end function f2p_np2_ra
+ !
+ function f2p_np2_p(s_mat_p,b_pro)
+ type(s_matrix_poly) :: s_mat_p
+ integer, intent(in) :: b_pro
+ complex(ki), dimension(2) :: f2p_np2_p
+ !
+ if (iand(s_mat_p%b_cmplx, b_pro) .eq. 0 ) then
+ !
+ f2p_np2_p = f2p_np2_r(s_mat_p%pt_real, b_pro)
+ !
+ else
+ !
+ f2p_np2_p = f2p_np2_c(s_mat_p%pt_cmplx, b_pro)
+ !
+ end if
+ !
+ end function f2p_np2_p
+ !
+ function f2p_np2_r(s_mat_r,b_pro)
+ !
+ real(ki), intent (in), dimension(:,:) :: s_mat_r
+ integer, intent (in) :: b_pro
+ complex(ki),dimension(2) :: f2p_np2_r
+ !
+ real(ki), dimension(4) :: f2p_np2_rr,i2sonem,i2sca
+ real(ki) :: arg1,s12,mass1,mass2,diffrm,small
+ real(ki) :: arg_log
+ integer :: m1,m2
+ integer, dimension(2) :: s
+ logical :: sz, mz1, mz2
+ !
+ small=1.e-6_ki
+ !
+ s = unpackb(b_pro,countb(b_pro))
+ !
+ m1 = s(1)
+ m2 = s(2)
+ !
+ arg1 = s_mat_r(m1,m2)
+ !
+ ! internal masses
+ mass1 = -s_mat_r(m1,m1)/2._ki
+ mass2 = -s_mat_r(m2,m2)/2._ki
+ diffrm = sqrt(mass1)-sqrt(mass2)
+ !
+ s12 = arg1+mass1+mass2
+ !
+ call cut_s(s12, mass1, mass2)
+ !
+ mz1 = equal_real(mass1, zero,1000._ki) ! 1000 added by MR 10.11.11
+ mz2 = equal_real(mass2, zero,1000._ki) ! 1000 added by MR 10.11.11
+ sz = equal_real(s12, zero,1000._ki) ! 1000 added by MR 10.11.11
+ !
+ !
+ if ( (sz) .and. (mz1) .and. (mz2) ) then
+ !
+ f2p_np2_rr(:) = 0._ki
+ ! (f2p_np2_rr with no scale is zero)
+ !
+ else if ( (.not.(sz)) .and. (mz1) .and. (mz2) ) then
+ ! massless case
+ !
+ arg_log = arg1/mu2_scale_par
+ !
+ f2p_np2_rr(1) = 1._ki/6._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = 4._ki/9._ki-real(z_log(-arg_log,-1._ki),ki)/6._ki
+ f2p_np2_rr(4) = -aimag(z_log(-arg_log,-1._ki))/6._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = 4._ki/9._ki
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if
+ !
+ f2p_np2_rr = s12*f2p_np2_rr
+ !
+ !*************** massive cases *******************************
+ ! added 07.08.09
+ ! ************************************************************
+ else if ( (sz) .and. (.not.(mz1)) .and. (mz2) ) then
+ ! case p^2=0, m1 nonzero, m2=0
+ !
+ f2p_np2_rr(1) = -1._ki/2._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = -2._ki*(3._ki - 2*real(z_log(mass1/mu2_scale_par,-1._ki)))/8._ki
+ f2p_np2_rr(4) = aimag(z_log(mass1/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = -3._ki/4._ki
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ f2p_np2_rr = mass1*f2p_np2_rr
+ !
+ ! ******************
+ else if ( (sz) .and. (mz1) .and. (.not.(mz2)) ) then
+ ! case p^2=0, m2 nonzero, m1=0
+ !
+ f2p_np2_rr(1) = -1._ki/2._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki - 2*real(z_log(mass2/mu2_scale_par,-1._ki)))/4._ki
+ f2p_np2_rr(4) = aimag(z_log(mass2/mu2_scale_par,-1._ki))/2._ki
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = -3._ki/4._ki
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ f2p_np2_rr = mass2*f2p_np2_rr
+ !
+ ! ******************
+ ! ** eq. (A.10), uses f2p_np2_rr = -2*B22 ****
+ else if ( (sz).and.(.not.(mz1)).and. &
+ & (equal_real(diffrm,zero)) ) then
+ ! case p^2=0, m1 nonzero, m2=m1
+ !
+ f2p_np2_rr = -mass1*i20m1(mass1)
+ !
+ ! ******************
+ else if ( (sz) .and. (.not.(mz1)) .and. (.not.(mz2)) .and. .not.(equal_real(diffrm,zero)) ) then
+ ! case p^2=0, m1 nonzero, m2 nonzero, m1 not= m2
+ !
+ f2p_np2_rr(1) = -(mass1+mass2)/2._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (abs(diffrm) > small ) then
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki*mass1**2 - 3._ki*mass2**2 - &
+ & 2._ki*mass1**2*real(z_log(mass1/mu2_scale_par,-1._ki)) + &
+ & 2._ki*mass2**2*real(z_log(mass2/mu2_scale_par,-1._ki)))/ &
+ & (4._ki*(mass1 - mass2))
+ f2p_np2_rr(4) = - ( - 2*mass1**2*aimag(z_log(mass1/mu2_scale_par,-1._ki)) + &
+ & 2*mass2**2*aimag(z_log(mass2/mu2_scale_par,-1._ki)))/ &
+ & (4._ki*(mass1 - mass2))
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = - (3*mass1**2 - 3*mass2**2)/(4._ki*(mass1 - mass2))
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ ! write(6,*) 'using expanded expression for B22, diffrm=',diffrm
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = (mass1 + mass2)*( -19._ki*mass1**2 + 8._ki*mass1*mass2 - mass2**2 + &
+ & 12._ki*mass1**2*real(z_log(mass1/mu2_scale_par,-1._ki)))/(24._ki*mass1**2)
+ f2p_np2_rr(4) = (mass1 + mass2)*( 12._ki*mass1**2* &
+ & aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(24._ki*mass1**2)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = (mass1 + mass2)*( -19._ki*mass1**2 + &
+ & 8._ki*mass1*mass2 - mass2**2 )/(24._ki*mass1**2)
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ !
+ ! ******************
+ ! s12 nonzero
+ !********************
+ else if ( (.not.(sz)) .and. (mz1) .and. (.not.(mz2)) ) then
+ ! case p^2 nonzero, m1=0, m2 nonzero
+ !
+ i2sonem=i2sm1(s12,mass2)
+ !
+ f2p_np2_rr(1) = -(3._ki*mass2 - s12)/6._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki*mass2**2 + 9._ki*mass2*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass2 - s12)**2*i2sonem(3) - 3._ki*mass2*(mass2 + s12)* &
+ & real(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12)
+ !
+ f2p_np2_rr(4) = - ( - 3._ki*(mass2 - s12)**2*i2sonem(4) - 3._ki*mass2*(mass2 + s12)* &
+ & aimag(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki*mass2**2 + 9._ki*mass2*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass2 - s12)**2*i2sonem(3) )/(18._ki*s12)
+ !
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ ! ******************
+ else if ( (.not.(sz)) .and. (.not.(mz1)) .and. (mz2) ) then
+ ! case p^2 nonzero, m1 nonzero, m2=0
+ !
+ i2sonem=i2sm1(s12,mass1)
+ !
+ f2p_np2_rr(1) = -(3._ki*mass1 - s12)/6._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki*mass1**2 + 9._ki*mass1*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass1 - s12)**2*i2sonem(3) - &
+ & 3._ki*mass1*(mass1 + s12)* &
+ & real(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12)
+ !
+ f2p_np2_rr(4) = - ( - 3._ki*(mass1 - s12)**2*i2sonem(4) - &
+ & 3._ki*mass1*(mass1 + s12)* &
+ & aimag(z_log(mass1/mu2_scale_par,-1._ki)))/(18._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = - (3*mass1**2 + 9*mass1*s12 - 2*s12**2 - &
+ & 3*(mass1 - s12)**2*i2sonem(3) )/(18._ki*s12)
+ !
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ ! ******************
+ else if ( (.not.(sz)) .and. (.not.(mz1)) .and. (.not.(mz2)) ) then
+ ! case p^2 nonzero, m1 nonzero, m2 nonzero, -2*B22 of eq.(A.5)
+ !
+ i2sca=i2sm1m2(s12,mass1,mass2)
+ !
+ f2p_np2_rr(1) = - (3._ki*mass1 + 3._ki*mass2 - s12)/6._ki
+ f2p_np2_rr(2) = 0._ki
+ !
+ if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki*mass1**2 - 6._ki*mass1*mass2 + 3._ki*mass2**2 + &
+ & 9._ki*mass1*s12 + 9._ki*mass2*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass1**2 + (mass2 - s12)**2 - &
+ & 2._ki*mass1*(mass2 + s12))*i2sca(3) - &
+ & 3._ki*mass1*(mass1 - mass2 + s12)* &
+ & real(z_log(mass1/mu2_scale_par,-1._ki)) + &
+ & 3._ki*mass2*(mass1 - mass2 - s12)* &
+ & real(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12)
+ !
+ f2p_np2_rr(4) = - (-3._ki*( mass1**2 + (mass2 - s12)**2 - &
+ & 2._ki*mass1*(mass2 + s12) )*i2sca(4) - &
+ & 3._ki*mass1*(mass1 - mass2 + s12)* &
+ & aimag(z_log(mass1/mu2_scale_par,-1._ki)) + &
+ & 3._ki*mass2*(mass1 - mass2 - s12)* &
+ & aimag(z_log(mass2/mu2_scale_par,-1._ki)))/(18._ki*s12)
+ !
+ else if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_rr(3) = - (3._ki*mass1**2 - 6._ki*mass1*mass2 + 3._ki*mass2**2 + &
+ & 9._ki*mass1*s12 + 9._ki*mass2*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass1**2 + (mass2 - s12)**2 - &
+ & 2._ki*mass1*(mass2 + s12))*i2sca(3) )/(18._ki*s12)
+ !
+ f2p_np2_rr(4) = 0._ki
+ !
+ end if ! end if rat or tot
+ !
+ ! ******************************************************************
+ end if ! end test if s12,m1,m2 zero
+ !
+ f2p_np2_r(1) = f2p_np2_rr(1) + i_ * f2p_np2_rr(2)
+ f2p_np2_r(2) = f2p_np2_rr(3) + i_ * f2p_np2_rr(4)
+ !
+ end function f2p_np2_r
+ !
+ !
+ function f2p_np2_c(s_mat_c,b_pro)
+ !
+ complex(ki), intent (in), dimension(:,:) :: s_mat_c
+ integer, intent (in) :: b_pro
+ complex(ki),dimension(2) :: f2p_np2_c
+ !
+ complex(ki), dimension(2) :: i2sonem_c, i2sca_c
+ complex(ki) :: mass1, mass2, lambda
+ real(ki) :: s12, diffrm, small
+ integer :: m1,m2
+ integer, dimension(2) :: s
+ logical :: sz, m1z, m2z, diffz
+ !
+ small=1.e-6_ki
+ !
+ s = unpackb(b_pro,countb(b_pro))
+ !
+ m1 = s(1)
+ m2 = s(2)
+ !
+ ! internal masses
+ mass1 = -s_mat_c(m1,m1)/2._ki
+ mass2 = -s_mat_c(m2,m2)/2._ki
+ diffrm = sqrt(abs(mass1-mass2))
+ !
+ s12 = real(s_mat_c(m1,m2)+mass1+mass2,ki)
+ !
+ call cut_s(s12, mass1, mass2)
+ !
+ m1z = ( equal_real(real(mass1,ki), zero,1000._ki) .and. equal_real(aimag(mass1), zero,1000._ki) ) ! 1000 added by MR 10.11.11
+ m2z = ( equal_real(real(mass2,ki), zero,1000._ki) .and. equal_real(aimag(mass2), zero,1000._ki) ) ! 1000 added by MR 10.11.11
+ !
+ sz = equal_real(s12,zero,1000._ki) ! 1000 added by MR 10.11.11
+ !
+ diffz = equal_real(diffrm, zero) ! -- no 1000 put in
+ !
+ ! *************** massive cases, complex ************************
+ ! ** (this function is called with at least one non-zero mass) **
+ ! ***************************************************************
+ !
+ if ( sz .and. (.not. m1z) .and. m2z ) then
+ ! case p^2=0, m1 nonzero, m2=0
+ !
+ f2p_np2_c(1) = -1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = -3._ki/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki - 2._ki*z_log(mass1/mu2_scale_par,-1._ki))/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ f2p_np2_c = mass1*f2p_np2_c
+ !
+ ! ******************
+ else if ( sz .and. m1z .and. (.not. m2z) ) then
+ ! case p^2=0, m2 nonzero, m1=0
+ !
+ f2p_np2_c(1) = -1._ki/2._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = -3._ki/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki - 2._ki*z_log(mass2/mu2_scale_par,-1._ki))/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ f2p_np2_c = mass2*f2p_np2_c
+ !
+ ! ******************
+ ! ** eq. (A.10), uses f2p_np2_c = -2*B22 ****
+ else if ( sz .and. (.not. m1z) .and. diffz ) then
+ ! case p^2=0, m1 nonzero, m2=m1
+ !
+ f2p_np2_c = -mass1*i20m1(mass1)
+ !
+ ! ******************
+ else if ( sz .and. (.not. m1z) .and. (.not. m2z) .and. (.not. diffz) ) then
+ ! case p^2=0, m1 nonzero, m2 nonzero, m1 not= m2
+ !
+ f2p_np2_c(1) = -(mass1+mass2)/2._ki
+ !
+ if (diffrm > small ) then
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = -3._ki*(mass1 + mass2)/4._ki
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = (-3*mass1 - 3*mass2 + &
+ & (2*mass1**2*z_log(mass1/mu2_scale_par,-1._ki) - &
+ & 2*mass2**2*z_log(mass2/mu2_scale_par,-1._ki) )/(mass1 - mass2) )/4._ki
+ !
+ end if ! end if rat or tot
+ !
+ else ! use expansion in (m2sq-m1sq) up to order 3
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = (mass1 + mass2)*( &
+ & -19._ki*mass1**2 + 8._ki*mass1*mass2 - mass2**2 )/(24._ki*mass1**2)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = (mass1 + mass2)*( &
+ & -19._ki*mass1**2 + 8._ki*mass1*mass2 - mass2**2 + &
+ & 12._ki*mass1**2*z_log(mass1/mu2_scale_par,-1._ki) )/(24._ki*mass1**2)
+ !
+ end if ! end if rat or tot
+ !
+ end if ! end if abs(diffrm) > small
+ !
+ !
+ ! ******************
+ ! s12 nonzero
+ !********************
+ !
+ else if ( (.not. sz) .and. m1z .and. (.not. m2z) ) then
+ ! case p^2 nonzero, m1=0, m2 nonzero
+ !
+ i2sonem_c = i2sm1(s12,mass2)
+ !
+ f2p_np2_c(1) = (s12 - 3._ki*mass2)/6._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki*mass2**2 + 9._ki*mass2*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass2 - s12)**2*i2sonem_c(2) )/(18._ki*s12)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki*mass2**2 + 9._ki*mass2*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass2 - s12)**2*i2sonem_c(2) - &
+ & 3._ki*mass2*(mass2 + s12)* &
+ & z_log(mass2/mu2_scale_par,-1._ki))/(18._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ ! ******************
+ else if ( (.not. sz) .and. (.not. m1z) .and. m2z ) then
+ ! case p^2 nonzero, m1 nonzero, m2=0
+ !
+ i2sonem_c=i2sm1(s12,mass1)
+ !
+ f2p_np2_c(1) = (s12 - 3._ki*mass1)/6._ki
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki*mass1**2 + 9._ki*mass1*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass1 - s12)**2*i2sonem_c(2) )/(18._ki*s12)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki*mass1**2 + 9._ki*mass1*s12 - 2._ki*s12**2 - &
+ & 3._ki*(mass1 - s12)**2*i2sonem_c(2) - &
+ & 3._ki*mass1*(mass1 + s12)* &
+ & z_log(mass1/mu2_scale_par,-1._ki))/(18._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ ! ******************
+ else if ( (.not. sz) .and. (.not. m1z) .and. (.not.m2z) ) then
+ ! case p^2 nonzero, m1 nonzero, m2 nonzero, -2*B22 of eq.(A.5)
+ !
+ i2sca_c=i2sm1m2(s12,mass1,mass2)
+ !
+ f2p_np2_c(1) = (s12 - 3._ki*mass1 - 3._ki*mass2)/6._ki
+ !
+ lambda = s12**2 + mass1**2 + mass2**2 - 2._ki*s12*(mass1 + mass2) - 2._ki*mass1*mass2
+ !
+ if (rat_or_tot_par%rat_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki*(mass1 - mass2)**2 + 9._ki*s12*(mass1 + mass2) - &
+ & 2._ki*s12**2 - 3._ki*lambda*i2sca_c(2) )/(18._ki*s12)
+ !
+ else if (rat_or_tot_par%tot_selected) then
+ !
+ f2p_np2_c(2) = - (3._ki*(mass1 - mass2)**2 + 9._ki*s12*(mass1 + mass2) - &
+ & 2._ki*s12**2 - 3._ki*lambda*i2sca_c(2) - &
+ & 3._ki*mass1*(mass1 - mass2 + s12)* &
+ & z_log(mass1/mu2_scale_par,-1._ki) + &
+ & 3._ki*mass2*(mass1 - mass2 - s12)* &
+ & z_log(mass2/mu2_scale_par,-1._ki) )/(18._ki*s12)
+ !
+ end if ! end if rat or tot
+ !
+ ! ******************************************************************
+ end if ! end test if s12,m1,m2 zero
+ !
+ end function f2p_np2_c
+ !
+end module generic_function_2p
Index: 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/integrals/two_point/Makefile.in (revision 119)
@@ -0,0 +1,551 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.dep \
+ $(srcdir)/Makefile.in
+subdir = src/integrals/two_point
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgolem95_integrals_two_point_la_LIBADD =
+am_libgolem95_integrals_two_point_la_OBJECTS = \
+ libgolem95_integrals_two_point_la-function_2p0m_1mi.lo \
+ libgolem95_integrals_two_point_la-function_2p_m1m2.lo \
+ libgolem95_integrals_two_point_la-generic_function_2p.lo
+libgolem95_integrals_two_point_la_OBJECTS = \
+ $(am_libgolem95_integrals_two_point_la_OBJECTS)
+libgolem95_integrals_two_point_la_LINK = $(LIBTOOL) --tag=FC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
+ $(libgolem95_integrals_two_point_la_FCFLAGS) $(FCFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libgolem95_integrals_two_point_la_SOURCES)
+DIST_SOURCES = $(libgolem95_integrals_two_point_la_SOURCES)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+HEADERS = $(nodist_pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libgolem95_integrals_two_point.la
+AM_FCFLAGS = \
+ -I$(top_builddir)/src/module \
+ -I$(top_builddir)/src/kinematic \
+ -I$(top_builddir)/src/numerical \
+ -I$(top_builddir)/src/integrals/one_point
+
+libgolem95_integrals_two_point_la_SOURCES = \
+ function_2p0m_1mi.f90 function_2p_m1m2.f90 generic_function_2p.f90
+
+libgolem95_integrals_two_point_la_FCFLAGS = $(AM_FCFLAGS)
+nodist_pkginclude_HEADERS = function_2p_m1m2.mod function_2p0m_1mi.mod \
+ generic_function_2p.mod
+
+CLEANFILES = *.mod
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.dep $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/integrals/two_point/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/integrals/two_point/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgolem95_integrals_two_point.la: $(libgolem95_integrals_two_point_la_OBJECTS) $(libgolem95_integrals_two_point_la_DEPENDENCIES)
+ $(libgolem95_integrals_two_point_la_LINK) $(libgolem95_integrals_two_point_la_OBJECTS) $(libgolem95_integrals_two_point_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+libgolem95_integrals_two_point_la-function_2p0m_1mi.lo: function_2p0m_1mi.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_two_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_two_point_la-function_2p0m_1mi.lo $(FCFLAGS_f90) `test -f 'function_2p0m_1mi.f90' || echo '$(srcdir)/'`function_2p0m_1mi.f90
+
+libgolem95_integrals_two_point_la-function_2p_m1m2.lo: function_2p_m1m2.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_two_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_two_point_la-function_2p_m1m2.lo $(FCFLAGS_f90) `test -f 'function_2p_m1m2.f90' || echo '$(srcdir)/'`function_2p_m1m2.f90
+
+libgolem95_integrals_two_point_la-generic_function_2p.lo: generic_function_2p.f90
+ $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(FC) $(libgolem95_integrals_two_point_la_FCFLAGS) $(FCFLAGS) -c -o libgolem95_integrals_two_point_la-generic_function_2p.lo $(FCFLAGS_f90) `test -f 'generic_function_2p.f90' || echo '$(srcdir)/'`generic_function_2p.f90
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-nodist_pkgincludeHEADERS
+
+
+# Module dependencies
+function_2p_m1m2.o: function_2p0m_1mi.o
+function_2p_m1m2.lo: function_2p0m_1mi.lo
+function_2p_m1m2.obj: function_2p0m_1mi.obj
+generic_function_2p.o: function_2p0m_1mi.o function_2p_m1m2.o
+generic_function_2p.lo: function_2p0m_1mi.lo function_2p_m1m2.lo
+generic_function_2p.obj: function_2p0m_1mi.obj function_2p_m1m2.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/src/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/src/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/src/Makefile.am (revision 119)
@@ -0,0 +1 @@
+SUBDIRS = module kinematic numerical integrals form_factor interface
Index: 95/branches/golem95_without_olo_cmake/src
===================================================================
--- 95/branches/golem95_without_olo_cmake/src (revision 118)
+++ 95/branches/golem95_without_olo_cmake/src (revision 119)
Property changes on: 95/branches/golem95_without_olo_cmake/src
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/README
===================================================================
--- 95/branches/golem95_without_olo_cmake/README (revision 0)
+++ 95/branches/golem95_without_olo_cmake/README (revision 119)
@@ -0,0 +1,451 @@
+
+-----------------------------------------------------------------------
+INSTALLATION
+-----------------------------------------------------------------------
+To install the library without linking LoopTools, type the following command:
+./configure [--prefix=some_path]
+ [--with-precision=quadruple]
+ [FC=your_fortran90_compiler]
+ [F77=your_fortran77_compiler]
+ [LDFLAGS=extra libraries]
+make
+make install
+make clean [optional]
+
+This installs a self-contained integral library containing all
+ massive integrals (also for complex masses),
+ where the finite scalar massive box/triangle D0/C0
+ is called from avh_olo
+
+If D0 and C0 should be taken from LoopTools instead, use
+
+./configure [--prefix=some_path]
+ [--with-looptools=your_path_to_libooptools.a]
+ [FC=your_fortran90_compiler]
+ [F77=your_fortran77_compiler]
+make
+make install
+make clean [optional]
+
+and set the variable "withlt" to true in your main file:
+withlt = .true.
+(this will overwrite the default withlt = .false. defined in src/module/parametre.f90)
+
+
+Please note that some_path must be the absolute path of the directory
+where the library will be installed. It can also contain shell variables,
+like in --prefix=$HOME/my_libraries
+
+
+
+If the library should be compiled in quadruple precision, the
+option --precision=quadruple should be given when invoking
+configure.
+
+For example, if you want to put the library in the directory
+/home/guillet/lib/ and to use the compiler g95, type:
+./configure --prefix=/home/guillet/ FC=g95
+make
+make install
+make clean
+
+The directory /home/guillet/lib/ will contain the library files
+and /home/guillet/include/golem95 will contain a collection of
+files (type .mod).
+
+If the option --prefix is not specified, the library will be installed
+to the system default library path.
+If the option compiler is not specified, the installation script
+will try to find a suitable compiler.
+If the option precision is not specified, the program will use double precision.
+
+
+-----------------------------------------------------------------------
+COMMON PROBLEMS
+-----------------------------------------------------------------------
+
+* The compilation fails due to lack of write permission
+
+ Typically, the user has forgotten to specify --prefix correctly
+
+
+* When compiling, the following error message occurs:
+ Error in opening the compiled module file. Check INCLUDE paths. [PRECISION]
+
+ The path to the location of the .mod files is not set correctly in the Makefile.
+ The .mod files are in the subdirectory /include/golem95
+
+* When running an example, the following error message occurs:
+ error while loading shared libraries: libgolem.so.0: cannot open shared object file:
+ No such file or directory
+
+The path to the dynamically linked library is not known.
+either link libgolem.a statically or
+add the path to libgolem.so.0 to the `LD_LIBRARY_PATH' environment variable.
+For example, for bash shell:
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/golem95_v1.1.0/lib
+
+
+* When running the example demo_LT in quadruple precision the result contains
+ NaN
+
+ This is the only example program which is not prepared for compilation in
+ quadruple precision. Valid results are only obtained in double precision.
+
+* make does not work and complains about not being able to infer '--tag'
+
+ This can happen when the configuration was (re-)generated by autotools
+ with a version < 2.62. Please, either run 'autoreconf' of a newer version
+ or run 'make LIBTOOLS_FLAGS=--tag=FC' instead of 'make'.
+
+---------------------------------------------------------------------
+USAGE
+---------------------------------------------------------------------
+
+The program calculates tensor integrals as a combination
+of form factors and "basis" integrals with or without Feynman
+parameters in the numerator.
+It can be interfaced (by the user) to calculate either full amplitudes
+or only the integrals (with optional Feynman parameters in the numerator).
+
+Examples of main programs, named demo_npoint.f90,
+which calculate these integrals, can be found in the demos/ directory
+
+To run them, go to the demos directory, type:
+make
+
+This will produce the executables for all included demo programs:
+
+- demo_3point ........... three-point functions
+- demo_4point ........... four-point functions
+- demo_5point ........... five-point functions
+- demo_6point ........... six-point functions
+- demo_4photon .......... 4-photon helicity amplitudes
+- demo_detg ............. numerical stability: detG -> 0
+- demo_a55_dets_sing .... numerical stability: detS -> 0
+- demo_LT ............... Golem call with LoopTools conventions
+- demo_cmplx_masses.f9 ... form factors with complex masses
+- demo_tens_rec/mod.f90 .. demo for use of the function "evaluate"
+ useful for integrand reconstruction
+
+Running the n-point examples will prompt you for input specifying
+- the number of non-light-like external legs
+- the number of Feynman parameters in the numerator and
+ the space-time dimension
+
+Some arbitrary choice of the kinematic point (and of Feynman parameters)
+has been implemented in the demo programs.
+The result will be written to the file test_npoint.txt
+
+If the user wants to define the numerical point and the numerator of
+the integral her/himself, she/he should go to the directory test/ and
+follow the instructions in the Readme there.
+
+This program has been tested with the following compilers:
+the free compiler g95
+(which can be downloaded from http://g95.sourceforge.net),
+the intel compiler ifort
+the dec compiler f95,
+the NAG compiler f95,
+the GNU compiler gfortran
+(versions older than gfortran 4.2.4 are not recommended),
+the portland compiler pgf95.
+
+
+-----------------------------------------------------------------------
+STRUCTURE OF THE PROGRAM
+-----------------------------------------------------------------------
+
+The structure of the golem95 program is the following.
+There are 5 directories:
+
+src : the source files of the program
+doc : documentation which has been created with robodoc :
+ to consult it : firefox masterindex.html
+avh_olo: Andre van Hameren's library OneLOop which is used for
+ the IR finite C0,D0
+demos: some programs for demonstration
+test: scripts to produce form factors for a certain
+ number of legs, rank, numerator and numerical point
+ to be chosen by the user via an input file
+
+
+the directory src contains the subdirectories
+
+form_factor: contains 6 modules to compute the form factors:
+
+ form_factor_1p.f90,
+ form_factor_2p.f90,
+ form_factor_3p.f90,
+ form_factor_4p.f90,
+ form_factor_5p.f90,
+ form_factor_6p.f90
+
+integrals: contains the subdirectories four_point, three_point, two_point, one_point
+
+four_point: contains modules to compute four-point functions
+
+ generic_function_4p.f90,
+ function_4p1m.f90,
+ function_4p2m_opp.f90,
+ function_4p2m_adj.f90,
+ function_4p3m.f90
+ function_4p4m.f90
+ function_4p2m_3mi_onshell.f90
+ function_4p_ql6.f90
+ function_4p_ql7.f90
+ function_4p_ql8.f90
+ function_4p_ql9.f90
+ function_4p_ql10.f90
+ function_4p_ql11.f90
+ function_4p_ql12.f90
+ function_4p_ql13.f90
+ function_4p_ql14.f90
+ function_4p_ql15.f90
+ function_4p_ql16.f90
+
+ The labelling of the IR divergent integrals with internal masses
+ follows the QCDLoop notation, R.K.Ellis, G.Zanderighi,
+ JHEP 0802:002,2008. The implementation is independent from
+ the QCDLoop library.
+ For the finite scalar 4-point function with internal masses,
+ D0 from avh_olo (A. van Hameren) is called by default.
+ The option to call D0 from LoopTools (T.Hahn)
+ instead is also available.
+ This is done internally if the flag "withlt" is set to .true.
+ provided that LoopTools is linked.
+
+three_point: contains 11 modules to compute the three point functions
+
+ generic_function_3p.f90,
+ function_3p1m.f90,
+ function_3p2m.f90,
+ function_3p3m.f90,
+ function_3p2m_1mi.f90
+ function_3p1m_1mi.f90
+ function_3p0m_1mi.f90
+ function_3p1m_2mi.f90
+ function_3p_finite.f90
+ mod_h0.f90, mod_hf.f90, mod_he.f90
+
+
+two_point: contains 3 modules to compute two-point functions
+ with 0,1 or 2 internal masses:
+
+ generic_function_2p.f90
+ function_2p0m_1mi.f90
+ function_2p_m1m2.f90
+
+one_point: contains 1 module to compute tadpoles
+
+ generic_function_1p.f90
+
+
+kinematic: contains 2 modules to compute the S matrix and its inverse
+ and to compute the b coefficients :
+
+ inverse_matrice.f90,
+ matrice_s.f90
+
+module : contains some auxiliary functions :
+
+ array.f90,
+ cache.f90,
+ constante.f90,
+ equal.f90,
+ form_factor_type.f90,
+ kronecker.f90,
+ multiply_div.f90,
+ parametre.f90,
+ precision_golem.f90,
+ sortie_erreur.f90,
+ spinor.f90,
+ translate.f90
+ tri.f90,
+ zdilog.f90,
+ z_log.f90
+
+numerical: contains two modules for numerical integration :
+
+ mod_adapt_gauss.f90, mod_numeric.f90
+
+interface: contains some functions to call Golem a la LoopTools :
+
+ tool_lt_to_golem.f90,
+ gb0.f90,
+ gc0.f90,
+ gd0.f90,
+ ge0.f90,
+ gf0.f90
+ tens_comb.f90
+ tensor_integrals.f90
+ tens_rec.f90
+
+----------------------------------------------------------------------
+MORE ON THE USE OF THE LIBRARY
+----------------------------------------------------------------------
+
+In constructing a program, one should be aware that the header must contain
+some use associations. A simple program to compute form factors for 4 external
+legs is given by:
+
+ program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type, only: form_factor
+ use form_factor_4p
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: s_null
+ use parametre, only: mu2_scale_par
+ implicit none
+ !
+ type(form_factor) :: result
+ !
+ call initgolem95(4)
+ !
+ ! Definition of the S matrix
+
+ s_mat(1,1) = 0.d0
+ s_mat(1,2) = 50.d0 ! (numbers to be chosen by the user)
+ s_mat(1,3) = -123.d0
+ s_mat(1,4) = 0.d0
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.d0
+ s_mat(2,3) = 0.d0
+ s_mat(2,4) = 200.d0
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.d0
+ s_mat(3,4) = 60.d0
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.d0
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix()
+ !
+ ! Results for integrals in n dimension with two Feynman parameters
+ ! at the numerator: z1*z4
+ !
+ result = a42(1,4,s_null)
+ !
+ ! The results are written, e.g.
+ !
+ write (*,'("1/epsilon2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(result%a,ki),aimag(result%a)
+ write (*,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(result%b,ki),aimag(result%b)
+ write (*,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(result%c,ki),aimag(result%c)
+ !
+ !
+ call exitgolem95()
+ !
+ end program main
+
+The program needs some use associations to import different symbols and
+functions (lines 3 to 9). Note that the module "matrice_s" exports the symbols
+s_mat and set_ref : there is no need to declare them in the main program.
+Going through the program, one can note:
+- the result is of type form_factor and need to be declared as such.
+- the subroutine initgolem95(dim) allocates memory for
+ kinematics with four external legs, memory for the cache etc.
+- the user has to fill the S matrix entries
+- exitgolem95: the allocated memory is freed.
+
+Other use associations must be added depending on what the user wants to
+compute.
+For example, if the user needs form factors for up to N=5
+external legs, the header should contain
+
+ use form_factor_1p (only needed if massive propagaors are present)
+ use form_factor_2p
+ use form_factor_3p
+ use form_factor_4p
+ use form_factor_5p
+
+Besides the form factors, Golem provides routines to compute Feynman integrals
+in six and eight space-time dimensions.
+To get them, the user can access either the generic functions for
+4-point, 3-point and 2-point cases, or dedicated functions.
+The generic functions need three mandatory arguments:
+the complete S matrix,the set of unpinched propagators, and the set of pinched
+propagators. Besides, they also have as optional arguments the labels of
+Feynman parameters in the numerators.
+To use them, the user has to put "use generic_function_Xp" in her/his code
+with (X=2,3,4). Note also that the two sets have to be packed via the routine
+packb of the "array" module (need "use array").
+With the dedicated functions, the user can compute six- and eight- dimensional
+Feynman integrals; beware of the fact that some kinematic specifications are
+encoded in a fixed way in the labelling of the external legs. For example,
+in the case of the four-point function with one external mass, the massive leg
+is encoded to be p4. If this does not fit the preference of the user, she/he has
+to do the crossing by hand on her/his own labelling. This especially matters
+with Feynman parameters in the numerator.
+Note that this applies only to the dedicated functions, when calling form factors,
+the corresponding relabelling is done automatically.
+
+Another example: if the user wants to compute the six dimensional four-point
+function with two adjacent off-shell legs, she/he has to use
+f4p2m_adj("n+2",s_var,t_var,p3sq,p4sq,0,0,0,0) :
+- the first argument is a string : n+2 or n+4
+- the second argument is s=(p_1+p_2)^2
+- the third argument is t=(p_2+p_3)^2
+- the fourth is p3^2
+- the fifth is p4^2
+- the other arguments are the Feynman parameters,
+which have to be ordered according to increasing indices:
+0,0,0,0 in cases with no Feynman parameter in the numerator,
+0,0,0,1 in cases with z_1 in the numerator,
+0,1,1,3 in cases with z_{1}^{2}*z_{3} in the numerator
+0,1,2,2 in cases with z_{1}*z_{2}^{2} in the numerator
+etc.
+Note that the header should contain a "use function_4p2m_adj" in this case.
+
+If the user starts from a kinematics given by four momenta, she/he may
+need to compute the scalar products building the entries of the S matrix.
+A routine to calculate scalar products is given in the module "spinor".
+Thus in this case the header should contain "use spinor, only: scalar"
+
+The user can change the integration method for the numerical integration
+of the one-dimensional parameter integrals by changing only the file
+mod_numeric.f90 in the directory src/numerical/
+
+The values for the cuts defining the switch to a one-dimensional numerical
+integration of the basis integrals are given in parametre.f90 and they can be
+changed easily by the user.
+If the user wishes to change the default values defined in parametre.f90,
+it is NOT necessary to recompile the library.
+If different values are defined in the main program,
+the values given in parametre.f90 will be overwritten.
+Nevertheless "use parametre" should remain in the header of the main
+program to make the corresponding variable declarations available.
+
+IMPORTANT:
+for boxes with 4 non-light-like external legs, and integrals with
+internal masses, the expressions
+for one-dimensional numerical integrations have not been worked out
+in this version. Here the program will always reduce to scalar
+basis integrals, where dangerous inverse Gram determinants can occur.
+This issue will be the object of a forthcoming improvement.
+
+There is a switch to calculate only the rational parts of amplitudes,
+set in parametre.f90. The default is "tot" to calculate the
+complete form factors. If "tot" is replace by "rat", only the
+rational parts as defined in hep-ph/0609054,JHEP 0702:013,2007
+will be calculated.
+
+An example how to use the program for a full amplitude calculation
+is given in demos, where the 4-photon helicity amplitudes are
+calculated. The expressions for the amplitudes
+in terms of invariants and GOLEM form factors have been created by a
+FORM routine which is not included in the program.
+Defining the amplitudes as type "form_factor"
+allows to involve them in algebraic manipulations, like e.g.
+addition or multiplication with real numbers, although
+form factors are arrays.
+
Property changes on: 95/branches/golem95_without_olo_cmake/README
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/makedepend.perl
===================================================================
--- 95/branches/golem95_without_olo_cmake/makedepend.perl (revision 0)
+++ 95/branches/golem95_without_olo_cmake/makedepend.perl (revision 119)
@@ -0,0 +1,159 @@
+#! /usr/local/bin/perl
+# Stripped version of makemake.perl (originally: Michael Wester)
+#
+# Adapted to write dependencies for Fortran90 which can be included
+# in Makefile.am in a libtool based configuration
+#
+# Thomas Reiter <thomasr@nikhef.nl> 2010
+# ---------------------------------------------------------------------------
+#
+# Usage: makemake {<program name> {<F90 compiler or fc or f77 or cc or c>}}
+#
+# Generate a Makefile from the sources in the current directory. The source
+# files may be in either C, FORTRAN 77, Fortran 90 or some combination of
+# these languages. If the F90 compiler specified is cray or parasoft, then
+# the Makefile generated will conform to the conventions of these compilers.
+# To run makemake, it will be necessary to modify the first line of this script
+# to point to the actual location of Perl on your system.
+#
+# Written by Michael Wester <wester@math.unm.edu> February 16, 1995
+# Cotopaxi (Consulting), Albuquerque, New Mexico
+# ---------------------------------------------------------------------------
+open(MAKEFILE, "> Makefile.dep");
+
+#
+# Source listing
+#
+@srcs = <*.f90>;
+
+#
+# Dependency listings
+#
+&MakeDependsf90($ARGV[1]);
+#
+# &PrintWords(current output column, extra tab?, word list); --- print words
+# nicely
+#
+sub PrintWords {
+ local($columns) = 78 - shift(@_);
+ local($extratab) = shift(@_);
+ local($wordlength);
+ #
+ print MAKEFILE @_[0];
+ $columns -= length(shift(@_));
+ foreach $word (@_) {
+ $wordlength = length($word);
+ if ($wordlength + 1 < $columns) {
+ print MAKEFILE " $word";
+ $columns -= $wordlength + 1;
+ }
+ else {
+ #
+ # Continue onto a new line
+ #
+ if ($extratab) {
+ print MAKEFILE " \\\n\t\t$word";
+ $columns = 62 - $wordlength;
+ }
+ else {
+ print MAKEFILE " \\\n\t$word";
+ $columns = 70 - $wordlength;
+ }
+ }
+ }
+ }
+
+#
+# &toLower(string); --- convert string into lower case
+#
+sub toLower {
+ local($string) = @_[0];
+ $string =~ tr/A-Z/a-z/;
+ $string;
+ }
+
+#
+# &uniq(sorted word list); --- remove adjacent duplicate words
+#
+sub uniq {
+ local(@words);
+ foreach $word (@_) {
+ if ($word ne $words[$#words]) {
+ push(@words, $word);
+ }
+ }
+ @words;
+ }
+
+#
+# &MakeDependsf90(); --- FORTRAN 90 dependency maker
+#
+sub MakeDependsf90 {
+ local(@dependencies);
+ local(%filename);
+ local(%lfilename);
+ local(@incs);
+ local(@odeps);
+ local(@modules);
+ local($objfile);
+ #local($lobjfile);
+ local($prefix);
+ local($mname);
+ local($fname);
+ #
+ # Associate each module with the name of the file that contains it
+ #
+ foreach $file (<*.f90>) {
+ open(FILE, $file) || warn "Cannot open $file: $!\n";
+ while (<FILE>) {
+ /^\s*module\s+([^\s!]+)/i &&
+ ($filename{&toLower($1)} = $file) =~ s/\.f90$//;
+ }
+ }
+
+ #print MAKEFILE "# Correspondance between .mod files and .o files\n";
+ #while ( ($mname, $fname) = each %filename )
+ #{
+ # print MAKEFILE "$mname.mod: $fname\n";
+ #}
+
+ print MAKEFILE "# Module dependencies\n";
+
+ #
+ # Print the dependencies of each file that has one or more include's or
+ # references one or more modules
+ #
+ foreach $file (<*.f90>) {
+ open(FILE, $file);
+ while (<FILE>) {
+ /^\s*include\s+["\']([^"\']+)["\']/i && push(@incs, $1);
+ /^\s*use\s+([^\s,!]+)/i && push(@modules, &toLower($1));
+ }
+ if (defined @incs || defined @modules) {
+ ($objfile = $file) =~ s/\.f90$//;
+
+ undef @dependencies;
+ foreach $module (@modules) {
+ if ($filename{$module}) {
+ push(@dependencies, $filename{$module});
+ }
+ }
+ @dependencies = &uniq(sort(@dependencies));
+
+ if (scalar(@dependencies) > 0) {
+ foreach $ext (".o", ".lo", ".obj") {
+ @odeps = map { $_ . $ext } @dependencies;
+
+ print MAKEFILE "$objfile$ext: ";
+ &PrintWords(length($objfile) + 2, 0,
+ @odeps, &uniq(sort(@incs)));
+ print MAKEFILE "\n";
+ }
+ }
+
+ undef @incs;
+ undef @modules;
+ }
+ close(FILE)
+ }
+}
Property changes on: 95/branches/golem95_without_olo_cmake/makedepend.perl
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/config.aux/missing
===================================================================
--- 95/branches/golem95_without_olo_cmake/config.aux/missing (revision 0)
+++ 95/branches/golem95_without_olo_cmake/config.aux/missing (revision 119)
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar*)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ tar*)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
Property changes on: 95/branches/golem95_without_olo_cmake/config.aux/missing
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 95/branches/golem95_without_olo_cmake/config.aux/config.guess
===================================================================
--- 95/branches/golem95_without_olo_cmake/config.aux/config.guess (revision 0)
+++ 95/branches/golem95_without_olo_cmake/config.aux/config.guess (revision 119)
@@ -0,0 +1,1511 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_MACHINE}" in
+ i?86)
+ test -z "$VENDOR" && VENDOR=pc
+ ;;
+ *)
+ test -z "$VENDOR" && VENDOR=unknown
+ ;;
+esac
+test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-${VENDOR}-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-${VENDOR}-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-${VENDOR}-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[456])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-${VENDOR}-osf1mk
+ else
+ echo ${UNAME_MACHINE}-${VENDOR}-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-${VENDOR}-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-${VENDOR}-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-${VENDOR}-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-${VENDOR}-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-${VENDOR}-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-${VENDOR}-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-${VENDOR}-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-${VENDOR}-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-${VENDOR}-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
+ PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
+ *) echo hppa-${VENDOR}-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-${VENDOR}-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-${VENDOR}-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-${VENDOR}-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-${VENDOR}-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-${VENDOR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-${VENDOR}-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-${VENDOR}-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-${VENDOR}-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-${VENDOR}-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-${VENDOR}-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-${VENDOR}-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
Property changes on: 95/branches/golem95_without_olo_cmake/config.aux/config.guess
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 95/branches/golem95_without_olo_cmake/config.aux/config.sub
===================================================================
--- 95/branches/golem95_without_olo_cmake/config.aux/config.sub (revision 0)
+++ 95/branches/golem95_without_olo_cmake/config.aux/config.sub (revision 119)
@@ -0,0 +1,1705 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
Property changes on: 95/branches/golem95_without_olo_cmake/config.aux/config.sub
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 95/branches/golem95_without_olo_cmake/config.aux/ltmain.sh
===================================================================
--- 95/branches/golem95_without_olo_cmake/config.aux/ltmain.sh (revision 0)
+++ 95/branches/golem95_without_olo_cmake/config.aux/ltmain.sh (revision 119)
@@ -0,0 +1,8406 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+# --config show all configuration variables
+# --debug enable verbose shell tracing
+# -n, --dry-run display commands without modifying any files
+# --features display basic configuration information and exit
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print informational messages (default)
+# --version print version information
+# -h, --help print short or long help message
+#
+# MODE must be one of the following:
+#
+# clean remove files from the build directory
+# compile compile a source file into a libtool object
+# execute automatically set library path, then run a program
+# finish complete the installation of libtool libraries
+# install install libraries or executables
+# link create a library or an executable
+# uninstall remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool) 2.2.6b
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.2.6b
+TIMESTAMP=""
+package_revision=1.3018
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/usr/bin/grep -E"}
+: ${FGREP="/usr/bin/grep -F"}
+: ${GREP="/usr/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/usr/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+ -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=$func_dirname_result
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=:
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+ if test "$opt_dry_run" = ":"; then
+ # Return a directory name, but don't create it in dry-run mode
+ my_tmpdir="${my_template}-$$"
+ else
+
+ # If mktemp works, use that first and foremost
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$my_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$my_tmpdir"
+ umask $save_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$my_tmpdir" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+ fi
+
+ $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "X$1" | $Xsed \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$lt_user_locale
+ $my_cmd"
+ my_status=$?
+ eval "$lt_safe_locale"
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $SED -n '/^# Usage:/,/# -h/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ $ECHO
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ func_error "missing argument for $1"
+ exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell, and then maybe $ECHO will work.
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+ $ECHO "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $ECHO "enable shared libraries"
+ else
+ $ECHO "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $ECHO "enable static libraries"
+ else
+ $ECHO "disable static libraries"
+ fi
+
+ exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+# Parse options once, thoroughly. This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ esac
+
+ # Parse non-mode specific arguments:
+ while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --config) func_config ;;
+
+ --debug) preserve_args="$preserve_args $opt"
+ func_echo "enabling shell trace mode"
+ opt_debug='set -x'
+ $opt_debug
+ ;;
+
+ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ execute_dlfiles="$execute_dlfiles $1"
+ shift
+ ;;
+
+ --dry-run | -n) opt_dry_run=: ;;
+ --features) func_features ;;
+ --finish) mode="finish" ;;
+
+ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ case $1 in
+ # Valid mode arguments:
+ clean) ;;
+ compile) ;;
+ execute) ;;
+ finish) ;;
+ install) ;;
+ link) ;;
+ relink) ;;
+ uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+
+ mode="$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_duplicate_deps=: ;;
+
+ --quiet|--silent) preserve_args="$preserve_args $opt"
+ opt_silent=:
+ ;;
+
+ --verbose| -v) preserve_args="$preserve_args $opt"
+ opt_silent=false
+ ;;
+
+ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ preserve_args="$preserve_args $opt $1"
+ func_enable_tag "$1" # tagname is set here
+ shift
+ ;;
+
+ # Separate optargs to long options:
+ -dlopen=*|--mode=*|--tag=*)
+ func_opt_split "$opt"
+ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) opt_help=: ;;
+ --version) func_version ;;
+
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+
+ *) nonopt="$opt"
+ break
+ ;;
+ esac
+ done
+
+
+ case $host in
+ *cygwin* | *mingw* | *pw32* | *cegcc*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+ ;;
+ esac
+
+ # Having warned about all mis-specified options, bail out if
+ # anything was wrong.
+ $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+$opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_ltwrapper_scriptname_result=""
+ if func_ltwrapper_executable_p "$1"; then
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+ fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $opt_debug
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case "$@ " in
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
+
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ pie_flag="$pie_flag $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ later="$later $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$arg"
+ lastarg="$lastarg $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_quote_for_eval "$lastarg"
+ base_compile="$base_compile $func_quote_for_eval_result"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with \`-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname="$func_basename_result"
+ xdir="$func_dirname_result"
+ lobj=${xdir}$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ removelist="$removelist $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ removelist="$removelist $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$mode'"
+ ;;
+ esac
+
+ $ECHO
+ $ECHO "Try \`$progname --help' for more information about other modes."
+
+ exit $?
+}
+
+ # Now that we've collected a possible --mode arg, show help if necessary
+ $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_quote_for_eval "$file"
+ args="$args $func_quote_for_eval_result"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ $ECHO "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ $ECHO "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ $ECHO
+ $ECHO "If you ever happen to want to link against installed libraries"
+ $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+ $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $ECHO "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $ECHO " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
+ $ECHO " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $ECHO
+
+ $ECHO "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ $ECHO "pages."
+ ;;
+ *)
+ $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog$func_quote_for_eval_result"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ case " $install_prog " in
+ *[\\\ /]cp\ *) ;;
+ *) prev=$arg ;;
+ esac
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir="$func_dirname_result"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_verbose "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_verbose "extracting global C symbols from \`$progfile'"
+ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs. */"
+ lt_dlsym_const= ;;
+ *osf5*)
+ echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+ lt_dlsym_const= ;;
+ *)
+ lt_dlsym_const=const ;;
+ esac
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) symtab_cflags="$symtab_cflags $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+ $opt_debug
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s,.*,import,
+ p
+ q
+ }
+ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename "$darwin_archive"`
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+ func_emit_wrapper_part1_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_part1_arg1=$1
+ fi
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ ECHO=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$ECHO works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$ECHO will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $ECHO "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+ func_emit_wrapper_part2_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_part2_arg1=$1
+ fi
+
+ $ECHO "\
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_arg1=$1
+ fi
+
+ # split this up so that func_emit_cwrapperexe_src
+ # can call each part independently.
+ func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+ func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+# $build $host
+# mingw (msys) mingw [e.g. native]
+# cygwin mingw
+# *nix + wine mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin. Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+ func_to_host_path_result="$1"
+ if test -n "$1" ; then
+ case $host in
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ case $build in
+ *mingw* ) # actually, msys
+ # awkward: cmd appends spaces to result
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+ func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ *cygwin* )
+ func_to_host_path_tmp1=`cygpath -w "$1"`
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ * )
+ # Unfortunately, winepath does not exit with a non-zero
+ # error code, so we are forced to check the contents of
+ # stdout. On the other hand, if the command is not
+ # found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both
+ # error code of zero AND non-empty stdout, which explains
+ # the odd construction:
+ func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ else
+ # Allow warning below.
+ func_to_host_path_result=""
+ fi
+ ;;
+ esac
+ if test -z "$func_to_host_path_result" ; then
+ func_error "Could not determine host path corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_path_result="$1"
+ fi
+ ;;
+ esac
+ fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+# $build $host
+# mingw (msys) mingw [e.g. native]
+# cygwin mingw
+# *nix + wine mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+ func_to_host_pathlist_result="$1"
+ if test -n "$1" ; then
+ case $host in
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_to_host_pathlist_tmp2="$1"
+ # Once set for this call, this variable should not be
+ # reassigned. It is used in tha fallback case.
+ func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e 's|^:*||' -e 's|:*$||'`
+ case $build in
+ *mingw* ) # Actually, msys.
+ # Awkward: cmd appends spaces to result.
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+ func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ *cygwin* )
+ func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+ ;;
+ * )
+ # unfortunately, winepath doesn't convert pathlists
+ func_to_host_pathlist_result=""
+ func_to_host_pathlist_oldIFS=$IFS
+ IFS=:
+ for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+ IFS=$func_to_host_pathlist_oldIFS
+ if test -n "$func_to_host_pathlist_f" ; then
+ func_to_host_path "$func_to_host_pathlist_f"
+ if test -n "$func_to_host_path_result" ; then
+ if test -z "$func_to_host_pathlist_result" ; then
+ func_to_host_pathlist_result="$func_to_host_path_result"
+ else
+ func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+ fi
+ fi
+ fi
+ IFS=:
+ done
+ IFS=$func_to_host_pathlist_oldIFS
+ ;;
+ esac
+ if test -z "$func_to_host_pathlist_result" ; then
+ func_error "Could not determine the host path(s) corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This may break if $1 contains DOS-style drive
+ # specifications. The fix is not to complicate the expression
+ # below, but for the user to provide a working wine installation
+ # with winepath so that path translation in the cross-to-mingw
+ # case works properly.
+ lt_replace_pathsep_nix_to_dos="s|:|;|g"
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+ $SED -e "$lt_replace_pathsep_nix_to_dos"`
+ fi
+ # Now, add the leading and trailing path separators back
+ case "$1" in
+ :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+ ;;
+ esac
+ case "$1" in
+ *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "$SHELL $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# define HAVE_SETENV
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+# define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+ va_list args;
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+ func_emit_wrapper_part1 yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ "/' -e 's/$/\\n"/'
+ echo ";"
+ cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+ func_emit_wrapper_part2 yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ "/' -e 's/$/\\n"/'
+ echo ";"
+
+ cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_pathlist "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_pathlist "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test "$fast_install" = yes; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
+
+static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set";
+ /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend";
+ /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append";
+ /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ intptr_t rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
+ LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+ /* very simple arg parsing; don't want to rely on getopt */
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ printf ("%s", script_text_part1);
+ printf ("%s", script_text_part2);
+ return 0;
+ }
+ }
+
+ newargz = XMALLOC (char *, argc + 1);
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal ("Couldn't find %s", argv[0]);
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+ tmp_pathspec));
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+ actual_cwrapper_path));
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+ target_name));
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+ {
+ if (argv[i][env_set_opt_len] == '=')
+ {
+ const char *p = argv[i] + env_set_opt_len + 1;
+ lt_opt_process_env_set (p);
+ }
+ else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+ {
+ lt_opt_process_env_set (argv[++i]); /* don't copy */
+ }
+ else
+ lt_fatal ("%s missing required argument", env_set_opt);
+ continue;
+ }
+ if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+ {
+ if (argv[i][env_prepend_opt_len] == '=')
+ {
+ const char *p = argv[i] + env_prepend_opt_len + 1;
+ lt_opt_process_env_prepend (p);
+ }
+ else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+ {
+ lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+ }
+ else
+ lt_fatal ("%s missing required argument", env_prepend_opt);
+ continue;
+ }
+ if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+ {
+ if (argv[i][env_append_opt_len] == '=')
+ {
+ const char *p = argv[i] + env_append_opt_len + 1;
+ lt_opt_process_env_append (p);
+ }
+ else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+ {
+ lt_opt_process_env_append (argv[++i]); /* don't copy */
+ }
+ else
+ lt_fatal ("%s missing required argument", env_append_opt);
+ continue;
+ }
+ if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal ("Unrecognized option in %s namespace: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+ LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+ for (i = 0; i < newargc; i++)
+ {
+ LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char *concat_name;
+
+ LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
+ wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+ tmp_pathspec));
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ char *errstr = strerror (errno);
+ lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal ("Could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp (str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+ (name ? name : "<NULL>"),
+ (value ? value : "<NULL>")));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ int len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ int orig_value_len = strlen (orig_value);
+ int add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+ const char *p;
+ int len;
+ if (!arg || !*arg)
+ return 1;
+
+ p = strchr (arg, (int)'=');
+
+ if (!p)
+ return 1;
+
+ *value = xstrdup (++p);
+
+ len = strlen (arg) - strlen (*value);
+ *name = XMALLOC (char, len);
+ strncpy (*name, arg, len-1);
+ (*name)[len - 1] = '\0';
+
+ return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+ char *name = NULL;
+ char *value = NULL;
+
+ if (lt_split_name_value (arg, &name, &value) != 0)
+ {
+ XFREE (name);
+ XFREE (value);
+ lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+ }
+
+ lt_setenv (name, value);
+ XFREE (name);
+ XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+ char *name = NULL;
+ char *value = NULL;
+ char *new_value = NULL;
+
+ if (lt_split_name_value (arg, &name, &value) != 0)
+ {
+ XFREE (name);
+ XFREE (value);
+ lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+ }
+
+ new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ XFREE (name);
+ XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+ char *name = NULL;
+ char *value = NULL;
+ char *new_value = NULL;
+
+ if (lt_split_name_value (arg, &name, &value) != 0)
+ {
+ XFREE (name);
+ XFREE (value);
+ lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+ }
+
+ new_value = lt_extend_str (getenv (name), value, 1);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ XFREE (name);
+ XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ (name ? name : "<NULL>"),
+ (value ? value : "<NULL>")));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ int len = strlen (new_value);
+ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[len-1] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ (name ? name : "<NULL>"),
+ (value ? value : "<NULL>")));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module="${wl}-single_module"
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file \`$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ weak)
+ weak_libs="$weak_libs $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname '-L' '' "$arg"
+ dir=$func_stripname_result
+ if test -z "$dir"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between \`-L' and \`$1'"
+ else
+ func_fatal_error "need path for \`-L' option"
+ fi
+ fi
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module="${wl}-multi_module"
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+ linker_flags="$linker_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
+ # -q* pass through compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+ # -F/path gives path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+ # @file GCC response files
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ compiler_flags="$compiler_flags $arg"
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname="$func_basename_result"
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_duplicate_deps ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ case $lib in
+ *.la) func_source "$lib" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ func_warning "\`-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test "$linkmode" = lib; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ *)
+ func_warning "\`-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+ dir=$func_stripname_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=yes
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=yes
+ ;;
+ esac
+ if test "$valid_a_lib" != yes; then
+ $ECHO
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+ $ECHO "*** that it is just a static archive that I should not use here."
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+ fi
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ fi
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname="$func_basename_result"
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library \`$lib' was moved."
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { { test "$prefer_static_libs" = no ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+ *) temp_rpath="$temp_rpath$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test "$use_static_libs" = built && test "$installed" = yes; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc*)
+ # No point in relinking DLLs because paths are not encoded
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+ $ECHO
+ if test "$linkmode" = prog; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $ECHO
+ $ECHO "*** And there doesn't seem to be a static archive available"
+ $ECHO "*** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ elif test -n "$old_library"; then
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes &&
+ test "$hardcode_minus_L" != yes &&
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $ECHO
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $ECHO "*** But as you try to build a module library, libtool will still create "
+ $ECHO "*** a static module, that should work as long as the dlopening application"
+ $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ func_dirname "$deplib" "" "."
+ dir="$func_dirname_result"
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of \`$dir'"
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path="-L$absdir/$objdir"
+ ;;
+ esac
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
+ path="-L$absdir"
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test "$pass" = link; then
+ if test "$linkmode" = "prog"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ shift
+ IFS="$save_ifs"
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$1"
+ number_minor="$2"
+ number_revision="$3"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_minor"
+ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+ no)
+ current="$1"
+ revision="$2"
+ age="$3"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ irix | nonstopux)
+ if test "X$lt_irix_increment" = "Xno"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ qnx)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type \`$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ func_warning "undefined symbols not allowed in $host shared libraries"
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ libobjs="$libobjs $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+ # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which I believe you do not have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ $ECHO "*** make it link in! You will probably need to install it or some"
+ $ECHO "*** library that it depends on before this library will be fully"
+ $ECHO "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+ done
+ fi
+ if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
+ $GREP . >/dev/null; then
+ $ECHO
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $ECHO "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $ECHO
+ $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ $ECHO "*** a static module, that should work as long as the dlopening"
+ $ECHO "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $ECHO "*** The inter-library dependencies that have been dropped here will be"
+ $ECHO "*** automatically added whenever a program is linked with this library"
+ $ECHO "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $ECHO
+ $ECHO "*** Since this library must not contain undefined symbols,"
+ $ECHO "*** because either the platform does not support them or"
+ $ECHO "*** it was explicitly requested with -no-undefined,"
+ $ECHO "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ linknames=
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ delfiles="$delfiles $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ func_len " $cmd"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ $ECHO 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ $ECHO "$obj" >> $output
+ done
+ $ECHO ')' >> $output
+ delfiles="$delfiles $output"
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ $ECHO "$obj" >> $output
+ done
+ delfiles="$delfiles $output"
+ output=$firstobj\"$file_list_spec$output\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test "X$objlist" = X ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=$obj
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+ delfiles="$delfiles $output"
+
+ else
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ fi
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec and hope we can get by with
+ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
+
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=yes
+ case $host in
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *cegcc)
+ # Disable wrappers for cegcc, we are cross compiling anyway.
+ wrappers_required=no
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
+ # Replace the output file specification.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+ fi
+
+ exit $exit_status
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $ECHO for shipping.
+ if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+ case $progpath in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+ esac
+ qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host" ; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ oldobjs="$oldobjs $symfileobj"
+ fi
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $addlibs
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $ECHO "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase="$func_basename_result"
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ oldobjs="$oldobjs $gentop/$newobj"
+ ;;
+ *) oldobjs="$oldobjs $obj" ;;
+ esac
+ done
+ fi
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlfiles="$newdlfiles $libdir/$name"
+ ;;
+ *) newdlfiles="$newdlfiles $lib" ;;
+ esac
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlfiles="$newdlfiles $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlprefiles="$newdlprefiles $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+ func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ RM="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) RM="$RM $arg"; rmforce=yes ;;
+ -*) RM="$RM $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ func_basename "$file"
+ name="$func_basename_result"
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+ case "$mode" in
+ clean)
+ case " $library_names " in
+ # " " in the beginning catches empty $dlname
+ *" $dlname "*) ;;
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ esac
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
Property changes on: 95/branches/golem95_without_olo_cmake/config.aux/ltmain.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 95/branches/golem95_without_olo_cmake/config.aux/install-sh
===================================================================
--- 95/branches/golem95_without_olo_cmake/config.aux/install-sh (revision 0)
+++ 95/branches/golem95_without_olo_cmake/config.aux/install-sh (revision 119)
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dst_arg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ -*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
Property changes on: 95/branches/golem95_without_olo_cmake/config.aux/install-sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 95/branches/golem95_without_olo_cmake/configure.ac
===================================================================
--- 95/branches/golem95_without_olo_cmake/configure.ac (revision 0)
+++ 95/branches/golem95_without_olo_cmake/configure.ac (revision 119)
@@ -0,0 +1,261 @@
+AC_INIT
+
+dnl -----------------------------------------------
+dnl Package name and version number (user defined)
+dnl -----------------------------------------------
+
+GENERIC_LIBRARY_NAME=golem
+GENERIC_PACKAGE_NAME=golem95
+
+#release versioning
+GENERIC_MAJOR_VERSION=1
+GENERIC_MINOR_VERSION=2
+GENERIC_MICRO_VERSION=1
+
+#API version (often = GENERIC_MAJOR_VERSION.GENERIC_MINOR_VERSION)
+GENERIC_API_VERSION=$GENERIC_MAJOR_VERSION.$GENERIC_MINOR_VERSION
+AC_SUBST(GENERIC_API_VERSION)
+
+#shared library versioning
+GENERIC_LIBRARY_VERSION=1:1:1
+# | | |
+# +------+ | +---+
+# | | |
+# current:revision:age
+# | | |
+# | | +- increment if interfaces have been added
+# | | set to zero if interfaces have been removed
+# or changed
+# | +- increment if source code has changed
+# | set to zero if current is incremented
+# +- increment if interfaces have been added, removed or changed
+
+dnl --------------------------------
+dnl Package name and version number
+dnl --------------------------------
+
+AC_SUBST(GENERIC_LIBRARY_VERSION)
+
+PACKAGE=$GENERIC_PACKAGE_NAME
+AC_SUBST(GENERIC_LIBRARY_NAME)
+
+GENERIC_VERSION=$GENERIC_MAJOR_VERSION.$GENERIC_MINOR_VERSION.$GENERIC_MICRO_VERSION
+AC_SUBST(GENERIC_VERSION)
+
+VERSION=$GENERIC_VERSION
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_AUX_DIR([config.aux])
+
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define, no-dependencies)
+
+dnl -----------------------------------------------
+dnl Checks for programs.
+dnl -----------------------------------------------
+
+AC_LANG_PUSH([Fortran])
+AC_PROG_F77([gfortran ifort g77 f77 xlf frt pgf77 fort77 fl32 af77])
+AC_PROG_FC([gfortran ifort g77 f77 xlf frt pgf77 fort77 fl32 af77])
+
+dnl When configuring for `make dist' purposes, skip checks that may yield fatal
+dnl errors when there is no working F90 compiler.
+if test -z "$with_dist"; then
+ dnl Check the flags needed to link fc programs with ld (i.e. cc)
+ AC_FC_LIBRARY_LDFLAGS
+ dnl Check for underscoring of external names
+ AC_FC_WRAPPERS
+ dnl We need to use .f90 and not .f to enable Automake FC support
+ dnl Some Intel ifc/ifort do not understand .f95. :-/
+ AC_FC_SRCEXT([f90])
+ AC_FC_FREEFORM
+fi
+AC_LANG_POP
+
+LT_INIT
+
+AM_SANITY_CHECK
+
+AC_PATH_PROG(PERL,perl,perl)
+
+dnl ----------------------------------------------
+dnl tensorial reconstruction interface
+dnl ----------------------------------------------
+dnl user should be able to switch off tensorial reconstruction
+AC_ARG_ENABLE([tensrec],
+ [AS_HELP_STRING([--disable-tensrec],
+ [switch off tensorial reconstruction interface])],
+ [case "${enableval}" in
+ yes) with_tensrec=yes ;;
+ no) with_tensrec=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-tensrec) ;;
+ esac],
+ [with_tensrec=yes])
+
+AM_CONDITIONAL(COMPILE_TENSREC, [test "x$with_tensrec" != xno])
+
+dnl -----------------------------------------------
+dnl link LoopTools
+dnl -----------------------------------------------
+AC_ARG_WITH([looptools],
+ [AS_HELP_STRING([--with-looptools],
+ [enable linking to LoopTools])],
+ [],
+ [with_looptools=no])
+
+LIBLOOPTOOLS=
+AS_IF(
+ [test "x$with_looptools" == xyes],
+ [AC_CHECK_LIB([ooptools -lgfortran], [ltexi_],
+ [AC_SUBST([LIBLOOPTOOLS], ["-looptools"])
+ AC_DEFINE([HAVE_LT], [1], [Define if you have Looptools])
+ ],
+ [AC_MSG_FAILURE(
+ [--with-looptools was given, but test for -looptools failed. \
+ Consider using --with-looptools=path/libooptools.a .])],
+ [-looptools])],
+ [test "x$with_looptools" != xno],
+ [AC_CHECK_FILE([$with_looptools],
+ [AC_SUBST([LIBLOOPTOOLS], ["$with_looptools"])
+ AC_DEFINE([HAVE_LT], [1], [Define if you have Looptools])
+ ],
+ [AC_MSG_FAILURE(
+ [--with-looptools was given, but location '$with_looptools' \
+ is wrong.])])]
+ )
+
+AS_IF([test "x$with_looptools" != xno],
+ [AC_SUBST([case_with_lt], [" "])],
+ [AC_SUBST([case_with_lt], ["!AC!"])])
+AS_IF([test "x$with_looptools" != xno],
+ [AC_SUBST([case_wout_lt], ["!AC!"])],
+ [AC_SUBST([case_wout_lt], [" "])])
+
+dnl -----------------------------------------------
+dnl Set the precision used by LoopTools
+dnl -----------------------------------------------
+AC_ARG_WITH([lt-precision], [AS_HELP_STRING([--with-lt-precision],
+ [set the precision used by LoopTools to either
+ 'double' or 'quadruple'. @<:@default=double@:>@])],
+ [], [with_lt_precision=double])
+
+AS_IF(
+ [test "x$with_lt_precision" == xquadruple],
+ [AC_SUBST([lt_real_kind], ["selected_real_kind(32,50)"])],
+ [test "x$with_lt_precision" == xquad],
+ [AC_SUBST([lt_real_kind], ["selected_real_kind(32,50)"])],
+ [test "x$with_lt_precision" == xdouble],
+ [AC_SUBST([lt_real_kind], ["kind(1.0d0)"])],
+ [AC_MSG_FAILURE([--with-lt-precision was given with an
+ unrecognized parameter])])
+
+dnl -----------------------------------------------
+dnl link AvH's OneLOop
+dnl -----------------------------------------------
+dnl AC_ARG_WITH([avh_olo],
+dnl [AS_HELP_STRING([--without-avh_olo],
+dnl [disable integrals from OneLOop])],
+dnl [],
+dnl [with_avh_olo=auto])
+dnl
+dnl LIBAVHOLO=
+dnl AS_IF([test "x$with_avh_olo" == xauto],
+dnl [AC_CHECK_LIB([avh_olo], [avh_olo_d0_],
+dnl [AC_SUBST([LIBAVHOLO], ["-avh_olo"])
+dnl AC_DEFINE([HAVE_AVH], [1], [Define if you have AvHOneLOop])
+dnl ],
+dnl [AC_MSG_FAILURE(
+dnl [No path specified for avh_olo and test for avh_olo failed. \
+dnl Consider using --with-avh_olo=path/libavh_olo.a \
+dnl or --without-avh_olo.])],
+dnl [-avh_olo])],
+dnl [test "x$with_avh_olo" == xyes],
+dnl [AC_CHECK_LIB([avh_olo], [avh_olo_d0_],
+dnl [AC_SUBST([LIBAVHOLO], ["-avh_olo"])
+dnl AC_DEFINE([HAVE_AVH], [1], [Define if you have AvHOneLOop])
+dnl ],
+dnl [AC_MSG_FAILURE(
+dnl [--with-avh_olo was given, but test for avh_olo failed. \
+dnl Consider using --with-avh_olo=path/libavh_olo.a .])],
+dnl [-avh_olo])],
+dnl
+dnl [test "x$with_avh_olo" != xno],
+dnl [AC_CHECK_FILE([$with_avh_olo],
+dnl [AC_SUBST([LIBAVHOLO], ["$with_avh_olo"])
+dnl AC_DEFINE([HAVE_AVH], [1], [Define if you have AvHOneLOop])
+dnl ],
+dnl [AC_MSG_FAILURE(
+dnl [--with-avh_olo was given, but location '$with_avh_olo' \
+dnl is wrong.])])]
+dnl )
+dnl
+dnl AS_IF([test "x$with_avh_olo" != xno],
+dnl [AC_SUBST([case_with_avh], [" "])],
+dnl [AC_SUBST([case_with_avh], ["!AC!"])])
+dnl AS_IF([test "x$with_avh_olo" != xno],
+dnl [AC_SUBST([case_wout_avh], ["!AC!"])],
+dnl [AC_SUBST([case_wout_avh], [" "])])
+dnl
+dnl -----------------------------------------------
+dnl Set the precision
+dnl -----------------------------------------------
+AC_ARG_WITH([precision], [AS_HELP_STRING([--with-precision],
+ [set the precision of the library to either
+ 'double' or 'quadruple'. @<:@default=double@:>@])],
+ [], [with_precision=double])
+
+AS_IF(
+ [test "x$with_precision" == xquadruple],
+ [AC_SUBST([fortran_real_kind], ["selected_real_kind(32,50)"])],
+ [test "x$with_precision" == xquad],
+ [AC_SUBST([fortran_real_kind], ["selected_real_kind(32,50)"])],
+ [test "x$with_precision" == xdouble],
+ [AC_SUBST([fortran_real_kind], ["kind(1.0d0)"])],
+ [test "x$with_precision" == xintermediate],
+ [AC_SUBST([fortran_real_kind], ["selected_real_kind(18,4931)"])],
+ [AC_MSG_FAILURE([--with-precision was given with an unrecognized
+ parameter])])
+
+dnl -----------------------------------------------
+dnl Set the precision of AVH's OneLOop
+dnl -----------------------------------------------
+AC_ARG_WITH([avh_olo_precision], [AS_HELP_STRING([--with-avh_olo-precision],
+ [set the precision of OneLOop to either
+ 'double' or 'quadruple'. @<:@default=double@:>@])],
+ [], [with_avh_olo_precision=double])
+
+AS_IF(
+ [test "x$with_avh_olo_precision" == xquadruple],
+ [AC_SUBST([avh_olo_real_kind],["selected_real_kind(32,50)"])],
+ [test "x$with_avh_olo_precision" == xquad],
+ [AC_SUBST([avh_olo_real_kind],["selected_real_kind(32,50)"])],
+ [test "x$with_avh_olo_precision" == xdouble],
+ [AC_SUBST([avh_olo_real_kind],["kind(1.0d0)"])],
+ [test "x$with_precision" == xintermediate],
+ [AC_SUBST([avh_olo_real_kind],["selected_real_kind(18,4931)"])],
+ [AC_MSG_FAILURE([--with-avh_olo-precision
+ was given with an unrecognized parameter])])
+
+dnl -----------------------------------------------
+dnl Generates Makefile's, configuration files and scripts
+dnl -----------------------------------------------
+
+AC_CONFIG_FILES([Makefile \
+ avh_olo-2.2.1/Makefile \
+ avh_olo-2.2.1/avh_olo_xkind.f90 \
+ src/Makefile \
+ src/module/Makefile \
+ src/module/precision_golem.f90 \
+ src/integrals/Makefile \
+ src/integrals/two_point/Makefile \
+ src/integrals/one_point/Makefile \
+ src/integrals/three_point/Makefile \
+ src/integrals/four_point/Makefile \
+ src/integrals/four_point/generic_function_4p.f90 \
+ src/interface/Makefile \
+ src/numerical/Makefile \
+ src/kinematic/Makefile \
+ src/form_factor/Makefile \
+ test/Makefile_proto \
+ demos/Makefile \
+ golem95.pc])
+AC_OUTPUT
Property changes on: 95/branches/golem95_without_olo_cmake/configure.ac
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/doc/html/kinematic/inverse_matrice_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/kinematic/inverse_matrice_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/kinematic/inverse_matrice_f90.html (revision 119)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/kinematic/inverse_matrice.f90</title>
+<!-- Source: ./../src/kinematic/inverse_matrice.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fkinematic2finverse5fmatrice"></a>
+<a name="robo45"></a><h2>src/kinematic/inverse_matrice [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module inverse_matrice
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use inverse_matrice
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module provides some routines and tools to inverse a n x n matrix.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two routines:
+ * inverse -- to inverse a nXn matrix
+ * imprime_mat -- to print a nXn matrix
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * equal (src/module/<a href="../module/equal_f90.html#robo_top_of_doc">equal.f90</a>)
+ * s_matrix_type (src/module/<a href="../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+ * constante (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fkinematic2finverse5fmatrice2fimprime5fmat"></a>
+<a name="robo372"></a><h2>src/kinematic/inverse_matrice/imprime_mat [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine imprime_mat
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call imprime_mat(mat)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine prints a n x n matrix
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * mat -- a real/complex (type ki) array of rank 2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No value returned
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> WARNING: swapped lines and columns! mat(line, column)
+</pre>
+
+<hr />
+<a name="src2fkinematic2finverse5fmatrice2finverse"></a>
+<a name="robo373"></a><h2>src/kinematic/inverse_matrice/inverse [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine inverse
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call inverse(mat,inv_mat,error,pinch1,pinch2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine first tries the Gauss method with partial pivoting strategy.
+ If the error returned is too large (greater than the global variable accuracy_par),
+ then it switches to another method : the Greville method.
+ In the case of the Gauss method, if some reduced matrices need to be inverted, a new matrix is built
+ by removing the row(s) and column(s) pinch1,pinch2, then the inverse is computed and the result returned
+ is a nXn matrix where the column(s) and row(s) pinch1, pinch2 are filled by 0, the other elements
+ are those of the inverse computed. In the Greville method, the reduce matrix which is a nXn matrix
+ where the column(s) and row(s) pinch1, pinch2 are filled by 0 is directly inverted.
+ Note that the error is computed in the following way:
+ first the matrix is rescaled : i. e. divided by the greatest (in absolute value) element
+ then the inverse is computed and the two matrices abs(1 - A^(-1) A) and abs(1 - A A^(-1)) are computed
+ the error is the greatest element of these two matrices.
+ In the case of the Greville method, the Moore_Penrose conditions are also tested
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * mat -- a real/complex (type ki) array of rank 2, or an s_matrix_poly type.
+ * pinch1 -- an integer (optional), specified a pinch
+ * pinch2 -- an integer (optional), specified a pinch
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> * inv_mat -- a real (type ki) array of rank 2, same shape, the inverse
+ of the matrix mat
+ * error -- a real (type ki), the estimation of the error of the numerical inversion
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/kinematic/inverse_matrice.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/kinematic/matrice_s_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/kinematic/matrice_s_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/kinematic/matrice_s_f90.html (revision 119)
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/kinematic/matrice_s.f90</title>
+<!-- Source: ./../src/kinematic/matrice_s.f90 -->
+<!-- Generated with ROBODoc Version 4.99.40 (Sep 7 2010) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fkinematic2fmatrice5fs"></a>
+<a name="robo47"></a><h2>src/kinematic/matrice_s [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module matrice_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use matrice_s
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used : to reserve some memory in order to pass the S matrix, its
+ shape, the set of propagator labels; to compute the inverse
+ of S matrix and the related quantities : the b's and sumb, also for the
+ reduce matrix (up to 4 X 4). The S matrix is allocated here and also its dimension
+ and it returns the result through the three functions inv_s, b and sumb.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports five variables:
+ * dim_s -- an integer, the shape of the initial S matrix
+ * set_ref -- an integer array, the set of initial propagators
+ * s_mat_c -- a complex (type ki) array of rank 2, the S matrix.
+ * s_mat_p -- a derived type, including the S matrix for either real or complex masses
+ and integer-bits encoding the positions of masses with non-vanishing Im-part,
+ and vanishing masses.
+ * s_mat -- A pointer associated with s_mat_c. The user can fill s_mat or s_mat_c with complex or
+ real values.
+
+ and also eleven functions:
+ * init_golem95 -- calls allocation_s, initializes the cache, associates s_mat.
+ * allocation_s -- to allocate the required memory
+ * deallocation_s -- to deallocate the used memory
+ * prepare_s_matrix -- fill s_mat_r with the real part of s_mat_c, sets the bit integers in s_mat_p
+ calls init_invs.
+ * init_invs -- to fill all the array for the inverse of the S matrix
+ and the inverse of the reduce S matrix
+ * inv_s -- it contains the inverse of the S matrix
+ * hj -- it contains H matrix (pseudo-inverse of G)
+ * b -- it contains the b coefficients
+ * sumb -- it contains the B coeficient
+ * norma_sumb -- it contains the normalised B coefficient
+ * exit_golem95 -- deallocates memory, clear the cache.
+
+ Only dim_s and set_ref take a value in this module, not the other variables
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/precision_golem.f90)
+ * sortie_erreur (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * inverse_matrice (src/kinematic/<a href="./inverse_matrice_f90.html#robo_top_of_doc">inverse_matrice.f90</a>)
+ * tri_croissant (src/module/tri_croissant.f90)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * parametre (src/module/<a href="../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * s_matrix_type (src/module/<a href="../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fkinematic2finversion2fb"></a>
+<a name="robo376"></a><h2>src/kinematic/inversion/b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = b(i,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function gives the b coefficients whatever the S matrix dimension (&lt;=6)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer, label of the b coefficients
+ * set -- an integer array of rank 1, the set of pinch propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Warning: Now a complex (type ki) is returned! [TK Sep10]
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2finversion2fhj"></a>
+<a name="robo377"></a><h2>src/kinematic/inversion/hj [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function hj
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = hj(i,j,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function gives the H matrix (pseudo-inverse of G) (dim=6)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer, line number
+ * j -- an integer, row number
+ * set -- an integer array of rank 1, the set of pinch propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Warning: Now a complex (type ki) is returned! [TK Sep10]
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2finversion2finit5finvs"></a>
+<a name="robo378"></a><h2>src/kinematic/inversion/init_invs [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine init_invs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call init_invs()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function comes in two copies for real masses and complex masses.
+ The respective arrays are filled.
+
+ For a 6 x 6 S matrix, this routine fills the arrays:
+ invs6, hjj, b6, sumb6, invs5, b5, sumb5, invs4, b4, sumb4, norma_sumb4
+
+ For a 5 x 5 S matrix, this routine fills the arrays:
+ invs5, b5, sumb5, invs4, b4, sumb4, norma_sumb4
+
+ For a 4 x 4 S matrix, this routine fills the arrays:
+ invs4, b4, sumb4, norma_sumb4
+
+ One can print a typical error due to the numerical inversion
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> No input
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> This routine modifies the values of the real or complex arrays
+ invs6, hjj, b6, sumb6, invs5, b5, sumb5, invs4, b4, sumb4, norma_sumb4
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2finversion2finv5fs"></a>
+<a name="robo379"></a><h2>src/kinematic/inversion/inv_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function inv_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = inv_s(i,j,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function gives the generic inverse of the S matrix whatever
+ its dimension (&lt;=6)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer, line number
+ * j -- an integer, row number
+ * set -- an integer array of rank 1, the set of pinch propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Warning: Now a complex (type ki) is returned! [TK Sep10]
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2finversion2fnorma5fsumb"></a>
+<a name="robo380"></a><h2>src/kinematic/inversion/norma_sumb [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function norma_sumb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = norma_sumb(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function gives the B coefficient whatever the S matrix dimension (&lt;=6)
+ divided by the greatest (in absolute value) element of the S matrix
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an integer array of rank 1, the set of pinch propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Warning: Now a complex (type ki) is returned! [TK Sep10]
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2finversion2fsumb"></a>
+<a name="robo381"></a><h2>src/kinematic/inversion/sumb [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function sumb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = sumb(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function gives the B coefficient whatever the S matrix dimension (&lt;=6)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an integer array of rank 1, the set of pinch propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Warning: Now a complex (type ki) is returned! [TK Sep10]
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2fmatrice5fs2fallocation5fs"></a>
+<a name="robo382"></a><h2>src/kinematic/matrice_s/allocation_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine allocation_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call allocation_s(dim)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine reserves the memory for several objects.
+ dim_s is an integer, invs6 a real(type ki) array of rank 2
+ hjj a real (type ki) array of rank 3, b6 a real (type ki) array of rank 1,
+ sumb6 a real (type ki), invs5 a real (type ki) array of rank 3,
+ b5 a real (type ki) array of rank 2, sumb5 a real (type ki) array of rank 1,
+ invs4 a real (type ki) array of rank 4, b4 a real (type ki) array of rank 3,
+ sumb4 a real (type ki) array of rank 2
+ norma_sumb4 a real (type ki) array of rank 2
+ In case of rmass_or_cmass_par==cmass, there complex copies of each preceding array
+ are also allocated.
+
+ After memory allocation, s_mat_p is then assigned the matrix s_mat_c or s_mat_r,
+ respectively. The corresponding pointers in s_mat_p are associated or nullified.
+ In case a complex matrix is assigned, there will be also a pointer associated with
+ a real matrix, which has entries according to the real part of the complex matrix.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- an integer, the maximal number of external legs
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> This routine modify the value of the variable dim_s
+ It initialises invs6, hjj, b6, sumb6, invs5, b5, sumb5,
+ invs4, b4, sumb4, norma_sumb4 to zero
+ It associates the global objects s_mat_p with s_mat_r or s_mat_c.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2fmatrice5fs2fdeallocation5fs"></a>
+<a name="robo383"></a><h2>src/kinematic/matrice_s/deallocation_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine deallocation_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call deallocation_s()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine deallocates the memory reserved by the preceeding
+ subroutine.
+ The pointers in s_mat_p are nullified.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> No input
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> This routine destroys all the variables initialised in the
+ preceeding subroutine as well as any associations in s_mat_p.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2fmatrice5fs2fexit5fgolem95"></a>
+<a name="robo384"></a><h2>src/kinematic/matrice_s/exit_golem95 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine exit_golem95
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call exit_golem95()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine should be called at the end of the form factor calculation.
+ It frees all memory previously allocated, it clears the cache and nullifies pointers.
+</pre>
+<p class="item_name">INPUTS</p>
+<p class="item_name">SIDE EFFECTS</p>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2fmatrice5fs2finit5fgolem95"></a>
+<a name="robo385"></a><h2>src/kinematic/matrice_s/init_golem95 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine init_golem95
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call init_golem95(dim, opt_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine is the first of three macro functions which needs to be called by the user.
+ It allocates memory for all internal matrices needed in subsequent calculations.
+ The caching system is initialized.
+ A pointer s_mat is associated with a complex matrix s_mat_c.
+ This is the s matrix which has to be filled after init_golem95() is called.
+ The argument 'dim' sets the maximal number of external legs.
+ An optional array for the numbering of propagators can be given.
+ The default is set to (/ 1, ... , dim /)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- an integer, the maximal number of external legs
+ * opt_set -- an optional integer array for the numbering of propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> A call to allocation_s is made, implying all side effects given there.
+ The caching system is initialized.
+ A pointer 's_mat' is associated with the global matrix s_mat_c.
+ The internal parameter rmass_or_cmass_par is set to cmass. If a purely real
+ s matrix is given by the user it will be set to rmass in the call of
+ prepare_s_matrix.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fkinematic2fmatrice5fs2fprepare5fs5fmatrix"></a>
+<a name="robo386"></a><h2>src/kinematic/matrice_s/prepare_s_matrix [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine prepare_s_matrix
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call prepare_s_matrix()
+ call prepare_s_matrix_local(s_mat_p_loc,set_ref_loc)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine prepares the global or local s_mat_p object, consisting
+ of pointers to s_mat_c and s_mat_r and integer bits b_cmplx and b_zero.
+ A call to init_invs is made to fill the inverse matrices needed
+ in the form factor calculations.
+ If the user has defined a purely real s matrix, the internal parameter
+ rmass_or_cmass_par is set to rmass and only the real branch of the library
+ is used.
+ In the complex case, form factors which are not affected by complex
+ masses will be called with a sub matrix of s_mat_r, the real part of s_mat_c.
+ The routine also sets the bits for complex mass and zero mass-
+ entries.
+ The subroutine prepare_s_matrix_local is used internally to prepare local type
+ s_matrix_poly objects. This subroutine does not interact with the inverse matrices
+ and the caching system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> For prepare_s_matrix_local, s_mat_p and set_ref need to be given.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/kinematic/matrice_s.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.40 on Mon Nov 22 2010 20:01:28
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/s_matrix_type_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/s_matrix_type_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/s_matrix_type_f90.html (revision 119)
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/s_matrix_type.f90</title>
+<!-- Source: ./../src/module/s_matrix_type.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fs5fmatrix5ftype"></a>
+<a name="robo58"></a><h2>src/module/s_matrix_type [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module s_matrix_type
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use s_matrix_type
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains a type definition for the kinematic s_matrix,
+ intended to mimic a run-time polymorphism.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the derived type:
+ * s_matrix_poly
+
+ One function:
+ * assign_s_matrix -- associates the pointers in the s_matrix to a given real or complex matrix
+
+ Subroutines:
+ * nullify_s_matrix -- nullifies the pointers
+ * set_s_matrix_bits -- sets an integer which describes the positions of complex masses in the s matrix.
+ sets an integer which describes the positions of zero mass entries.
+ * fill_s_matrix -- fills the real array associated with a complex array.
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/preci_double.f90)
+ * equal (src/module/<a href="./equal_f90.html#robo_top_of_doc">equal.f90</a>)
+ * constante (src/module/<a href="./constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fs5fmatrix5ftype2fassign5fs5fmatrix"></a>
+<a name="robo410"></a><h2>src/module/s_matrix_type/assign_s_matrix [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> assign_s_matrix
+</pre>
+<p class="item_name">USAGE</p>
+<pre> assign_s_matrix(s_mat_r)
+ assign_s_matrix(s_mat_c,s_mat_r)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function associates the global (type s_matrix_poly) s_mat_p
+ with the given real or complex input matrix. In the case a complex
+ matrix is given, a real matrix, which will contain the real part of the
+ complex matrix, has also be given as an argument.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> A real and a complex matrix. Or just a real matrix.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> a type (s_matrix_poly) is returned.
+</pre>
+
+<hr />
+<a name="src2fmodule2fs5fmatrix5ftype2ffill5fs5fmatrix"></a>
+<a name="robo411"></a><h2>src/module/s_matrix_type/fill_s_matrix [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine fill_s_matrix
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call fill_s_matrix(s_mat_p)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This procedure fills the associated real array with the
+ real entries of a complex s_matrix if the corresponding
+ pointer to the complex array is associated.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a type (s_matrix_poly) object
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> none
+</pre>
+
+<hr />
+<a name="src2fmodule2fs5fmatrix5ftype2fnullify5fs5fmatrix"></a>
+<a name="robo412"></a><h2>src/module/s_matrix_type/nullify_s_matrix [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine nullify_s_matrix
+</pre>
+<p class="item_name">USAGE</p>
+<pre> nullify_s_matrix(s_mat_p)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This procedure nullifies the pointers in the input object.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * type (s_matrix_poly) object
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> none
+</pre>
+
+<hr />
+<a name="src2fmodule2fs5fmatrix5ftype2fs5fmatrix5fpoly"></a>
+<a name="robo413"></a><h2>src/module/s_matrix_type/s_matrix_poly [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> s_matrix_poly
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> ! type s_matrix_poly
+</pre>
+<p class="item_name">SOURCE</p>
+<pre class="source"> type s_matrix_poly
+ !
+ real(ki), dimension(:,:), pointer :: pt_real
+ complex(ki), dimension(:,:), pointer :: pt_cmplx
+ integer :: b_cmplx, b_zero
+ !
+ end type s_matrix_poly
+</pre>
+<p class="item_name">NOTES</p>
+<pre> * pt_real points to a real array (s_mat_r) if associated.
+ * pt_cmplx points to a complex array (s_mat_c) if associated
+ * b_cmplx is a bit-integer encoding the positions of
+ complex mass entries in the S matrix.
+ * b_zero is a bit-integer encoding the positions of
+ vanishing masses.
+</pre>
+
+<hr />
+<a name="src2fmodule2fs5fmatrix5ftype2fset5fs5fmatrix5fbits"></a>
+<a name="robo414"></a><h2>src/module/s_matrix_type/set_s_matrix_bits [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine set_s_matrix_bits
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call set_s_matrix_bits(s_mat_p,set_ref)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This procedure checks the diagonal of the given matrix for complex
+ entries with non-vanishing imaginary part and vanishing masses as well.
+ The results are encoded in bit-integers included in the derived type s_mat_p.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a type (s_matrix_poly) object
+ * a reference set of numbers associated with the diagonal entries.
+ (typically an array (/1,2,...,n/) ).
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> none
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/s_matrix_type.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/zdilog_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/zdilog_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/zdilog_f90.html (revision 119)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/zdilog.f90</title>
+<!-- Source: ./../src/module/zdilog.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fdilogarithme"></a>
+<a name="robo50"></a><h2>src/module/dilogarithme [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module dilogarithme
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use dilogarithme
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module provides two public routines to compute the dilogarithm with
+ real and complex argument
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports:
+ * zdilog -- a function which returns the dilogarithm with real (or complex) argument
+ * cdilog -- a function which returns the dilogarithm with complex argument
+</pre>
+<p class="item_name">NOTES</p>
+<pre> zdilog can be called with complex argument and parameter s. If the imaginary part vanishes,
+ zdilog with real argument is called. Here, s becomes important.
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/precision.f90)
+ * constante (src/module/<a href="./constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * logarithme (src/module/<a href="./z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * sortie_erreur (src/module/<a href="./sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * equal (src/module/<a href="./equal_f90.html#robo_top_of_doc">equal.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fdilogarithme2fcdilog"></a>
+<a name="robo387"></a><h2>src/module/dilogarithme/cdilog [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function cdilog
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = cdilog(z)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function return the dilogarithm of a complex z, taken from T. Binoth
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * z -- a complex (type ki), the argument of the dilogarithm
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> This function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fdilogarithme2fzdilog"></a>
+<a name="robo388"></a><h2>src/module/dilogarithme/zdilog [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function zdilog
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = zdilog(a,s)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function returns the dilogarithm of a complex z, this complex number
+ has the specific form: z = a + i lambda s where lambda &lt;&lt; 1.
+ a can now be complex. If the imaginary part vanishes, the sign of s is relevant.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a -- a real/complex (type ki), the argument
+ * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> This function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/zdilog.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:15
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/sortie_erreur_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/sortie_erreur_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/sortie_erreur_f90.html (revision 119)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/sortie_erreur.f90</title>
+<!-- Source: ./../src/module/sortie_erreur.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fsortie5ferreur"></a>
+<a name="robo59"></a><h2>src/module/sortie_erreur [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module sortie_erreur
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use sortie_erreur
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to generate error exception or to print some information from
+ a function/subroutine
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports:
+ * erreur -- derived type
+ * tab_erreur_par -- an array of 7 derived type erreur
+ * catch_exception -- a subroutine to perform an action depending on the level
+ * print_type -- a subroutine to print the type erreur
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * parametre (src/module/<a href="./parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="./array_f90.html#robo_top_of_doc">array.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fsortie5ferreur2fcatch5fexception"></a>
+<a name="robo415"></a><h2>src/module/sortie_erreur/catch_exception [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine catch_exception
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call catch_exception(level)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> For the error exception
+ This routine prints on the unit 0 (stderr for fortran)
+ the array tab_erreur_par
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * level -- a integer : 0 the program stops, 1 warning, 2 info
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> write on the unit 0 (stderr for fortran) : level=0,1
+ or write on the unit 12 : level=2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fsortie5ferreur2ferreur"></a>
+<a name="robo416"></a><h2>src/module/sortie_erreur/erreur [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> erreur -- derived type, to print error/info
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> ! type erreur
+</pre>
+<p class="item_name">SOURCE</p>
+<pre class="source"> type erreur
+ !
+ character(len=256) :: chaine
+ logical :: a_imprimer = .false.
+ integer :: arg_int
+ real(ki) :: arg_real
+ complex(ki) :: arg_comp
+ character(len=32) :: arg_char
+ integer, dimension(2) :: arg_int_tab
+ !
+ end type erreur
+</pre>
+<p class="item_name">NOTES</p>
+<pre> * set erreur%a_imprimer = .true. to print it
+ * arg_in_tab(1) : packb(tab), arg_int_tab(2) : size(tab)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/sortie_erreur.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/precision_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/precision_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/precision_f90.html (revision 119)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/precision.f90</title>
+<!-- Source: ./../src/module/precision.f90 -->
+<!-- Generated with ROBODoc Version 4.99.40 (Jun 3 2010) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fprecision"></a>
+<a name="robo54"></a><h2>src/module/precision [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module precision
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use precision
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module defines the parameter ki which gives the representation
+ of the real and complex numbers in golem
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> The integer parameter ki
+ The integer parameter ki_lt, which is the real kind used in LoopTools
+</pre>
+<p class="item_name">USES</p>
+<pre> No uses
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/precision.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.40 on Thu Jun 17 2010 17:24:50
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/translate_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/translate_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/translate_f90.html (revision 119)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/translate.f90</title>
+<!-- Source: ./../src/module/translate.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2ftranslate"></a>
+<a name="robo61"></a><h2>src/module/translate [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module translate
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use translate
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to translate an array of n (=2m) reals into an array
+ of m complexs
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports:
+ * to_complex -- a subroutine to translate an array of n (=2m) reals into an array
+ of m complexs
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * sortie_erreur (src/module/<a href="./sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2ftranslate2fto5fcomplex"></a>
+<a name="robo425"></a><h2>src/module/translate/to_complex [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine to_complex
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call to_complex(t,z)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine transforms an array of reals of rank 1 and shape 2*m
+ t in an array of complexs of size m z, it returns z(i) = t(i) + i_*t(i+1).
+ If size of t is odd, the subroutine to_complex returns an error
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * t -- a real array (type ki) of rank 1
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> * z -- a complex array (type ki) of rank 1 and shape size(t)/2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/translate.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:15
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/tri_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/tri_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/tri_f90.html (revision 119)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/tri.f90</title>
+<!-- Source: ./../src/module/tri.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2ftri5fcroissant"></a>
+<a name="robo62"></a><h2>src/module/tri_croissant [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module tri_croissant
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use tri_croissant
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to sort an integer array or shift its elements by certain amount
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports:
+ * tri_int -- a subroutine to sort out an integer array
+ * shift_param -- a subroutine to shift (modulo n) the elements of an integer array
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2ftri5fcroissant2fexchange5fparam"></a>
+<a name="robo426"></a><h2>src/module/tri_croissant/exchange_param [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine exchange_param
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call exchange_param(z_param_ini,tab,modd,z_param_out)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine exchanges in the array z_param_ini of Feynman parameters
+ the label tab(1) with the label tab(2)
+ the result is put into the array z_param_out
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * z_param_ini -- an integer array of rank 1, the array to shift
+ * tab -- an integer array of rank 1, the two labels to exchange
+ * modd -- an integer, the shift is made modulo modd
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> * z_param_out -- an integer array of rank 1, the shifted array
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2ftri5fcroissant2fshift5fparam"></a>
+<a name="robo427"></a><h2>src/module/tri_croissant/shift_param [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine shift_param
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call shift_param(z_param_ini,shift,modd,z_param_out)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine shifts the array z_param_ini of Feynman parameters
+ the shift is done as following:
+ z --&gt; z+shift if z+shift &lt;= modd
+ else mod(z+shift-1,modd)+1 if z+shift &gt; modd
+ the result is put into the array z_param_out
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * z_param_ini -- an integer array of rank 1, the array to shift
+ * shift -- an integer, the value of the shift
+ * modd -- an integer, the shift is made modulo modd
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> * z_param_out -- an integer array of rank 1, the shifted array
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2ftri5fcroissant2ftri5fint"></a>
+<a name="robo428"></a><h2>src/module/tri_croissant/tri_int [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine tri_int
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call tri_int(t_in,t_out)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine sorts in increasing order an integer array t_int and put the
+ result in the integer array t_out
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * t_int -- an integer array of rank 1, the array to sort
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> NONE
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> * t_out -- an integer array of rank 1, the sorted array
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/tri.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:15
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/constante_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/constante_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/constante_f90.html (revision 119)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/constante.f90</title>
+<!-- Source: ./../src/module/constante.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fconstante"></a>
+<a name="robo49"></a><h2>src/module/constante [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module constante
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use constante
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to get the values of different constants
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports 13 parameters
+ * pi -- a real (type ki), pi
+ * gammae -- a real (type ki), the Euler constant
+ * i_ -- a complex (type ki), the square root of -1
+ * pi3 -- a real (type ki), pi**2/3
+ * pi6 -- a real (type ki), pi**2/6
+ * pi12 -- a real (type ki), pi**2/12
+ * un -- a real (type ki), 1
+ * zero -- a real (type ki), 0
+ * czero -- a complex (type ki), (0,0)
+ * cun -- a complex (type ki), (1,0)
+ * b_null -- an integer 0
+ * s_null -- an array with shape 0
+ * nullarray -- the same as s_null !!!!!!
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/constante.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/form_factor_type_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/form_factor_type_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/form_factor_type_f90.html (revision 119)
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/form_factor_type.f90</title>
+<!-- Source: ./../src/module/form_factor_type.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype"></a>
+<a name="robo52"></a><h2>src/module/form_factor_type [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_type
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_type
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains two type definitions : the form factors and
+ epsilon type. This module overloads the *, /, +, -, = and ** operators
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two types:
+ * form_factor -- define the type of the fom factors
+ * epsilon_type -- define the type for object having an epsilon expansion
+
+ five operators:
+ * * -- overload of the multiplication operator for form_factor and epsilon_type object
+ * / -- overload of the division operator for form_factor and epsilon_type object
+ * + -- overload of the addition operator for form_factor and epsilon_type object
+ * - -- overload of the subtraction operator for form_factor and epsilon_type object
+ * = -- overload of the assignment operator for form_factor and epsilon_type object
+ * ** -- overload of the power operator for form_factor and epsilon_type object
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * constante (src/module/<a href="./constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fassignment"></a>
+<a name="robo390"></a><h2>src/module/form_factor_type/assignment [ Generics ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_generics.html#robo_top_of_doc">Generics</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> ff = x -- Assignment to a form_factor
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> interface assignment(=)
+</pre>
+<p class="item_name">NOTES</p>
+<pre> In the assignment of a complex array the RHS must have the form
+ (/ a, b, c /).
+ In the assignment of a real array the RHS must have the form
+ (/ real(a), aimag(a), real(b), aimag(b), real(c), aimag(c) /).
+ The later form reflects the convention in the form factors of Golem90.
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fdivision"></a>
+<a name="robo391"></a><h2>src/module/form_factor_type/division [ Generics ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_generics.html#robo_top_of_doc">Generics</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> ff / c -- Division of a form_factor by a scalar
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> interface operator(/)
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2feps"></a>
+<a name="robo392"></a><h2>src/module/form_factor_type/eps [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> eps -- singleton object of the epsilon-type.
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> ! type(epsilon_type), parameter :: eps
+</pre>
+<p class="item_name">SOURCE</p>
+<pre class="source"> type(epsilon_type), parameter :: eps = epsilon_type(1.0, 1)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> type(form_factor) :: ff1 = a20((/.../))
+ type(form_factor) :: ff2 = eps * ff1
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fepsilon5ftype"></a>
+<a name="robo393"></a><h2>src/module/form_factor_type/epsilon_type [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> epsilon_type -- a type that represents positive
+ powers of epsilon
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> ! type epsilon_type
+</pre>
+<p class="item_name">SOURCE</p>
+<pre class="source"> type epsilon_type
+ complex(ki) :: coefficient
+ integer :: power
+ end type epsilon_type
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fform5ffactor"></a>
+<a name="robo394"></a><h2>src/module/form_factor_type/form_factor [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> form_factor -- represents the result of a form factor
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> ! type form_factor
+</pre>
+<p class="item_name">SOURCE</p>
+<pre class="source"> type form_factor
+ complex(ki) :: a
+ complex(ki) :: b
+ complex(ki) :: c
+ end type form_factor
+</pre>
+<p class="item_name">NOTES</p>
+<pre> * a is the coefficient of the 1/epsilon^2 pole
+ * b is the coefficient of the 1/epsilon pole
+ * c is the coefficient of the finite term
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fmultiplication"></a>
+<a name="robo395"></a><h2>src/module/form_factor_type/multiplication [ Generics ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_generics.html#robo_top_of_doc">Generics</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> c * ff -- Multiplication of a form_factor with a scalar
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> interface operator(*)
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fsubtraction"></a>
+<a name="robo396"></a><h2>src/module/form_factor_type/subtraction [ Generics ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_generics.html#robo_top_of_doc">Generics</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> ff - x, - ff -- Subtractions involving form_factor(s)
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> interface operator(-)
+</pre>
+
+<hr />
+<a name="src2fmodule2fform5ffactor5ftype2fsum"></a>
+<a name="robo397"></a><h2>src/module/form_factor_type/sum [ Generics ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_generics.html#robo_top_of_doc">Generics</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> ff + x, + ff -- Sums involving form_factor(s)
+</pre>
+<p class="item_name">SYNOPSIS</p>
+<pre class="source"> interface operator(+)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/form_factor_type.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/cache_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/cache_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/cache_f90.html (revision 119)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/cache.f90</title>
+<!-- Source: ./../src/module/cache.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fcache"></a>
+<a name="robo48"></a><h2>src/module/cache [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module cache
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use cache
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to reserve some memory to store already computed four/three
+ point functions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three routines:
+ * allocate_cache -- to reserve the memory
+ * reset_cache -- to force the re-computation of the cache arrays
+ * clear_cache -- to clear the reserved memory
+</pre>
+<p class="item_name">USES</p>
+<pre> * sortie_erreur (src/module/<a href="./sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fcache2fallocate5fcache"></a>
+<a name="robo383"></a><h2>src/module/cache/allocate_cache [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine allocate_cache
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call allocate_cache(dim_s)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine allocates the necessary memory to store
+ the n+2/n+4 four point functions and the n/n+2 three point functions
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim_s -- an integer, the dimension of the S matrix
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fcache2fclear5fcache"></a>
+<a name="robo384"></a><h2>src/module/cache/clear_cache [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine clear_cache
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call clear_cache()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine deallocates the reserved memory to store
+ the n+2/n+4 four point functions and the n/n+2 three point functions.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> No inputs
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fcache2freset5fcache"></a>
+<a name="robo385"></a><h2>src/module/cache/reset_cache [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reset_cache
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reset_cache()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine forces the cache arrays to be computed again
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> No inputs
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/cache.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/more_integ_info_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/more_integ_info_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/more_integ_info_f90.html (revision 119)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/more_integ_info.f90</title>
+<!-- Source: ./../src/module/more_integ_info.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fmore5finteg5finfo"></a>
+<a name="robo53"></a><h2>src/module/more_integ_info [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module more_integ_info
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use more_integ_info
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to print some information on the integrand
+ when the numerical integration failed.
+ It contains also a routine to print the informations (it prints on unit 6)
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports the variables:
+ * origine_info_par -- a character (len=3), the type of function which are integrated
+ * num_grand_b_info_par -- a real (type ki), the numerator of B
+ * denom_grand_b_info_par -- a real (type ki), the denominator of B
+ * subroutine print_integ_info -- to print these informations
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/preci_double.f90)
+</pre>
+
+<hr />
+<a name="src2fmodule2fprint5finteg5finfo"></a>
+<a name="robo271"></a><h2>src/module/print_integ_info [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_integ_info
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_integ_info()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine print the informations defined in the module more_integ_info
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> No inputs
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It prints on the unit 6
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/more_integ_info.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Thu May 13 2010 12:35:22
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/lt_to_golem_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/lt_to_golem_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/lt_to_golem_f90.html (revision 119)
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/lt_to_golem.f90</title>
+<!-- Source: ./../src/module/lt_to_golem.f90 -->
+<!-- Generated with ROBODoc Version 4.99.36 (Jun 27 2008) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2flt5fto5fgolem"></a>
+<a name="robo29"></a><h2>src/module/lt_to_golem [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module lt_to_golem
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use lt_to_golem
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains two functions to have a calling interface between LoopTools
+ and Golem
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * d0i -- the LoopTools D0i function, becareful that the first argument is a string
+ of length 6 and there is a last argument which mu^2
+ * c0i -- the LoopTools C0i function, becareful that the first argument is a string
+ of length 5 and there is a last argument which mu^2
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="./preci_double_f90.html#robo_top_of_doc">preci_double.f90</a>)
+ * constante, only : b_null (src/module/<a href="./constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type (src/module/<a href="./form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_3p (src/form_factor/<a href="../form_factor/form_factor_3p_f90.html#robo_top_of_doc">form_factor_3p.f90</a>)
+ * form_factor_4p (src/form_factor/<a href="../form_factor/form_factor_4p_f90.html#robo_top_of_doc">form_factor_4p.f90</a>)
+ * cache (src/module/<a href="./cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * array, only : packb (src/module/<a href="./array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="./sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="ssrc2fmodule2flt5fto5fgolem2fc0i"></a>
+<a name="robo215"></a><h2>ssrc/module/lt_to_golem/c0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim3 = c0i(idt,s1,s2,s3,m1,m2,m3,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the LoopTools C0i function. there are two differences
+ 1) the first argument is a character of length 5
+ 2) there is one argument more which is the renormalisation scale squared
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length 5, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * m1 -- a real (type ki), mass of propagator 3
+ * m2 -- a real (type ki), mass of propagator 1
+ * m3 -- a real (type ki), mass of propagator 2
+ * mu2 -- a real (type ki), renormalisation scale squared
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="ssrc2fmodule2flt5fto5fgolem2fd0i"></a>
+<a name="robo216"></a><h2>ssrc/module/lt_to_golem/d0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function d0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim3 = d0i(idt,s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the LoopTools D0i function. there are two differences
+ 1) the first argument is a character of length 6
+ 2) there is one argument more which is the renormalisation scale squared
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length 6, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s -- a real (type ki), (p1+p2)^2
+ * t -- a real (type ki), (p3+p4)^2
+ * m1 -- a real (type ki), mass of propagator 4
+ * m2 -- a real (type ki), mass of propagator 1
+ * m3 -- a real (type ki), mass of propagator 2
+ * m4 -- a real (type ki), mass of propagator 3
+ * mu2 -- a real (type ki), renormalisation scale squared
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/lt_to_golem.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.36 on Thu Oct 30 2008 11:46:11
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/equal_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/equal_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/equal_f90.html (revision 119)
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/equal.f90</title>
+<!-- Source: ./../src/module/equal.f90 -->
+<!-- Generated with ROBODoc Version 4.99.40 (Sep 7 2010) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fequal"></a>
+<a name="robo52"></a><h2>src/module/equal [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module equal
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use equal
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compare two objects
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * equal_real -- to compare two reals
+ * cut_s -- sets the momentum s equal to zero, if the ratio s/M or the absoulute value
+ is smaller than some global parameters.
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/precision_golem.f90)
+ * parametre (src/module/<a href="./parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * constante (src/module/<a href="./constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur (src/module/<a href="./sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fequal2fcut5fs"></a>
+<a name="robo393"></a><h2>src/module/equal/cut_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> subroutine cut_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call cut_s(s,m1,m2)
+ call cut_s(s,m)
+ call cut_s(s)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function sets s to zero, if either of the following conditions is fulfilled.
+ abs(s) is smaller than cut_s_abs.
+ abs(s/Sum(m)) is smaller than cut_s_over_m.
+ Calling this routine improves stability in the form factor calculations.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s -- a real of type ki
+ * m, m1, m2 -- real/complex type
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Possible change of s to zero.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fequal2fequal5freal"></a>
+<a name="robo394"></a><h2>src/module/equal/equal_real [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function equal_real
+</pre>
+<p class="item_name">USAGE</p>
+<pre> logical = equal_real(xa,xb)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function compares two real (of same kind) by computing their
+ difference and compares it to epsilon (of the same kind)
+ true if | xa - xb | &lt;= epsilon, false otherwise
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * xa -- a real of type ki
+ * xb -- a real of type ki
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a logical
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/equal.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.40 on Mon Nov 22 2010 20:01:28
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/spinor_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/spinor_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/spinor_f90.html (revision 119)
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/spinor.f90</title>
+<!-- Source: ./../src/module/spinor.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fspinor"></a>
+<a name="robo60"></a><h2>src/module/spinor [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module spinor
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use spinor
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains all the function to compute the spinorial products,
+ scalar products and epsilon_tensor
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports:
+ * ket -- a function to compute the ket spinor
+ * bra -- a function to compute the bra spinor
+ * pslash -- a function to compute p^{\mu} \gamma_{\mu}
+ * bra_ket -- a function to compute the spinorial product
+ * eps_prod_sca -- a function to compute the scalar product e_i.p_j
+ * eps_prod_eps -- a function to compute the scalar product e_i.e_j
+ * scalar -- a function to compute the scalar product
+ * e_ -- a function to compute the epsilon tensor
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fspinor2fbra"></a>
+<a name="robo417"></a><h2>src/module/spinor/bra [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function bra
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim1_4 = bra(p,i)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the spinor bra using
+ bra(p) = ket(p)^{\dagger} \gamma_0
+ modified for non physical configuration p_0 &lt; 0.
+ The functions bra and ket verify the conditions:
+ &lt;-p-|q+&gt; = &lt;p-|-q+&gt; = i &lt;p-|q+&gt;
+ &lt;-p+|q-&gt; = &lt;p+|-q-&gt; = i &lt;p+|q-&gt;
+ &lt;-p-|-q+&gt; = - &lt;p-|q+&gt;
+ &lt;-p+|-q-&gt; = - &lt;p+|q-&gt;
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * p -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * i -- an integer, the value of the helicity (= 1,-1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex array (type ki) of rank 2 and shape 1,4
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2fbra5fket"></a>
+<a name="robo418"></a><h2>src/module/spinor/bra_ket [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function bra_ket
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = bra_ket(p1,i1,p2,i2,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes &lt;p1 i1|k1slash*k2slash*...*k10slash|p2 i2&gt;
+ i1 and i2 = +/- 1 are the helicities
+ where the inner argument k1slash,k2slash,...,k10slash are optional
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * p1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * i1 -- an integer, the value of the helicity (= 1,-1)
+ * p2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * i2 -- an integer, the value of the helicity (= 1,-1)
+ * k1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k3 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k4 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k5 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k6 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k7 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k8 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k9 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+ * k10 -- a real array (type ki) of rank 1, shape 4; a 4-momentum optional
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2fe5f"></a>
+<a name="robo419"></a><h2>src/module/spinor/e_ [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function e_
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = e_(k1,k2,k3,k4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function gives the antisymetric tensor epsilon
+ From Thomas Reiter
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * k1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * k2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * k3 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * k4 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2feps5fprod5feps"></a>
+<a name="robo420"></a><h2>src/module/spinor/eps_prod_eps [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function eps_prod_eps
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = eps_prod_eps(i1,r1,p1,i2,r2,p2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes e^i(p1).e^j(p) where r1 is the reference momemtum
+ for e(p1) and r2 is the reference momemtum for e(p2)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i1 -- an integer, the value of the helicity (= 1,-1)
+ * r1 -- a real array (type ki) of rank 1, shape 4; the refrence momentum
+ * p1 -- a real array (type ki) of rank 1, shape 4; the momentum of the spin 1
+ * i2 -- an integer, the value of the helicity (= 1,-1)
+ * r2 -- a real array (type ki) of rank 1, shape 4; the refrence momentum
+ * p2 -- a real array (type ki) of rank 1, shape 4; the momentum of the spin 1
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2feps5fprod5fsca"></a>
+<a name="robo421"></a><h2>src/module/spinor/eps_prod_sca [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function eps_prod_sca
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = eps_prod_sca(i,r1,p1,p2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes e^i(p1).p2 where r1 is the reference momentum
+ be careful that p2 is assumed to be a lightlike vector
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer, the value of the helicity (= 1,-1)
+ * r1 -- a real array (type ki) of rank 1, shape 4; the refrence momentum
+ * p1 -- a real array (type ki) of rank 1, shape 4; the momentum of the spin 1
+ * p2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2fket"></a>
+<a name="robo422"></a><h2>src/module/spinor/ket [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ket
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim4_1 = ket(p,i)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the spinor using the chinese's paper
+ Nucl. Phys. B291 (1987) 392-428 equation A.16
+ modified for non physical configuration E &lt; 0.
+ The functions bra and ket verify the conditions:
+ &lt;-p-|q+&gt; = &lt;p-|-q+&gt; = i &lt;p-|q+&gt;
+ &lt;-p+|q-&gt; = &lt;p+|-q-&gt; = i &lt;p+|q-&gt;
+ &lt;-p-|-q+&gt; = - &lt;p-|q+&gt;
+ &lt;-p+|-q-&gt; = - &lt;p+|q-&gt;
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * p -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * i -- an integer, the value of the helicity (= 1,-1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex array (type ki) of rank 2 and shape 4,1
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2fpslash"></a>
+<a name="robo423"></a><h2>src/module/spinor/pslash [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function pslash
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim4_4 = pslash(p)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes p_{\mu} \gamma^{\mu}, i.e.
+ p0 gamma0 - p1 gamma1 - p2 gamma2 - p3 gamma3
+ taking the Chinese convention for the gamma matrices in
+ Weyl representation
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * p -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex array (type ki) of rank 2 and shape 4,4
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fmodule2fspinor2fscalar"></a>
+<a name="robo424"></a><h2>src/module/spinor/scalar [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function scalar
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real = scalar(p1,p2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function compute the scalar product of two 4 momentum
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * p1 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+ * p2 -- a real array (type ki) of rank 1, shape 4; a 4-momentum
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/spinor.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/z_log_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/z_log_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/z_log_f90.html (revision 119)
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/z_log.f90</title>
+<!-- Source: ./../src/module/z_log.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2flogarithme"></a>
+<a name="robo54"></a><h2>src/module/logarithme [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module logarithme
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use logarithme
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module provides three public routines to compute the logarithm,
+ the logarithm squared and a special function (generalisation of ln(1-z)/z)
+ assuming that the argument is of the type z = a + i lambda s, where
+ lambda &gt; 0 and &lt;&lt; 1 and s = +/- 1. a can be a complex type. If its
+ imaginary part vanishes, the sign of s becomes relevant.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports:
+ * z_log -- a function which returns the logarithm with a complex argument
+ * z_log2 -- a function which returns the logarithm squared with a complex argument
+ * q -- a recursive function which a generalisation of ln(1-z)/z
+</pre>
+<p class="item_name">NOTES</p>
+<pre> z_log (and z_log2) can be called with complex argument and parameter s. If the imaginary part vanishes,
+ z_log (or z_log2) with real argument is called. Here, s becomes important.
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * constante (src/module/<a href="./constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur (src/module/<a href="./sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * equal (src/module/<a href="./equal_f90.html#robo_top_of_doc">equal.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2flogarithme2fq"></a>
+<a name="robo401"></a><h2>src/module/logarithme/q [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function q
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = q(n,x,s)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> It computes the function q defined recusively by
+ q_n(X) = (q_{n-1}(X)+1/(n-1))/X
+ with q_1(X) = ln(1-X)/X
+ assuming that X = x + i*s*lambda and s=+/- 1,
+ Care is taken for small values of x.
+ For x &lt; small_glob
+ q_n(x) = -( 1/n + \sum_{j=n+1}^\infinity x^{j-n}/j )
+ Note that in this case there is no imaginary part.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the order of q
+ * x -- a real/complex (type ki), the real part
+ * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> This function returns a complex (type ki)
+</pre>
+<p class="item_name">NOTES</p>
+<pre> This function can now be called with complex x. If the imaginary part vanishes,
+ the evaluation is switched to the version with real x and the original entry for
+ s becomes relevant.
+</pre>
+
+<hr />
+<a name="src2fmodule2flogarithme2fz5flog"></a>
+<a name="robo402"></a><h2>src/module/logarithme/z_log [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function z_log
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = z_log(a,s)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Compute the ln(z) with z = a + i lambda s
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a -- a real/complex (type ki), the argument
+ * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> This function returns a complex (type ki)
+</pre>
+<p class="item_name">NOTES</p>
+<pre> If the imaginary part of the argument vanishes, the sign of s becomes relevant.
+</pre>
+
+<hr />
+<a name="src2fmodule2flogarithme2fz5flog2"></a>
+<a name="robo403"></a><h2>src/module/logarithme/z_log2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function z_log2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = z_log2(a,s)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Compute the ln(z)^2 with z = a + i lambda s
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a -- a real/complex (type ki), the argument
+ * s -- a real (type ki), s = +/- 1, it gives the sign of the small imaginary part
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> This function returns a complex (type ki)
+</pre>
+<p class="item_name">NOTES</p>
+<pre> If the imaginary part of the argument vanishes, the sign of s becomes relevant.
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/z_log.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:15
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/array_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/array_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/array_f90.html (revision 119)
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/array.f90</title>
+<!-- Source: ./../src/module/array.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2farray"></a>
+<a name="robo47"></a><h2>src/module/array [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module array
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use array
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains six functions which enable set manipulations knowing that
+ a set of integers is represented with the digits of an integer. The six functions
+ are : packb, unpackb, pminus, punion, countb and locateb
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports six functions:
+
+ * packb -- to transform a set of integers into an integer (unique transformation)
+ * unpackb -- to perform the inverse operation as packb do
+ * pminus -- to subtract two sets
+ * punion -- to add two sets
+ * countb -- to count the number of element of the set
+ * locateb -- to give the location of an element in a set
+</pre>
+<p class="item_name">USES</p>
+<pre> none
+</pre>
+
+<hr />
+<a name="src2fmodule2fcountb"></a>
+<a name="robo386"></a><h2>src/module/countb [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function countb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = countb(bits)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the shape of the rank 1 integer
+ set given by unpackb(bits,dim)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * bits -- an integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> an integer
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> i1 = packb( (/1,2,3/) )
+ i2 = countb(i1)
+ i2 is 3
+</pre>
+
+<hr />
+<a name="src2fmodule2flocateb"></a>
+<a name="robo400"></a><h2>src/module/locateb [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function locateb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = locateb(i,bits)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> The function locateb returns the location of the element i
+ in the set given by unpackb(bits,countb(bits)).
+ If i does not belong to bits, the function locateb
+ returns -1
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer, the element of a
+ * bits -- an integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (elemental)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns an integer, the location of i in the array a
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> bits = packb( (/3,5,6,7/) )
+ j = locateb(5,bits) --&gt; j is equal to 2
+ j = locateb(6,bits) --&gt; j is equal to 3
+ j = locateb(4,bits) --&gt; j is equal to -1
+ Note that if the set is not ordered, the packing
+ orders it.
+ Note also that this function has the attribute elemental
+ that means that, the argument can be a set of integers:
+ locateb( (/3,7/) , bits) will return (/1,4/)
+</pre>
+
+<hr />
+<a name="src2fmodule2fpackb"></a>
+<a name="robo406"></a><h2>src/module/packb [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function packb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = packb(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function transforms a set of integers into
+ an integer, this integer is unique
+ Apparently Fortran allows to use arrays
+ for the second argument which saves us a loop.
+
+ The elements in set have to be &lt;= 31 which should
+ not be a problem for realistic applications.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- a set of integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> an integer
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> i = packb( (/1,2,3/) )
+ i is 14 which is in binary base 1110
+</pre>
+
+<hr />
+<a name="src2fmodule2fpminus"></a>
+<a name="robo407"></a><h2>src/module/pminus [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function pminus
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = pminus(bits1,bits2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function subtracts the set which is
+ represented by bits2 to the one that is
+ represented by bits1. If the two sets set1 and set2
+ are defined by set1=unpackb(bits1,dim1)
+ and set2=unpackb(bits2,dim2), then ib = pminus(bits1,bits2)
+ gives an integer such that unpackb(ib,dim_ib) is the set
+ of integers of shape dim1-dim2 (dim1 &gt; dim2) which contains
+ the elements of set1 which do not belong to set2
+ Note that if dim1 &lt; dim2, the result returns is pminus(bits2,bits1)
+ If none of the elements of set2 belongs to set1, then
+ pminus(bits1,bits2) = bits1
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * bits1 -- an integer
+ * bits2 -- an integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> an integer
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> i1 = packb( (/1,2,3/) )
+ i2 = packb( (/2/) )
+ i3 = pminus(i1,i2)
+ unpackb(i3) is the set (/1,3/)
+</pre>
+
+<hr />
+<a name="src2fmodule2fpunion"></a>
+<a name="robo409"></a><h2>src/module/punion [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function punion
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = punion(bits1,bits2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function adds the set which is
+ represented by bits2 to the one that is
+ represented by bits1. If the two sets set1 and set2
+ are defined by set1=unpackb(bits1,dim1)
+ and set2=unpackb(bits2,dim2), then ib = punion(bits1,bits2)
+ gives an integer such that unpackb(ib,dim_ib) is the set
+ of integers of shape dim1+dim2 which contains
+ the elements of set1 and those of set2
+ Note that if some elements of set2 belong to set1, they do not
+ appear twice
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * bits1 -- an integer
+ * bits2 -- an integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> an integer
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> i1 = packb( (/1,3,4/) )
+ i2 = packb( (/2/) )
+ i3 = punion(i1,i2)
+ unpackb(i3) is the set (/1,2,3,4/)
+</pre>
+
+<hr />
+<a name="src2fmodule2funpackb"></a>
+<a name="robo429"></a><h2>src/module/unpackb [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function unpackb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer_set = unpackb(bits,dim)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function performs the inverse operation
+ as packb does : from an integer, it reconstructs the
+ set of integers
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * bits -- an integer
+ * dim -- an integer, the dimension of the set obtained
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect (pure function)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> an integer array of rank 1 and shape dim
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> set = unpackb( 14 )
+ set is (/1,2,3/) because the binary representation of 14 is 1110
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/array.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/precision_golem_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/precision_golem_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/precision_golem_f90.html (revision 119)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/precision_golem.f90</title>
+<!-- Source: ./../src/module/precision_golem.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fprecision5fgolem"></a>
+<a name="robo57"></a><h2>src/module/precision_golem [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module precision_golem
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use precision_golem
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module defines the parameter ki which gives the representation
+ of the real and complex numbers in golem
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> The integer parameter ki
+ The integer parameter ki_avh, which is the real kind used in avh_olo
+</pre>
+<p class="item_name">USES</p>
+<pre> No uses
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/precision_golem.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/parametre_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/parametre_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/parametre_f90.html (revision 119)
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/parametre.f90</title>
+<!-- Source: ./../src/module/parametre.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fparametre"></a>
+<a name="robo56"></a><h2>src/module/parametre [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module parametre
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use parametre
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to pass some variables used by many functions of
+ the GOLEM program. Note that these variables can be rewritten.
+ It contains also a routine to print the parameters (it prints on unit 6)
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports the variables:
+ * tolerance -- a real (type ki), the tolerance for the numerical integration
+ * lambda_par -- a real (type ki), a parameter of the contour deformation
+ * alpha_par -- a real (type ki), a parameter of the contour deformation
+ * beta_par -- a real (type ki), a parameter of the contour deformation
+ * coupure_3p2m -- a real (type ki), a cut between numerical and analytical
+ computation for two mass three point functions
+ * coupure_3p3m -- a real (type ki), a cut between numerical and analytical
+ computation for three mass three point functions
+ * coupure_4p1m -- a real (type ki), a cut between numerical and analytical
+ computation for one mass four point functions
+ * coupure_4p2m_opp -- a real (type ki), a cut between numerical and analytical
+ computation for two mass opposite four point functions
+ * coupure_4p2m_adj -- a real (type ki), a cut between numerical and analytical
+ computation for two mass adjacent four point functions
+ * coupure_4p3m -- a real (type ki), a cut between numerical and analytical
+ computation for three mass four point functions
+ * coupure_4p4m -- a real (type ki), a cut between numerical and analytical
+ computation for four mass four point functions (not active)
+ * coupure_3p2m_1mi -- a real (type ki), a cut between numerical and analytical
+ computation for one internal mass two external mass three point functions
+ * rat_or_tot_par -- a character (len=3)
+ * rmass_or_cmass_par -- a character (len=5)
+ * if_print_info_par -- a logical, if true it prints some informations concerning the numerical
+ integration
+ * if_print_warn_par -- a logical, if true it prints some informations concerning the warning
+ about numerical precision
+ * accuracy_par -- the accuracy for the matrix inversion and the numerical integration
+ * not_enough_accuracy_par -- a flag to ring the bell if the accuracy is not reached in
+ in the matrix inversion and the numerical integration
+ * mu2_scale_par -- the square of the renormalisation scale
+ * subroutine print_parameter -- to print these variables
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fprint5fparameter"></a>
+<a name="robo408"></a><h2>src/module/print_parameter [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_parameter
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_parameter()
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine print the variables defined in the module parametre
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> No inputs
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It prints on the unit 6
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/parametre.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/multiply_div_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/multiply_div_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/multiply_div_f90.html (revision 119)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/multiply_div.f90</title>
+<!-- Source: ./../src/module/multiply_div.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fmultiply5fdiv"></a>
+<a name="robo55"></a><h2>src/module/multiply_div [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module multiply_div
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use multiply_div
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the function mult_div, This function computes
+ numericaly (1+alpha*epsilon)*(A/epsilon+B). The type of the output array is
+ identical to the type of the input array.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the function mult_div
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="./precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fmodule2fmultiply5fdiv2fmult5fdiv5fc"></a>
+<a name="robo404"></a><h2>src/module/multiply_div/mult_div_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function mult_div_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> cmplx_dim2 = mult_div_c(alpha,array)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes numericaly (1+alpha*epsilon)*(A/epsilon+B)
+ with A and B complex. The returned result is put
+ into an complex array t (rank 1, shape 2) where t(1) = A,
+ t(2) = B + alpha*A.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * alpha -- a real (type ki)
+ * array -- a complex (type ki) array of rank 1, shape 2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> a complex (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">NOTES</p>
+<pre> The return value of this function is a complex array of shape 2,
+ contrary to the real array returned by mult_div_r.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> resu = multipy_div_c(alpha,array)
+ resu(1) = array(1)
+ resu(2) = array(2) + alpha*array(1)
+</pre>
+
+<hr />
+<a name="src2fmodule2fmultiply5fdiv2fmult5fdiv5fr"></a>
+<a name="robo405"></a><h2>src/module/multiply_div/mult_div_r [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function mult_div_r
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = mult_div_r(alpha,array)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes numericaly (1+alpha*epsilon)*(A/epsilon+B)
+ with A = a1 + i*a2 and B = b1 + i*b2. The returned result is put
+ into an array t (rank 1, shape 4) where t(1) = a1, t(2) = a2,
+ t(3) = b1+alpha*a1, t(4) = b2+alpha*a2.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * alpha -- a real (type ki)
+ * array -- a real (type ki) array of rank 1, shape 4
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> a real (type ki) array of rank 1 and shape 4
+</pre>
+<p class="item_name">NOTES</p>
+<pre> The return value of this function is a real array of shape 4,
+ contrary to the complex array returned by mult_div_c.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> resu = multipy_div_r(alpha,array)
+ resu(1) = array(1)
+ resu(2) = array(2)
+ resu(3) = array(3) + alpha*array(1)
+ resu(4) = array(4) + alpha*array(2)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/multiply_div.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/module/kronecker_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/module/kronecker_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/module/kronecker_f90.html (revision 119)
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/module/kronecker.f90</title>
+<!-- Source: ./../src/module/kronecker.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fmodule2fkronecker"></a>
+<a name="robo53"></a><h2>src/module/kronecker [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module kronecker
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use kronecker
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains two functions delta and deltab which correspond
+ respectively to the Kronecker symbol \delta_{ij}
+ and 1-\delta_{ij}. These two functions have two integer arguments and
+ return an integer
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * delta -- the Kronecker symbol
+ * deltab -- 1-delta
+</pre>
+<p class="item_name">USES</p>
+<pre> No uses
+</pre>
+
+<hr />
+<a name="src2fmodule2fkronecker2fdelta"></a>
+<a name="robo398"></a><h2>src/module/kronecker/delta [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function delta
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = delta(i,j)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This is the Kronecker symbol \delta_{ij}
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer
+ * j -- an integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns an integer 0 or 1
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> k = delta(2,3) --&gt; k = 0
+ k = delta(3,3) --&gt; k = 1
+</pre>
+
+<hr />
+<a name="src2fmodule2fkronecker2fdeltab"></a>
+<a name="robo399"></a><h2>src/module/kronecker/deltab [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function deltab
+</pre>
+<p class="item_name">USAGE</p>
+<pre> integer = deltab(i,j)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This is one minus the Kronecker symbol, 1-\delta_{ij}
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * i -- an integer
+ * j -- an integer
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns an integer 0 or 1
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> k = deltab(2,3) --&gt; k = 1
+ k = deltab(3,3) --&gt; k = 0
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/module/kronecker.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/masterindex.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/masterindex.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/masterindex.html (revision 119)
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Index</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="./toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="#top">Index</a>
+<a class="menuitem" href="./robo_generics.html#top">Generics</a>
+<a class="menuitem" href="./robo_functions.html#top">Functions</a>
+<a class="menuitem" href="./robo_modules.html#top">Modules</a>
+<a class="menuitem" href="./robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<h1>Index</h1>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+<h2><a name="A"></a>A</h2><a href="./module/array_f90.html#robo_top_of_doc" class="indexitem" >array.f90</a>
+<h2><a name="C"></a>C</h2><a href="./module/cache_f90.html#robo_top_of_doc" class="indexitem" >cache.f90</a>
+<a href="./module/constante_f90.html#robo_top_of_doc" class="indexitem" >constante.f90</a>
+<h2><a name="E"></a>E</h2><a href="./module/equal_f90.html#robo_top_of_doc" class="indexitem" >equal.f90</a>
+<h2><a name="F"></a>F</h2><a href="./form_factor/form_factor_1p_f90.html#robo0" class="indexitem" >form_factor/form_factor_1p</a>
+<a href="./form_factor/form_factor_1p_f90.html#robo65" class="indexitem" >form_factor/form_factor_1p/a10_b</a>
+<a href="./form_factor/form_factor_1p_f90.html#robo66" class="indexitem" >form_factor/form_factor_1p/a10_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo1" class="indexitem" >form_factor/form_factor_2p</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo67" class="indexitem" >form_factor/form_factor_2p/a20_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo68" class="indexitem" >form_factor/form_factor_2p/a20_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo69" class="indexitem" >form_factor/form_factor_2p/a21_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo70" class="indexitem" >form_factor/form_factor_2p/a21_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo71" class="indexitem" >form_factor/form_factor_2p/a22_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo72" class="indexitem" >form_factor/form_factor_2p/a22_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo73" class="indexitem" >form_factor/form_factor_2p/b22_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo74" class="indexitem" >form_factor/form_factor_2p/b22_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo2" class="indexitem" >form_factor/form_factor_3p</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo75" class="indexitem" >form_factor/form_factor_3p/a30_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo76" class="indexitem" >form_factor/form_factor_3p/a30_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo77" class="indexitem" >form_factor/form_factor_3p/a31_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo78" class="indexitem" >form_factor/form_factor_3p/a31_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo79" class="indexitem" >form_factor/form_factor_3p/a32_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo80" class="indexitem" >form_factor/form_factor_3p/a32_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo81" class="indexitem" >form_factor/form_factor_3p/a33_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo82" class="indexitem" >form_factor/form_factor_3p/a33_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo83" class="indexitem" >form_factor/form_factor_3p/b32_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo84" class="indexitem" >form_factor/form_factor_3p/b32_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo85" class="indexitem" >form_factor/form_factor_3p/b33_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo86" class="indexitem" >form_factor/form_factor_3p/b33_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo3" class="indexitem" >form_factor/form_factor_4p</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo87" class="indexitem" >form_factor/form_factor_4p/a40_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo88" class="indexitem" >form_factor/form_factor_4p/a40_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo89" class="indexitem" >form_factor/form_factor_4p/a41_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo90" class="indexitem" >form_factor/form_factor_4p/a41_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo91" class="indexitem" >form_factor/form_factor_4p/a42_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo92" class="indexitem" >form_factor/form_factor_4p/a42_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo93" class="indexitem" >form_factor/form_factor_4p/a43_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo94" class="indexitem" >form_factor/form_factor_4p/a43_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo95" class="indexitem" >form_factor/form_factor_4p/a44_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo96" class="indexitem" >form_factor/form_factor_4p/a44_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo97" class="indexitem" >form_factor/form_factor_4p/b42_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo98" class="indexitem" >form_factor/form_factor_4p/b42_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo99" class="indexitem" >form_factor/form_factor_4p/b43_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo100" class="indexitem" >form_factor/form_factor_4p/b43_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo101" class="indexitem" >form_factor/form_factor_4p/b44_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo102" class="indexitem" >form_factor/form_factor_4p/b44_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo103" class="indexitem" >form_factor/form_factor_4p/c44_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo104" class="indexitem" >form_factor/form_factor_4p/c44_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo4" class="indexitem" >form_factor/form_factor_5p</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo105" class="indexitem" >form_factor/form_factor_5p/a50_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo106" class="indexitem" >form_factor/form_factor_5p/a50_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo107" class="indexitem" >form_factor/form_factor_5p/a51_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo108" class="indexitem" >form_factor/form_factor_5p/a51_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo109" class="indexitem" >form_factor/form_factor_5p/a52_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo110" class="indexitem" >form_factor/form_factor_5p/a52_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo111" class="indexitem" >form_factor/form_factor_5p/a53_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo112" class="indexitem" >form_factor/form_factor_5p/a53_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo113" class="indexitem" >form_factor/form_factor_5p/a54_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo114" class="indexitem" >form_factor/form_factor_5p/a54_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo115" class="indexitem" >form_factor/form_factor_5p/a55_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo116" class="indexitem" >form_factor/form_factor_5p/a55_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo117" class="indexitem" >form_factor/form_factor_5p/a61_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo118" class="indexitem" >form_factor/form_factor_5p/a61_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo119" class="indexitem" >form_factor/form_factor_5p/a62_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo120" class="indexitem" >form_factor/form_factor_5p/a62_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo121" class="indexitem" >form_factor/form_factor_5p/a63_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo122" class="indexitem" >form_factor/form_factor_5p/a63_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo123" class="indexitem" >form_factor/form_factor_5p/b52_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo124" class="indexitem" >form_factor/form_factor_5p/b52_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo125" class="indexitem" >form_factor/form_factor_5p/b53_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo126" class="indexitem" >form_factor/form_factor_5p/b53_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo127" class="indexitem" >form_factor/form_factor_5p/b54_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo128" class="indexitem" >form_factor/form_factor_5p/b54_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo129" class="indexitem" >form_factor/form_factor_5p/b55_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo130" class="indexitem" >form_factor/form_factor_5p/b55_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo131" class="indexitem" >form_factor/form_factor_5p/c54_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo132" class="indexitem" >form_factor/form_factor_5p/c54_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo133" class="indexitem" >form_factor/form_factor_5p/c55_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo134" class="indexitem" >form_factor/form_factor_5p/c55_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo5" class="indexitem" >form_factor/form_factor_6p</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo135" class="indexitem" >form_factor/form_factor_6p/a60_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo136" class="indexitem" >form_factor/form_factor_6p/a60_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo137" class="indexitem" >form_factor/form_factor_6p/a64_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo138" class="indexitem" >form_factor/form_factor_6p/a64_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo139" class="indexitem" >form_factor/form_factor_6p/a65_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo140" class="indexitem" >form_factor/form_factor_6p/a65_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo141" class="indexitem" >form_factor/form_factor_6p/a66_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo142" class="indexitem" >form_factor/form_factor_6p/a66_s</a>
+<a href="./form_factor/form_factor_1p_f90.html#robo_top_of_doc" class="indexitem" >form_factor_1p.f90</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo_top_of_doc" class="indexitem" >form_factor_2p.f90</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo_top_of_doc" class="indexitem" >form_factor_3p.f90</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo_top_of_doc" class="indexitem" >form_factor_4p.f90</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo_top_of_doc" class="indexitem" >form_factor_5p.f90</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo_top_of_doc" class="indexitem" >form_factor_6p.f90</a>
+<a href="./module/form_factor_type_f90.html#robo_top_of_doc" class="indexitem" >form_factor_type.f90</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo_top_of_doc" class="indexitem" >function_2p0m_1mi.f90</a>
+<a href="./integrals/two_point/function_2p_m1m2_f90.html#robo_top_of_doc" class="indexitem" >function_2p_m1m2.f90</a>
+<a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo_top_of_doc" class="indexitem" >function_3p0m_1mi.f90</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo_top_of_doc" class="indexitem" >function_3p1m.f90</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo_top_of_doc" class="indexitem" >function_3p1m_1mi.f90</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo_top_of_doc" class="indexitem" >function_3p1m_2mi.f90</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo_top_of_doc" class="indexitem" >function_3p2m.f90</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo_top_of_doc" class="indexitem" >function_3p2m_1mi.f90</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo_top_of_doc" class="indexitem" >function_3p3m.f90</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo_top_of_doc" class="indexitem" >function_3p_finite.f90</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo_top_of_doc" class="indexitem" >function_4p1m.f90</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo_top_of_doc" class="indexitem" >function_4p2m_3mi_onshell.f90</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo_top_of_doc" class="indexitem" >function_4p2m_adj.f90</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo_top_of_doc" class="indexitem" >function_4p2m_opp.f90</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo_top_of_doc" class="indexitem" >function_4p3m.f90</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo_top_of_doc" class="indexitem" >function_4p4m.f90</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql10.f90</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql11.f90</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql12.f90</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql13.f90</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql14.f90</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql15.f90</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql16.f90</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql6.f90</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql7.f90</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql8.f90</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo_top_of_doc" class="indexitem" >function_4p_ql9.f90</a>
+<h2><a name="G"></a>G</h2><a href="./interface/gb0_f90.html#robo_top_of_doc" class="indexitem" >gb0.f90</a>
+<a href="./interface/gc0_f90.html#robo_top_of_doc" class="indexitem" >gc0.f90</a>
+<a href="./interface/gd0_f90.html#robo_top_of_doc" class="indexitem" >gd0.f90</a>
+<a href="./interface/ge0_f90.html#robo_top_of_doc" class="indexitem" >ge0.f90</a>
+<a href="./integrals/one_point/generic_function_1p_f90.html#robo_top_of_doc" class="indexitem" >generic_function_1p.f90</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo_top_of_doc" class="indexitem" >generic_function_2p.f90</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo_top_of_doc" class="indexitem" >generic_function_3p.f90</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo_top_of_doc" class="indexitem" >generic_function_4p.f90</a>
+<a href="./interface/gf0_f90.html#robo_top_of_doc" class="indexitem" >gf0.f90</a>
+<h2><a name="I"></a>I</h2><a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo6" class="indexitem" >integral/three_point/function_3p0m_1mi</a>
+<a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo143" class="indexitem" >integral/three_point/function_3p0m_1mi/f3p0m_1mi</a>
+<a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo144" class="indexitem" >integral/three_point/function_3p0m_1mi/f3p0m_1mi_np2</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo7" class="indexitem" >integral/three_point/function_3p1m</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo145" class="indexitem" >integral/three_point/function_3p1m/f3p1m</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo146" class="indexitem" >integral/three_point/function_3p1m/f3p1m_np2</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo8" class="indexitem" >integral/three_point/function_3p1m_1mi</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo147" class="indexitem" >integral/three_point/function_3p1m_1mi/f3p1m_1mi</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo148" class="indexitem" >integral/three_point/function_3p1m_1mi/f3p1m_1mi_np2</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo9" class="indexitem" >integral/three_point/function_3p1m_2mi</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo149" class="indexitem" >integral/three_point/function_3p1m_2mi/f3p1m_2mi</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo150" class="indexitem" >integral/three_point/function_3p1m_2mi/f3p1m_2mi_np2</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo10" class="indexitem" >integral/three_point/function_3p2m</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo151" class="indexitem" >integral/three_point/function_3p2m/f3p2m</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo152" class="indexitem" >integral/three_point/function_3p2m/f3p2m_np2</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo11" class="indexitem" >integral/three_point/function_3p2m_1mi</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo153" class="indexitem" >integral/three_point/function_3p2m_1mi/f3p2m_1mi</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo154" class="indexitem" >integral/three_point/function_3p2m_1mi/f3p2m_1mi_np2</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo12" class="indexitem" >integral/three_point/function_3p3m</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo155" class="indexitem" >integral/three_point/function_3p3m/f3p3m</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo156" class="indexitem" >integral/three_point/function_3p3m/f3p3m_c</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo157" class="indexitem" >integral/three_point/function_3p3m/i3_3mass</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo158" class="indexitem" >integral/three_point/function_3p_finite/f3p_finite</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo13" class="indexitem" >integral/three_point/function_3pC0i</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo159" class="indexitem" >integral/three_point/function_3pC0i/C0</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo160" class="indexitem" >integral/three_point/function_3pC0i/f3p_finite_c</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo14" class="indexitem" >integral/two_point/function_2p0m</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo161" class="indexitem" >integral/two_point/function_2p0m/f2p0m_1mi</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo162" class="indexitem" >integral/two_point/function_2p0m/f2p0m_m1m2</a>
+<a href="./integrals/two_point/function_2p_m1m2_f90.html#robo15" class="indexitem" >integral/two_point/function_2p_m1m2</a>
+<a href="./integrals/two_point/function_2p_m1m2_f90.html#robo163" class="indexitem" >integral/two_point/function_2p_m1m2/f2p_m1m2</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo16" class="indexitem" >integrals/four_point/function_4p1m</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo164" class="indexitem" >integrals/four_point/function_4p1m/f1</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo165" class="indexitem" >integrals/four_point/function_4p1m/f4p1m</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo166" class="indexitem" >integrals/four_point/function_4p1m/f4p1m_c</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo17" class="indexitem" >integrals/four_point/function_4p2m_3mi_onshell</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo167" class="indexitem" >integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo168" class="indexitem" >integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell_c</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo18" class="indexitem" >integrals/four_point/function_4p2m_adj</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo169" class="indexitem" >integrals/four_point/function_4p2m_adj/f2a</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo170" class="indexitem" >integrals/four_point/function_4p2m_adj/f4p2m_adj</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo171" class="indexitem" >integrals/four_point/function_4p2m_adj/f4p2m_adj_c</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo19" class="indexitem" >integrals/four_point/function_4p2m_opp</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo172" class="indexitem" >integrals/four_point/function_4p2m_opp/f2b</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo173" class="indexitem" >integrals/four_point/function_4p2m_opp/f4p2m_opp</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo174" class="indexitem" >integrals/four_point/function_4p2m_opp/f4p2m_opp_c</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo20" class="indexitem" >integrals/four_point/function_4p3m</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo175" class="indexitem" >integrals/four_point/function_4p3m/f3</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo176" class="indexitem" >integrals/four_point/function_4p3m/f4p3m</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo177" class="indexitem" >integrals/four_point/function_4p3m/f4p3m_c</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo21" class="indexitem" >integrals/four_point/function_4p4m</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo178" class="indexitem" >integrals/four_point/function_4p4m/f4</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo179" class="indexitem" >integrals/four_point/function_4p4m/f4p4m</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo180" class="indexitem" >integrals/four_point/function_4p4m/f4p4m_c</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo22" class="indexitem" >integrals/four_point/function_4p_ql10</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo181" class="indexitem" >integrals/four_point/function_4p_ql10/f4p_ql10</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo182" class="indexitem" >integrals/four_point/function_4p_ql10/f4p_ql10_c</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo183" class="indexitem" >integrals/four_point/function_4p_ql10/f4p_ql10a_c</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo184" class="indexitem" >integrals/four_point/function_4p_ql10a/f4p_ql10a</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo23" class="indexitem" >integrals/four_point/function_4p_ql11</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo185" class="indexitem" >integrals/four_point/function_4p_ql11/f4p_ql11</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo186" class="indexitem" >integrals/four_point/function_4p_ql11/f4p_ql11_c</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo24" class="indexitem" >integrals/four_point/function_4p_ql12</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo187" class="indexitem" >integrals/four_point/function_4p_ql12/f4p_ql12</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo188" class="indexitem" >integrals/four_point/function_4p_ql12/f4p_ql12_c</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo25" class="indexitem" >integrals/four_point/function_4p_ql13</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo189" class="indexitem" >integrals/four_point/function_4p_ql13/f4p_ql13</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo190" class="indexitem" >integrals/four_point/function_4p_ql13/f4p_ql13_c</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo26" class="indexitem" >integrals/four_point/function_4p_ql14</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo191" class="indexitem" >integrals/four_point/function_4p_ql14/f4p_ql14</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo192" class="indexitem" >integrals/four_point/function_4p_ql14/f4p_ql14_c</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo27" class="indexitem" >integrals/four_point/function_4p_ql15</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo193" class="indexitem" >integrals/four_point/function_4p_ql15/f4p_ql15</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo194" class="indexitem" >integrals/four_point/function_4p_ql15/f4p_ql15_c</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo28" class="indexitem" >integrals/four_point/function_4p_ql16</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo195" class="indexitem" >integrals/four_point/function_4p_ql16/f4p_ql16</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo196" class="indexitem" >integrals/four_point/function_4p_ql16/f4p_ql16_c</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo29" class="indexitem" >integrals/four_point/function_4p_ql6</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo197" class="indexitem" >integrals/four_point/function_4p_ql6/f4p_ql6</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo198" class="indexitem" >integrals/four_point/function_4p_ql6/f4p_ql6_c</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo30" class="indexitem" >integrals/four_point/function_4p_ql7</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo199" class="indexitem" >integrals/four_point/function_4p_ql7/f4p_ql7</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo200" class="indexitem" >integrals/four_point/function_4p_ql7/f4p_ql7_c</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo31" class="indexitem" >integrals/four_point/function_4p_ql8</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo201" class="indexitem" >integrals/four_point/function_4p_ql8/f4p_ql8</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo202" class="indexitem" >integrals/four_point/function_4p_ql8/f4p_ql8_c</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo32" class="indexitem" >integrals/four_point/function_4p_ql9</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo203" class="indexitem" >integrals/four_point/function_4p_ql9/f4p_ql9</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo204" class="indexitem" >integrals/four_point/function_4p_ql9/f4p_ql9_c</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo33" class="indexitem" >integrals/four_point/generic_function_4p</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo205" class="indexitem" >integrals/four_point/generic_function_4p/f4p</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo206" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np2</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo207" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np2_numeric</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo208" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np2_sca</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo209" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np4</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo210" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np4_numeric</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo211" class="indexitem" >integrals/four_point/generic_function_4p/f4p_sca</a>
+<a href="./integrals/one_point/generic_function_1p_f90.html#robo212" class="indexitem" >integrals/one_point/generic_function_1p/f1p</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo34" class="indexitem" >integrals/three_point/func_gn</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo213" class="indexitem" >integrals/three_point/func_gn/ge</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo214" class="indexitem" >integrals/three_point/func_gn/gf</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo215" class="indexitem" >integrals/three_point/func_gn/gl</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo35" class="indexitem" >integrals/three_point/func_h0</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo216" class="indexitem" >integrals/three_point/func_h0/h0d</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo217" class="indexitem" >integrals/three_point/func_h0/h0e</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo218" class="indexitem" >integrals/three_point/func_h0/h0f</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo36" class="indexitem" >integrals/three_point/func_he</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo219" class="indexitem" >integrals/three_point/func_he/he</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo220" class="indexitem" >integrals/three_point/func_he/he_c</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo221" class="indexitem" >integrals/three_point/func_he/he_gen</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo37" class="indexitem" >integrals/three_point/func_hf</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo222" class="indexitem" >integrals/three_point/func_hf/hf</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo223" class="indexitem" >integrals/three_point/func_hf/hf_c</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo224" class="indexitem" >integrals/three_point/func_hf/hf_gen</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo38" class="indexitem" >integrals/three_point/generic_function_3p</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo225" class="indexitem" >integrals/three_point/generic_function_3p/f3p</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo226" class="indexitem" >integrals/three_point/generic_function_3p/f3p_np2</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo227" class="indexitem" >integrals/three_point/generic_function_3p/f3p_np2_sc</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo228" class="indexitem" >integrals/three_point/generic_function_3p/f3p_sc</a>
+<a href="./integrals/one_point/generic_function_1p_f90.html#robo39" class="indexitem" >integrals/two_point/generic_function_1p</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo40" class="indexitem" >integrals/two_point/generic_function_2p</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo229" class="indexitem" >integrals/two_point/generic_function_2p/f2p</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo230" class="indexitem" >integrals/two_point/generic_function_2p/f2p_np2</a>
+<a href="./interface/gb0_f90.html#robo231" class="indexitem" >interface/gb0</a>
+<a href="./interface/gb0_f90.html#robo232" class="indexitem" >interface/gb0i</a>
+<a href="./interface/gc0_f90.html#robo233" class="indexitem" >interface/gc0</a>
+<a href="./interface/gc0_f90.html#robo234" class="indexitem" >interface/gc0i</a>
+<a href="./interface/gd0_f90.html#robo235" class="indexitem" >interface/gd0</a>
+<a href="./interface/gd0_f90.html#robo236" class="indexitem" >interface/gd0i</a>
+<a href="./interface/ge0_f90.html#robo237" class="indexitem" >interface/ge0</a>
+<a href="./interface/ge0_f90.html#robo238" class="indexitem" >interface/ge0i</a>
+<a href="./interface/gf0_f90.html#robo239" class="indexitem" >interface/gf0</a>
+<a href="./interface/gf0_f90.html#robo240" class="indexitem" >interface/gf0i</a>
+<a href="./interface/tens_comb_f90.html#robo41" class="indexitem" >interface/tens_comb</a>
+<a href="./interface/tens_comb_f90.html#robo241" class="indexitem" >interface/tens_comb/contract2_1</a>
+<a href="./interface/tens_comb_f90.html#robo242" class="indexitem" >interface/tens_comb/contract2_2</a>
+<a href="./interface/tens_comb_f90.html#robo243" class="indexitem" >interface/tens_comb/contract2_2s1</a>
+<a href="./interface/tens_comb_f90.html#robo244" class="indexitem" >interface/tens_comb/contract3_1</a>
+<a href="./interface/tens_comb_f90.html#robo245" class="indexitem" >interface/tens_comb/contract3_2</a>
+<a href="./interface/tens_comb_f90.html#robo246" class="indexitem" >interface/tens_comb/contract3_2s1</a>
+<a href="./interface/tens_comb_f90.html#robo247" class="indexitem" >interface/tens_comb/contract3_3</a>
+<a href="./interface/tens_comb_f90.html#robo248" class="indexitem" >interface/tens_comb/contract3_3s1</a>
+<a href="./interface/tens_comb_f90.html#robo249" class="indexitem" >interface/tens_comb/contract4_1</a>
+<a href="./interface/tens_comb_f90.html#robo250" class="indexitem" >interface/tens_comb/contract4_2</a>
+<a href="./interface/tens_comb_f90.html#robo251" class="indexitem" >interface/tens_comb/contract4_2s1</a>
+<a href="./interface/tens_comb_f90.html#robo252" class="indexitem" >interface/tens_comb/contract4_3</a>
+<a href="./interface/tens_comb_f90.html#robo253" class="indexitem" >interface/tens_comb/contract4_3s1</a>
+<a href="./interface/tens_comb_f90.html#robo254" class="indexitem" >interface/tens_comb/contract4_4</a>
+<a href="./interface/tens_comb_f90.html#robo255" class="indexitem" >interface/tens_comb/contract4_4s1</a>
+<a href="./interface/tens_comb_f90.html#robo256" class="indexitem" >interface/tens_comb/contract4_4s2</a>
+<a href="./interface/tens_comb_f90.html#robo257" class="indexitem" >interface/tens_comb/contract5_1</a>
+<a href="./interface/tens_comb_f90.html#robo258" class="indexitem" >interface/tens_comb/contract5_2</a>
+<a href="./interface/tens_comb_f90.html#robo259" class="indexitem" >interface/tens_comb/contract5_3</a>
+<a href="./interface/tens_comb_f90.html#robo260" class="indexitem" >interface/tens_comb/contract5_4</a>
+<a href="./interface/tens_comb_f90.html#robo261" class="indexitem" >interface/tens_comb/contract5_5</a>
+<a href="./interface/tens_comb_f90.html#robo262" class="indexitem" >interface/tens_comb/contract6_1</a>
+<a href="./interface/tens_comb_f90.html#robo263" class="indexitem" >interface/tens_comb/contract6_2</a>
+<a href="./interface/tens_comb_f90.html#robo264" class="indexitem" >interface/tens_comb/contract6_3</a>
+<a href="./interface/tens_comb_f90.html#robo265" class="indexitem" >interface/tens_comb/contract6_4</a>
+<a href="./interface/tens_comb_f90.html#robo266" class="indexitem" >interface/tens_comb/contract6_5</a>
+<a href="./interface/tens_comb_f90.html#robo267" class="indexitem" >interface/tens_comb/contract6_6</a>
+<a href="./interface/tens_comb_f90.html#robo268" class="indexitem" >interface/tens_comb/contract_a_tensor_1</a>
+<a href="./interface/tens_comb_f90.html#robo269" class="indexitem" >interface/tens_comb/contract_a_tensor_2</a>
+<a href="./interface/tens_comb_f90.html#robo270" class="indexitem" >interface/tens_comb/contract_a_tensor_3</a>
+<a href="./interface/tens_comb_f90.html#robo271" class="indexitem" >interface/tens_comb/contract_a_tensor_4</a>
+<a href="./interface/tens_comb_f90.html#robo272" class="indexitem" >interface/tens_comb/contract_a_tensor_5</a>
+<a href="./interface/tens_comb_f90.html#robo273" class="indexitem" >interface/tens_comb/contract_b_tensor_2</a>
+<a href="./interface/tens_comb_f90.html#robo274" class="indexitem" >interface/tens_comb/contract_b_tensor_3</a>
+<a href="./interface/tens_comb_f90.html#robo275" class="indexitem" >interface/tens_comb/contract_b_tensor_4</a>
+<a href="./interface/tens_comb_f90.html#robo276" class="indexitem" >interface/tens_comb/contract_b_tensor_5</a>
+<a href="./interface/tens_comb_f90.html#robo277" class="indexitem" >interface/tens_comb/contract_c_tensor_4</a>
+<a href="./interface/tens_comb_f90.html#robo278" class="indexitem" >interface/tens_comb/contract_c_tensor_5</a>
+<a href="./interface/tens_comb_f90.html#robo279" class="indexitem" >interface/tens_comb/evaluate_b</a>
+<a href="./interface/tens_comb_f90.html#robo280" class="indexitem" >interface/tens_comb/evaluate_s</a>
+<a href="./interface/tens_rec_f90.html#robo42" class="indexitem" >interface/tens_rec</a>
+<a href="./interface/tens_rec_f90.html#robo281" class="indexitem" >interface/tens_rec/coeff_type_1</a>
+<a href="./interface/tens_rec_f90.html#robo282" class="indexitem" >interface/tens_rec/coeff_type_2</a>
+<a href="./interface/tens_rec_f90.html#robo283" class="indexitem" >interface/tens_rec/coeff_type_3</a>
+<a href="./interface/tens_rec_f90.html#robo284" class="indexitem" >interface/tens_rec/coeff_type_4</a>
+<a href="./interface/tens_rec_f90.html#robo285" class="indexitem" >interface/tens_rec/coeff_type_5</a>
+<a href="./interface/tens_rec_f90.html#robo286" class="indexitem" >interface/tens_rec/coeff_type_6</a>
+<a href="./interface/tens_rec_f90.html#robo287" class="indexitem" >interface/tens_rec/ctenseval1</a>
+<a href="./interface/tens_rec_f90.html#robo288" class="indexitem" >interface/tens_rec/ctenseval1_1</a>
+<a href="./interface/tens_rec_f90.html#robo289" class="indexitem" >interface/tens_rec/ctenseval2</a>
+<a href="./interface/tens_rec_f90.html#robo290" class="indexitem" >interface/tens_rec/ctenseval2_1</a>
+<a href="./interface/tens_rec_f90.html#robo291" class="indexitem" >interface/tens_rec/ctenseval2_2</a>
+<a href="./interface/tens_rec_f90.html#robo292" class="indexitem" >interface/tens_rec/ctenseval3</a>
+<a href="./interface/tens_rec_f90.html#robo293" class="indexitem" >interface/tens_rec/ctenseval3_1</a>
+<a href="./interface/tens_rec_f90.html#robo294" class="indexitem" >interface/tens_rec/ctenseval3_2</a>
+<a href="./interface/tens_rec_f90.html#robo295" class="indexitem" >interface/tens_rec/ctenseval3_3</a>
+<a href="./interface/tens_rec_f90.html#robo296" class="indexitem" >interface/tens_rec/ctenseval4</a>
+<a href="./interface/tens_rec_f90.html#robo297" class="indexitem" >interface/tens_rec/ctenseval4_1</a>
+<a href="./interface/tens_rec_f90.html#robo298" class="indexitem" >interface/tens_rec/ctenseval4_2</a>
+<a href="./interface/tens_rec_f90.html#robo299" class="indexitem" >interface/tens_rec/ctenseval4_3</a>
+<a href="./interface/tens_rec_f90.html#robo300" class="indexitem" >interface/tens_rec/ctenseval4_4</a>
+<a href="./interface/tens_rec_f90.html#robo301" class="indexitem" >interface/tens_rec/ctenseval5</a>
+<a href="./interface/tens_rec_f90.html#robo302" class="indexitem" >interface/tens_rec/ctenseval5_1</a>
+<a href="./interface/tens_rec_f90.html#robo303" class="indexitem" >interface/tens_rec/ctenseval5_2</a>
+<a href="./interface/tens_rec_f90.html#robo304" class="indexitem" >interface/tens_rec/ctenseval5_3</a>
+<a href="./interface/tens_rec_f90.html#robo305" class="indexitem" >interface/tens_rec/ctenseval5_4</a>
+<a href="./interface/tens_rec_f90.html#robo306" class="indexitem" >interface/tens_rec/ctenseval6</a>
+<a href="./interface/tens_rec_f90.html#robo307" class="indexitem" >interface/tens_rec/ctenseval6_1</a>
+<a href="./interface/tens_rec_f90.html#robo308" class="indexitem" >interface/tens_rec/ctenseval6_2</a>
+<a href="./interface/tens_rec_f90.html#robo309" class="indexitem" >interface/tens_rec/ctenseval6_3</a>
+<a href="./interface/tens_rec_f90.html#robo310" class="indexitem" >interface/tens_rec/ctenseval6_4</a>
+<a href="./interface/tens_rec_f90.html#robo311" class="indexitem" >interface/tens_rec/print_coeffs_1</a>
+<a href="./interface/tens_rec_f90.html#robo312" class="indexitem" >interface/tens_rec/print_coeffs_2</a>
+<a href="./interface/tens_rec_f90.html#robo313" class="indexitem" >interface/tens_rec/print_coeffs_3</a>
+<a href="./interface/tens_rec_f90.html#robo314" class="indexitem" >interface/tens_rec/print_coeffs_4</a>
+<a href="./interface/tens_rec_f90.html#robo315" class="indexitem" >interface/tens_rec/print_coeffs_5</a>
+<a href="./interface/tens_rec_f90.html#robo316" class="indexitem" >interface/tens_rec/print_coeffs_6</a>
+<a href="./interface/tens_rec_f90.html#robo317" class="indexitem" >interface/tens_rec/reconstruct1</a>
+<a href="./interface/tens_rec_f90.html#robo318" class="indexitem" >interface/tens_rec/reconstruct2</a>
+<a href="./interface/tens_rec_f90.html#robo319" class="indexitem" >interface/tens_rec/reconstruct3</a>
+<a href="./interface/tens_rec_f90.html#robo320" class="indexitem" >interface/tens_rec/reconstruct4</a>
+<a href="./interface/tens_rec_f90.html#robo321" class="indexitem" >interface/tens_rec/reconstruct5</a>
+<a href="./interface/tens_rec_f90.html#robo322" class="indexitem" >interface/tens_rec/reconstruct6</a>
+<a href="./interface/tens_rec_f90.html#robo323" class="indexitem" >interface/tens_rec/solve1</a>
+<a href="./interface/tens_rec_f90.html#robo324" class="indexitem" >interface/tens_rec/solve1_1</a>
+<a href="./interface/tens_rec_f90.html#robo325" class="indexitem" >interface/tens_rec/solve2</a>
+<a href="./interface/tens_rec_f90.html#robo326" class="indexitem" >interface/tens_rec/solve2_1</a>
+<a href="./interface/tens_rec_f90.html#robo327" class="indexitem" >interface/tens_rec/solve2_2</a>
+<a href="./interface/tens_rec_f90.html#robo328" class="indexitem" >interface/tens_rec/solve3</a>
+<a href="./interface/tens_rec_f90.html#robo329" class="indexitem" >interface/tens_rec/solve3_1</a>
+<a href="./interface/tens_rec_f90.html#robo330" class="indexitem" >interface/tens_rec/solve3_2</a>
+<a href="./interface/tens_rec_f90.html#robo331" class="indexitem" >interface/tens_rec/solve3_3</a>
+<a href="./interface/tens_rec_f90.html#robo332" class="indexitem" >interface/tens_rec/solve4</a>
+<a href="./interface/tens_rec_f90.html#robo333" class="indexitem" >interface/tens_rec/solve4_1</a>
+<a href="./interface/tens_rec_f90.html#robo334" class="indexitem" >interface/tens_rec/solve4_2</a>
+<a href="./interface/tens_rec_f90.html#robo335" class="indexitem" >interface/tens_rec/solve4_3</a>
+<a href="./interface/tens_rec_f90.html#robo336" class="indexitem" >interface/tens_rec/solve4_4</a>
+<a href="./interface/tens_rec_f90.html#robo337" class="indexitem" >interface/tens_rec/solve5</a>
+<a href="./interface/tens_rec_f90.html#robo338" class="indexitem" >interface/tens_rec/solve5_1</a>
+<a href="./interface/tens_rec_f90.html#robo339" class="indexitem" >interface/tens_rec/solve5_2</a>
+<a href="./interface/tens_rec_f90.html#robo340" class="indexitem" >interface/tens_rec/solve5_3</a>
+<a href="./interface/tens_rec_f90.html#robo341" class="indexitem" >interface/tens_rec/solve5_4</a>
+<a href="./interface/tens_rec_f90.html#robo342" class="indexitem" >interface/tens_rec/solve6</a>
+<a href="./interface/tens_rec_f90.html#robo343" class="indexitem" >interface/tens_rec/solve6_1</a>
+<a href="./interface/tens_rec_f90.html#robo344" class="indexitem" >interface/tens_rec/solve6_2</a>
+<a href="./interface/tens_rec_f90.html#robo345" class="indexitem" >interface/tens_rec/solve6_3</a>
+<a href="./interface/tens_rec_f90.html#robo346" class="indexitem" >interface/tens_rec/solve6_4</a>
+<a href="./interface/tens_rec_f90.html#robo347" class="indexitem" >interface/tens_rec/tenseval1</a>
+<a href="./interface/tens_rec_f90.html#robo348" class="indexitem" >interface/tens_rec/tenseval1_1</a>
+<a href="./interface/tens_rec_f90.html#robo349" class="indexitem" >interface/tens_rec/tenseval2</a>
+<a href="./interface/tens_rec_f90.html#robo350" class="indexitem" >interface/tens_rec/tenseval2_1</a>
+<a href="./interface/tens_rec_f90.html#robo351" class="indexitem" >interface/tens_rec/tenseval2_2</a>
+<a href="./interface/tens_rec_f90.html#robo352" class="indexitem" >interface/tens_rec/tenseval3</a>
+<a href="./interface/tens_rec_f90.html#robo353" class="indexitem" >interface/tens_rec/tenseval3_1</a>
+<a href="./interface/tens_rec_f90.html#robo354" class="indexitem" >interface/tens_rec/tenseval3_2</a>
+<a href="./interface/tens_rec_f90.html#robo355" class="indexitem" >interface/tens_rec/tenseval3_3</a>
+<a href="./interface/tens_rec_f90.html#robo356" class="indexitem" >interface/tens_rec/tenseval4</a>
+<a href="./interface/tens_rec_f90.html#robo357" class="indexitem" >interface/tens_rec/tenseval4_1</a>
+<a href="./interface/tens_rec_f90.html#robo358" class="indexitem" >interface/tens_rec/tenseval4_2</a>
+<a href="./interface/tens_rec_f90.html#robo359" class="indexitem" >interface/tens_rec/tenseval4_3</a>
+<a href="./interface/tens_rec_f90.html#robo360" class="indexitem" >interface/tens_rec/tenseval4_4</a>
+<a href="./interface/tens_rec_f90.html#robo361" class="indexitem" >interface/tens_rec/tenseval5</a>
+<a href="./interface/tens_rec_f90.html#robo362" class="indexitem" >interface/tens_rec/tenseval5_1</a>
+<a href="./interface/tens_rec_f90.html#robo363" class="indexitem" >interface/tens_rec/tenseval5_2</a>
+<a href="./interface/tens_rec_f90.html#robo364" class="indexitem" >interface/tens_rec/tenseval5_3</a>
+<a href="./interface/tens_rec_f90.html#robo365" class="indexitem" >interface/tens_rec/tenseval5_4</a>
+<a href="./interface/tens_rec_f90.html#robo366" class="indexitem" >interface/tens_rec/tenseval6</a>
+<a href="./interface/tens_rec_f90.html#robo367" class="indexitem" >interface/tens_rec/tenseval6_1</a>
+<a href="./interface/tens_rec_f90.html#robo368" class="indexitem" >interface/tens_rec/tenseval6_2</a>
+<a href="./interface/tens_rec_f90.html#robo369" class="indexitem" >interface/tens_rec/tenseval6_3</a>
+<a href="./interface/tens_rec_f90.html#robo370" class="indexitem" >interface/tens_rec/tenseval6_4</a>
+<a href="./interface/tensor_integrals_f90.html#robo43" class="indexitem" >interface/tensor_integrals</a>
+<a href="./interface/tool_lt_to_golem_f90.html#robo44" class="indexitem" >interface/tool_lt_to_golem</a>
+<a href="./interface/tool_lt_to_golem_f90.html#robo371" class="indexitem" >interface/tool_lt_to_golem/extract</a>
+<a href="./kinematic/inverse_matrice_f90.html#robo_top_of_doc" class="indexitem" >inverse_matrice.f90</a>
+<h2><a name="K"></a>K</h2><a href="./kinematic/inverse_matrice_f90.html#robo45" class="indexitem" >kinematic/inverse_matrice</a>
+<a href="./kinematic/inverse_matrice_f90.html#robo372" class="indexitem" >kinematic/inverse_matrice/imprime_mat</a>
+<a href="./kinematic/inverse_matrice_f90.html#robo373" class="indexitem" >kinematic/inverse_matrice/inverse</a>
+<a href="./kinematic/matrice_s_f90.html#robo374" class="indexitem" >kinematic/inversion/b</a>
+<a href="./kinematic/matrice_s_f90.html#robo375" class="indexitem" >kinematic/inversion/hj</a>
+<a href="./kinematic/matrice_s_f90.html#robo376" class="indexitem" >kinematic/inversion/init_invs</a>
+<a href="./kinematic/matrice_s_f90.html#robo377" class="indexitem" >kinematic/inversion/inv_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo378" class="indexitem" >kinematic/inversion/norma_sumb</a>
+<a href="./kinematic/matrice_s_f90.html#robo379" class="indexitem" >kinematic/inversion/sumb</a>
+<a href="./kinematic/matrice_s_f90.html#robo46" class="indexitem" >kinematic/matrice_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo380" class="indexitem" >kinematic/matrice_s/allocation_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo381" class="indexitem" >kinematic/matrice_s/deallocation_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo382" class="indexitem" >kinematic/matrice_s/prepare_s_matrix</a>
+<a href="./module/kronecker_f90.html#robo_top_of_doc" class="indexitem" >kronecker.f90</a>
+<h2><a name="M"></a>M</h2><a href="./kinematic/matrice_s_f90.html#robo_top_of_doc" class="indexitem" >matrice_s.f90</a>
+<a href="./numerical/mod_adapt_gauss_f90.html#robo_top_of_doc" class="indexitem" >mod_adapt_gauss.f90</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo_top_of_doc" class="indexitem" >mod_gn.f90</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo_top_of_doc" class="indexitem" >mod_h0.f90</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo_top_of_doc" class="indexitem" >mod_he.f90</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo_top_of_doc" class="indexitem" >mod_hf.f90</a>
+<a href="./numerical/mod_numeric_f90.html#robo_top_of_doc" class="indexitem" >mod_numeric.f90</a>
+<a href="./module/array_f90.html#robo47" class="indexitem" >module/array</a>
+<a href="./module/cache_f90.html#robo48" class="indexitem" >module/cache</a>
+<a href="./module/cache_f90.html#robo383" class="indexitem" >module/cache/allocate_cache</a>
+<a href="./module/cache_f90.html#robo384" class="indexitem" >module/cache/clear_cache</a>
+<a href="./module/cache_f90.html#robo385" class="indexitem" >module/cache/reset_cache</a>
+<a href="./module/constante_f90.html#robo49" class="indexitem" >module/constante</a>
+<a href="./module/array_f90.html#robo386" class="indexitem" >module/countb</a>
+<a href="./module/zdilog_f90.html#robo50" class="indexitem" >module/dilogarithme</a>
+<a href="./module/zdilog_f90.html#robo387" class="indexitem" >module/dilogarithme/cdilog</a>
+<a href="./module/zdilog_f90.html#robo388" class="indexitem" >module/dilogarithme/zdilog</a>
+<a href="./module/equal_f90.html#robo51" class="indexitem" >module/equal</a>
+<a href="./module/equal_f90.html#robo389" class="indexitem" >module/equal/equal_real</a>
+<a href="./module/form_factor_type_f90.html#robo52" class="indexitem" >module/form_factor_type</a>
+<a href="./module/form_factor_type_f90.html#robo390" class="indexitem" >module/form_factor_type/assignment</a>
+<a href="./module/form_factor_type_f90.html#robo391" class="indexitem" >module/form_factor_type/division</a>
+<a href="./module/form_factor_type_f90.html#robo392" class="indexitem" >module/form_factor_type/eps</a>
+<a href="./module/form_factor_type_f90.html#robo393" class="indexitem" >module/form_factor_type/epsilon_type</a>
+<a href="./module/form_factor_type_f90.html#robo394" class="indexitem" >module/form_factor_type/form_factor</a>
+<a href="./module/form_factor_type_f90.html#robo395" class="indexitem" >module/form_factor_type/multiplication</a>
+<a href="./module/form_factor_type_f90.html#robo396" class="indexitem" >module/form_factor_type/subtraction</a>
+<a href="./module/form_factor_type_f90.html#robo397" class="indexitem" >module/form_factor_type/sum</a>
+<a href="./module/kronecker_f90.html#robo53" class="indexitem" >module/kronecker</a>
+<a href="./module/kronecker_f90.html#robo398" class="indexitem" >module/kronecker/delta</a>
+<a href="./module/kronecker_f90.html#robo399" class="indexitem" >module/kronecker/deltab</a>
+<a href="./module/array_f90.html#robo400" class="indexitem" >module/locateb</a>
+<a href="./module/z_log_f90.html#robo54" class="indexitem" >module/logarithme</a>
+<a href="./module/z_log_f90.html#robo401" class="indexitem" >module/logarithme/q</a>
+<a href="./module/z_log_f90.html#robo402" class="indexitem" >module/logarithme/z_log</a>
+<a href="./module/z_log_f90.html#robo403" class="indexitem" >module/logarithme/z_log2</a>
+<a href="./module/multiply_div_f90.html#robo55" class="indexitem" >module/multiply_div</a>
+<a href="./module/multiply_div_f90.html#robo404" class="indexitem" >module/multiply_div/mult_div_c</a>
+<a href="./module/multiply_div_f90.html#robo405" class="indexitem" >module/multiply_div/mult_div_r</a>
+<a href="./module/array_f90.html#robo406" class="indexitem" >module/packb</a>
+<a href="./module/parametre_f90.html#robo56" class="indexitem" >module/parametre</a>
+<a href="./module/array_f90.html#robo407" class="indexitem" >module/pminus</a>
+<a href="./module/precision_golem_f90.html#robo57" class="indexitem" >module/precision_golem</a>
+<a href="./module/parametre_f90.html#robo408" class="indexitem" >module/print_parameter</a>
+<a href="./module/array_f90.html#robo409" class="indexitem" >module/punion</a>
+<a href="./module/s_matrix_type_f90.html#robo58" class="indexitem" >module/s_matrix_type</a>
+<a href="./module/s_matrix_type_f90.html#robo410" class="indexitem" >module/s_matrix_type/assign_s_matrix</a>
+<a href="./module/s_matrix_type_f90.html#robo411" class="indexitem" >module/s_matrix_type/fill_s_matrix</a>
+<a href="./module/s_matrix_type_f90.html#robo412" class="indexitem" >module/s_matrix_type/nullify_s_matrix</a>
+<a href="./module/s_matrix_type_f90.html#robo413" class="indexitem" >module/s_matrix_type/s_matrix_poly</a>
+<a href="./module/s_matrix_type_f90.html#robo414" class="indexitem" >module/s_matrix_type/set_s_matrix_bits</a>
+<a href="./module/sortie_erreur_f90.html#robo59" class="indexitem" >module/sortie_erreur</a>
+<a href="./module/sortie_erreur_f90.html#robo415" class="indexitem" >module/sortie_erreur/catch_exception</a>
+<a href="./module/sortie_erreur_f90.html#robo416" class="indexitem" >module/sortie_erreur/erreur</a>
+<a href="./module/spinor_f90.html#robo60" class="indexitem" >module/spinor</a>
+<a href="./module/spinor_f90.html#robo417" class="indexitem" >module/spinor/bra</a>
+<a href="./module/spinor_f90.html#robo418" class="indexitem" >module/spinor/bra_ket</a>
+<a href="./module/spinor_f90.html#robo419" class="indexitem" >module/spinor/e_</a>
+<a href="./module/spinor_f90.html#robo420" class="indexitem" >module/spinor/eps_prod_eps</a>
+<a href="./module/spinor_f90.html#robo421" class="indexitem" >module/spinor/eps_prod_sca</a>
+<a href="./module/spinor_f90.html#robo422" class="indexitem" >module/spinor/ket</a>
+<a href="./module/spinor_f90.html#robo423" class="indexitem" >module/spinor/pslash</a>
+<a href="./module/spinor_f90.html#robo424" class="indexitem" >module/spinor/scalar</a>
+<a href="./module/translate_f90.html#robo61" class="indexitem" >module/translate</a>
+<a href="./module/translate_f90.html#robo425" class="indexitem" >module/translate/to_complex</a>
+<a href="./module/tri_f90.html#robo62" class="indexitem" >module/tri_croissant</a>
+<a href="./module/tri_f90.html#robo426" class="indexitem" >module/tri_croissant/exchange_param</a>
+<a href="./module/tri_f90.html#robo427" class="indexitem" >module/tri_croissant/shift_param</a>
+<a href="./module/tri_f90.html#robo428" class="indexitem" >module/tri_croissant/tri_int</a>
+<a href="./module/array_f90.html#robo429" class="indexitem" >module/unpackb</a>
+<a href="./module/multiply_div_f90.html#robo_top_of_doc" class="indexitem" >multiply_div.f90</a>
+<h2><a name="N"></a>N</h2><a href="./numerical/mod_adapt_gauss_f90.html#robo63" class="indexitem" >numerical/adapt_gauss</a>
+<a href="./numerical/mod_adapt_gauss_f90.html#robo430" class="indexitem" >numerical/adapt_gauss/adapt_gauss1</a>
+<a href="./numerical/mod_numeric_f90.html#robo64" class="indexitem" >numerical/numerical_evaluation</a>
+<a href="./numerical/mod_numeric_f90.html#robo431" class="indexitem" >numerical/numerical_evaluation/generic_eval_numer</a>
+<h2><a name="P"></a>P</h2><a href="./module/parametre_f90.html#robo_top_of_doc" class="indexitem" >parametre.f90</a>
+<a href="./module/precision_golem_f90.html#robo_top_of_doc" class="indexitem" >precision_golem.f90</a>
+<h2><a name="S"></a>S</h2><a href="./module/s_matrix_type_f90.html#robo_top_of_doc" class="indexitem" >s_matrix_type.f90</a>
+<a href="./module/sortie_erreur_f90.html#robo_top_of_doc" class="indexitem" >sortie_erreur.f90</a>
+<a href="./module/spinor_f90.html#robo_top_of_doc" class="indexitem" >spinor.f90</a>
+<h2><a name="T"></a>T</h2><a href="./interface/tens_comb_f90.html#robo_top_of_doc" class="indexitem" >tens_comb.f90</a>
+<a href="./interface/tens_rec_f90.html#robo_top_of_doc" class="indexitem" >tens_rec.f90</a>
+<a href="./interface/tensor_integrals_f90.html#robo_top_of_doc" class="indexitem" >tensor_integrals.f90</a>
+<a href="./interface/tool_lt_to_golem_f90.html#robo_top_of_doc" class="indexitem" >tool_lt_to_golem.f90</a>
+<a href="./module/translate_f90.html#robo_top_of_doc" class="indexitem" >translate.f90</a>
+<a href="./module/tri_f90.html#robo_top_of_doc" class="indexitem" >tri.f90</a>
+<h2><a name="Z"></a>Z</h2><a href="./module/z_log_f90.html#robo_top_of_doc" class="indexitem" >z_log.f90</a>
+<a href="./module/zdilog_f90.html#robo_top_of_doc" class="indexitem" >zdilog.f90</a>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/robo_sourcefiles.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/robo_sourcefiles.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/robo_sourcefiles.html (revision 119)
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Sourcefiles</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="./toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="#top">Sourcefiles</a>
+<a class="menuitem" href="./masterindex.html#top">Index</a>
+<a class="menuitem" href="./robo_generics.html#top">Generics</a>
+<a class="menuitem" href="./robo_functions.html#top">Functions</a>
+<a class="menuitem" href="./robo_modules.html#top">Modules</a>
+<a class="menuitem" href="./robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<ul>
+<li>
+./../src/<ul>
+<li>
+./../src/form_factor/<ul>
+<li>
+<a href="./form_factor/form_factor_1p_f90.html#robo_top_of_doc"><tt>
+form_factor_1p.f90</tt></a></li>
+<li>
+<a href="./form_factor/form_factor_2p_f90.html#robo_top_of_doc"><tt>
+form_factor_2p.f90</tt></a></li>
+<li>
+<a href="./form_factor/form_factor_3p_f90.html#robo_top_of_doc"><tt>
+form_factor_3p.f90</tt></a></li>
+<li>
+<a href="./form_factor/form_factor_4p_f90.html#robo_top_of_doc"><tt>
+form_factor_4p.f90</tt></a></li>
+<li>
+<a href="./form_factor/form_factor_5p_f90.html#robo_top_of_doc"><tt>
+form_factor_5p.f90</tt></a></li>
+<li>
+<a href="./form_factor/form_factor_6p_f90.html#robo_top_of_doc"><tt>
+form_factor_6p.f90</tt></a></li>
+<li>
+./../src/form_factor/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/integrals/<ul>
+<li>
+./../src/integrals/four_point/<ul>
+<li>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo_top_of_doc"><tt>
+function_4p1m.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo_top_of_doc"><tt>
+function_4p2m_3mi_onshell.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo_top_of_doc"><tt>
+function_4p2m_adj.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo_top_of_doc"><tt>
+function_4p2m_opp.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo_top_of_doc"><tt>
+function_4p3m.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo_top_of_doc"><tt>
+function_4p4m.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo_top_of_doc"><tt>
+function_4p_ql10.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo_top_of_doc"><tt>
+function_4p_ql11.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo_top_of_doc"><tt>
+function_4p_ql12.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo_top_of_doc"><tt>
+function_4p_ql13.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo_top_of_doc"><tt>
+function_4p_ql14.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo_top_of_doc"><tt>
+function_4p_ql15.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo_top_of_doc"><tt>
+function_4p_ql16.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo_top_of_doc"><tt>
+function_4p_ql6.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo_top_of_doc"><tt>
+function_4p_ql7.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo_top_of_doc"><tt>
+function_4p_ql8.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo_top_of_doc"><tt>
+function_4p_ql9.f90</tt></a></li>
+<li>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo_top_of_doc"><tt>
+generic_function_4p.f90</tt></a></li>
+<li>
+./../src/integrals/four_point/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/integrals/one_point/<ul>
+<li>
+<a href="./integrals/one_point/generic_function_1p_f90.html#robo_top_of_doc"><tt>
+generic_function_1p.f90</tt></a></li>
+<li>
+./../src/integrals/one_point/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/integrals/three_point/<ul>
+<li>
+<a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo_top_of_doc"><tt>
+function_3p0m_1mi.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo_top_of_doc"><tt>
+function_3p1m.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo_top_of_doc"><tt>
+function_3p1m_1mi.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo_top_of_doc"><tt>
+function_3p1m_2mi.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo_top_of_doc"><tt>
+function_3p2m.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo_top_of_doc"><tt>
+function_3p2m_1mi.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo_top_of_doc"><tt>
+function_3p3m.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo_top_of_doc"><tt>
+function_3p_finite.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo_top_of_doc"><tt>
+generic_function_3p.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/mod_gn_f90.html#robo_top_of_doc"><tt>
+mod_gn.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/mod_h0_f90.html#robo_top_of_doc"><tt>
+mod_h0.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/mod_he_f90.html#robo_top_of_doc"><tt>
+mod_he.f90</tt></a></li>
+<li>
+<a href="./integrals/three_point/mod_hf_f90.html#robo_top_of_doc"><tt>
+mod_hf.f90</tt></a></li>
+<li>
+./../src/integrals/three_point/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/integrals/two_point/<ul>
+<li>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo_top_of_doc"><tt>
+function_2p0m_1mi.f90</tt></a></li>
+<li>
+<a href="./integrals/two_point/function_2p_m1m2_f90.html#robo_top_of_doc"><tt>
+function_2p_m1m2.f90</tt></a></li>
+<li>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo_top_of_doc"><tt>
+generic_function_2p.f90</tt></a></li>
+<li>
+./../src/integrals/two_point/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/interface/<ul>
+<li>
+<a href="./interface/gb0_f90.html#robo_top_of_doc"><tt>
+gb0.f90</tt></a></li>
+<li>
+<a href="./interface/gc0_f90.html#robo_top_of_doc"><tt>
+gc0.f90</tt></a></li>
+<li>
+<a href="./interface/gd0_f90.html#robo_top_of_doc"><tt>
+gd0.f90</tt></a></li>
+<li>
+<a href="./interface/ge0_f90.html#robo_top_of_doc"><tt>
+ge0.f90</tt></a></li>
+<li>
+<a href="./interface/gf0_f90.html#robo_top_of_doc"><tt>
+gf0.f90</tt></a></li>
+<li>
+<a href="./interface/tens_comb_f90.html#robo_top_of_doc"><tt>
+tens_comb.f90</tt></a></li>
+<li>
+<a href="./interface/tens_rec_f90.html#robo_top_of_doc"><tt>
+tens_rec.f90</tt></a></li>
+<li>
+<a href="./interface/tensor_integrals_f90.html#robo_top_of_doc"><tt>
+tensor_integrals.f90</tt></a></li>
+<li>
+<a href="./interface/tool_lt_to_golem_f90.html#robo_top_of_doc"><tt>
+tool_lt_to_golem.f90</tt></a></li>
+<li>
+./../src/interface/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/kinematic/<ul>
+<li>
+<a href="./kinematic/inverse_matrice_f90.html#robo_top_of_doc"><tt>
+inverse_matrice.f90</tt></a></li>
+<li>
+<a href="./kinematic/matrice_s_f90.html#robo_top_of_doc"><tt>
+matrice_s.f90</tt></a></li>
+<li>
+./../src/kinematic/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/module/<ul>
+<li>
+<a href="./module/array_f90.html#robo_top_of_doc"><tt>
+array.f90</tt></a></li>
+<li>
+<a href="./module/cache_f90.html#robo_top_of_doc"><tt>
+cache.f90</tt></a></li>
+<li>
+<a href="./module/constante_f90.html#robo_top_of_doc"><tt>
+constante.f90</tt></a></li>
+<li>
+<a href="./module/equal_f90.html#robo_top_of_doc"><tt>
+equal.f90</tt></a></li>
+<li>
+<a href="./module/form_factor_type_f90.html#robo_top_of_doc"><tt>
+form_factor_type.f90</tt></a></li>
+<li>
+<a href="./module/kronecker_f90.html#robo_top_of_doc"><tt>
+kronecker.f90</tt></a></li>
+<li>
+<a href="./module/multiply_div_f90.html#robo_top_of_doc"><tt>
+multiply_div.f90</tt></a></li>
+<li>
+<a href="./module/parametre_f90.html#robo_top_of_doc"><tt>
+parametre.f90</tt></a></li>
+<li>
+<a href="./module/precision_golem_f90.html#robo_top_of_doc"><tt>
+precision_golem.f90</tt></a></li>
+<li>
+<a href="./module/s_matrix_type_f90.html#robo_top_of_doc"><tt>
+s_matrix_type.f90</tt></a></li>
+<li>
+<a href="./module/sortie_erreur_f90.html#robo_top_of_doc"><tt>
+sortie_erreur.f90</tt></a></li>
+<li>
+<a href="./module/spinor_f90.html#robo_top_of_doc"><tt>
+spinor.f90</tt></a></li>
+<li>
+<a href="./module/translate_f90.html#robo_top_of_doc"><tt>
+translate.f90</tt></a></li>
+<li>
+<a href="./module/tri_f90.html#robo_top_of_doc"><tt>
+tri.f90</tt></a></li>
+<li>
+<a href="./module/z_log_f90.html#robo_top_of_doc"><tt>
+z_log.f90</tt></a></li>
+<li>
+<a href="./module/zdilog_f90.html#robo_top_of_doc"><tt>
+zdilog.f90</tt></a></li>
+<li>
+./../src/module/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+./../src/numerical/<ul>
+<li>
+<a href="./numerical/mod_adapt_gauss_f90.html#robo_top_of_doc"><tt>
+mod_adapt_gauss.f90</tt></a></li>
+<li>
+<a href="./numerical/mod_numeric_f90.html#robo_top_of_doc"><tt>
+mod_numeric.f90</tt></a></li>
+<li>
+./../src/numerical/.libs/<ul>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/one_point/generic_function_1p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/one_point/generic_function_1p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/one_point/generic_function_1p_f90.html (revision 119)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/one_point/generic_function_1p.f90</title>
+<!-- Source: ./../src/integrals/one_point/generic_function_1p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ftwo5fpoint2fgeneric5ffunction5f1p"></a>
+<a name="robo39"></a><h2>src/integrals/two_point/generic_function_1p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module generic_function_1p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use generic_function_1p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the generic routines to compute
+ one point functions in n dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports one public routine:
+ * f1p -- a function to compute the one point function in n dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * s_matrix_type (src/module/<a href="../../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+ * equal (src/module/<a href="../../module/equal_f90.html#robo_top_of_doc">equal.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2fone5fpoint2fgeneric5ffunction5f1p2ff1p"></a>
+<a name="robo212"></a><h2>src/integrals/one_point/generic_function_1p/f1p [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f1p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f1p(s_mat_p,b_pro,parf1)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic two point function in n dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_(r/c/p) -- a real/complex (type ki)/type(s_matrix_poly) array of rank 2, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/one_point/generic_function_1p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p3m_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p3m_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p3m_f90.html (revision 119)
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p3m.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p3m.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p3m"></a>
+<a name="robo12"></a><h2>src/integral/three_point/function_3p3m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p3m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p3m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the three off-shell external leg three point function
+ with no internal leg with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions:
+ * f3p3m -- a function for the computation of the three mass three
+ point function with/without Feynman parameters in n, n+2 dimensions
+ * f3p3m_c -- a function which computes the same thing as f3p3m, only
+ the format of the return values is different
+ * i3_3mass -- a function for the computation of the scalar three mass three
+ point function in n dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_2p (src/integrals/two_point/<a href="../two_point/generic_function_2p_f90.html#robo_top_of_doc">generic_function_2p.f90</a>)
+ * multiply_div (src/module/<a href="../../module/multiply_div_f90.html#robo_top_of_doc">multiply_div.f90</a>)
+ * s_matrix_type (src/module/<a href="../../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p3m2ff3p3m"></a>
+<a name="robo155"></a><h2>src/integral/three_point/function_3p3m/f3p3m [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p3m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p3m(dim,m1,m2,m3,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the three off-shell external leg three point function in n
+ and n+2 dimension. It uses the formula of ref.
+ It switches to numerical evaluation if the Gram determinant is smaller than
+ coupure_3p3m (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (length 3), to compute in n or n+2 dimensions,
+ the values are "ndi", "n+2"
+ * m1 -- a real (type ki), the first mass squared
+ * m2 -- a real (type ki), the second mass squared
+ * m3 -- a real (type ki), the third mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero for dim="n+2", an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> three mass three point function without Feynman parameters in n dimensions
+ f3p3m("ndi",m1,m2,m3,0,0,0)
+ with one Feynman parameter at the numerator z_1 in n dimensions
+ f3p3m("ndi",m1,m2,m3,0,0,1)
+ with three Feynman parameters at the numerator z_2^2 z_3 in n dimensions
+ f3p3m("ndi",m1,m2,m3,2,2,3)
+ three mass three point function without Feynman parameters in n+2 dimensions
+ f3p3m("n+2",m1,m2,m3,0,0,0)
+ with one Feynman parameter at the numerator z_1 in n+2 dimensions
+ f3p3m("n+2",m1,m2,m3,0,0,1)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p3m2ff3p3m5fc"></a>
+<a name="robo156"></a><h2>src/integral/three_point/function_3p3m/f3p3m_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p3m_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim3 = f3p3m_c(dim,m1,m2,m3,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> It computes the same thing that the function f3p3m, but the returned
+ value is a complex (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (length 3), to compute in n or n+2 dimensions,
+ the values are "ndi", "n+2"
+ * m1 -- a real (type ki), the first mass squared
+ * m2 -- a real (type ki), the second mass squared
+ * m3 -- a real (type ki), the third mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An complex (type ki) array of rank 1 and shape 2 corresponding to
+ the (real part,imaginary part) of the coefficient of the 1/epsilon term
+ and the (real part,imaginary part) of the constant term. If par1 and/or par2
+ are different from zero for dim="n+2", an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p3m2fi35f3mass"></a>
+<a name="robo157"></a><h2>src/integral/three_point/function_3p3m/i3_3mass [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function i3_3mass
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = i3_3mass(m1,m2,m3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the scalar three off-shell external leg three point function
+ in n dimension
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m1 -- a real (type ki), the first mass squared
+ * m2 -- a real (type ki), the second mass squared
+ * m3 -- a real (type ki), the third mass squared
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of rat_or_tot_par
+ (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p3m.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_kn_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_kn_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_kn_f90.html (revision 119)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/mod_kn.f90</title>
+<!-- Source: ./../src/integrals/three_point/mod_kn.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf"></a>
+<a name="robo37"></a><h2>src/integrals/three_point/func_hf [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module func_hf
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use func_hf
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains several functions for the computation of
+ int^1_0 dy y^n*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3) where z1 and
+ z3 are complex numbers
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This modules exports three functions:
+ * hf -- a function
+ * hf_gen -- a function
+ * hf_c -- a function
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/preci_double.f90)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * more_integ_info (src/module/<a href="../../module/more_integ_info_f90.html#robo_top_of_doc">more_integ_info.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf2fhf"></a>
+<a name="robo218"></a><h2>src/integrals/three_point/func_hf/hf [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function hf
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = hf(n,a1,a3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ int^1_0 dy y^(n-1)*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3)
+ where z1 = a1 + i b1 and z3 = a3 + i b3
+ For n=1, it is equal to: (ln^2(z1)-ln^2(z3))/(z1-z3)
+ compatible with the definition of HnF
+ It switches to numerical evaluation if
+ |a1-a3|/max(|a1|,|a3|) &lt; coupure_3p2m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1 (time -1)
+ * a3 -- a real (type ki), the real part of z3 (time -1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf2fhf5fc"></a>
+<a name="robo221"></a><h2>src/integrals/three_point/func_hf/hf_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function hf_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = hf_c(n,a1,a3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing as hf
+ but it returns a complex instead of a real array of rank 1 and shape 2
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1 (time -1)
+ * a3 -- a real (type ki), the real part of z3 (time -1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/mod_kn.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Thu May 13 2010 12:35:22
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p0m_1mi_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p0m_1mi_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p0m_1mi_f90.html (revision 119)
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p0m_1mi.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p0m_1mi.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p0m5f1mi"></a>
+<a name="robo6"></a><h2>src/integral/three_point/function_3p0m_1mi [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p0m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p0m_1mi
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the zero off-shell external leg one internal mass three point function
+ with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * f3p0m_1mi -- a function for the computation of the zero off-shell external leg one internal mass three
+ point function with/without Feynman parameters in n dimensions
+ * f3p0m_1mi_np2 -- a function for the computation of the zero off-shell external leg one internal mass three
+ point function with/without Feynman parameters in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>) only : tab_erreur_par,catch_exception
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>) only : rat_or_tot_par,mu2_scale_par
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>) only : packb
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p0m5f1mi2ff3p0m5f1mi"></a>
+<a name="robo143"></a><h2>src/integral/three_point/function_3p0m_1mi/f3p0m_1mi [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p0m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p0m_1mi(m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the zero off-shell external leg one internal mass three point function in n dimensions
+ with up to three Feynman parameters in the numerator.
+ It returns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m3_sq -- real (type ki), the value of the internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p0m5f1mi2ff3p0m5f1mi5fnp2"></a>
+<a name="robo144"></a><h2>src/integral/three_point/function_3p0m_1mi/f3p0m_1mi_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p0m_1mi_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p0m_1mi_np2(m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the zero off-shell external leg one internal mass three point function in n+2 dimensions.
+ with up to one Feynman parameter in the numerator.
+ It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m3_sq -- real (type ki), the value of the internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter = 0
+ * par2 -- an integer, the label of the second Feynman parameter = 0
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero, an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p0m_1mi.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_1mi_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_1mi_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_1mi_f90.html (revision 119)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p1m_1mi.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p1m_1mi.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m5f1mi"></a>
+<a name="robo8"></a><h2>src/integral/three_point/function_3p1m_1mi [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p1m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p1m_1mi
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the one off-shell external leg one internal mass three point function
+ with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * f3p1m_1mi -- a function for the computation of the one off-shell external leg one internal mass three
+ point function with/without Feynman parameters in n dimensions
+ * f3p1m_1mi_np2 -- a function for the computation of the one off-shell external leg one internal mass three
+ point function with/without Feynman parameters in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * func_he (src/integrals/three_point/<a href="./mod_he_f90.html#robo_top_of_doc">mod_he.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>) only : tab_erreur_par,catch_exception
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>) only : un,pi6
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>) only : rat_or_tot_par,mu2_scale_par
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>) only : packb
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m5f1mi2ff3p1m5f1mi"></a>
+<a name="robo147"></a><h2>src/integral/three_point/function_3p1m_1mi/f3p1m_1mi [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p1m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p1m_1mi(s13,m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the one off-shell external leg one internal mass three point function in n dimensions
+ with up to three Feynman parameters in the numerator.
+ It retuns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ * m3_sq -- real (type ki), the value of the internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m5f1mi2ff3p1m5f1mi5fnp2"></a>
+<a name="robo148"></a><h2>src/integral/three_point/function_3p1m_1mi/f3p1m_1mi_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p1m_1mi_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p1m_1mi_np2(s13,m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the one off-shell external leg one internal mass three point function in n+2 dimensions.
+ with up to one Feynman parameter in the numerator.
+ It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ * m3_sq -- real (type ki), the value of the internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter = 0
+ * par2 -- an integer, the label of the second Feynman parameter = 0
+ * par3 -- an integer, the label of the first Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero, an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p1m_1mi.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_he_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_he_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_he_f90.html (revision 119)
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/mod_he.f90</title>
+<!-- Source: ./../src/integrals/three_point/mod_he.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhe"></a>
+<a name="robo36"></a><h2>src/integrals/three_point/func_he [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module func_he
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use func_he
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains several functions for the computation of
+ int^1_0 dy y^(n-1)/(y*z1+(1-y)*z3) where z1 and z3 are complex numbers
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This modules exports three functions:
+ * he -- a function
+ * he_gen -- a function
+ * he_c -- a function
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhe2fhe"></a>
+<a name="robo219"></a><h2>src/integrals/three_point/func_he/he [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function he
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = he(n,a1,a3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ - int^1_0 dy y^(n-1)/(y*z1+(1-y)*z3)
+ where z1 = -a1 -i lambda and z3 = -a3 - i lambda
+ For n=1, it is equal to: - (ln(z1)-ln(z3))/(z1-z3)
+ compatible with the definition of HnE
+ It switches to numerical evaluation if
+ |a1-a3|/max(|a1|,|a3|) &lt; coupure_3p2m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real/complex (type ki), z1 (time -1)
+ * a3 -- a real/complex (type ki), z3 (time -1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhe2fhe5fc"></a>
+<a name="robo220"></a><h2>src/integrals/three_point/func_he/he_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function he_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = he_c(n,a1,a3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing as he
+ but it returns a complex instead of a real array of rank 1 and shape 2
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1 (time -1)
+ * a3 -- a real (type ki), the real part of z3 (time -1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhe2fhe5fgen"></a>
+<a name="robo221"></a><h2>src/integrals/three_point/func_he/he_gen [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function he_gen
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = he_gen(n,a1,b1,a3,b3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ int^1_0 dy y^n/(y*z1+(1-y)*z3)
+ where z1 = a1 + i b1 and z3 = a3 + i b3
+ For n=1, it is equal to: (ln(z1)-ln(z3))/(z1-z3)
+ It switches to numerical evaluation if
+ |a1-a3|/max(|a1|,|a3|) &lt; coupure_3p2m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1
+ * b1 -- a real (type ki), the imaginary part of z1
+ * a3 -- a real (type ki), the real part of z3
+ * b3 -- a real (type ki), the imaginary part of z3
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/mod_he.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_2mi_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_2mi_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_2mi_f90.html (revision 119)
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p1m_2mi.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p1m_2mi.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m5f2mi"></a>
+<a name="robo9"></a><h2>src/integral/three_point/function_3p1m_2mi [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p1m_2mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p1m_2mi
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the one off-shell external leg two internal mass three point function
+ with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * f3p1m_2mi -- a function for the computation of the one off-shell external leg two internal mass three
+ point function with/without Feynman parameters in n dimensions
+ * f3p1m_2mi_np2 -- a function for the computation of the one off-shell external leg two internal mass three
+ point function with/without Feynman parameters in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * func_gn (src/integrals/three_point/<a href="./mod_gn_f90.html#robo_top_of_doc">mod_gn.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>) only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>) only : un,i_,pi6
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>) only : rat_or_tot_par,mu2_scale_par
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>) only : packb
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m5f2mi2ff3p1m5f2mi"></a>
+<a name="robo149"></a><h2>src/integral/three_point/function_3p1m_2mi/f3p1m_2mi [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p1m_2mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p1m_2mi(s13,m1_sq,m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the one off-shell external leg two internal mass three point function in n dimensions
+ with up to three Feynman parameters in the numerator.
+ It retuns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ * m1_sq -- real (type ki), the value of the first internal mass squared
+ * m3_sq -- real (type ki), the value of the second internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m5f2mi2ff3p1m5f2mi5fnp2"></a>
+<a name="robo150"></a><h2>src/integral/three_point/function_3p1m_2mi/f3p1m_2mi_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p1m_2mi_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p1m_2mi_np2(s13,m1_sq,m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the one off-shell external leg two internal mass three point function in n+2 dimensions.
+ with up to one Feynman parameter in the numerator.
+ It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ * m1_sq -- real (type ki), the value of the first internal mass squared
+ * m3_sq -- real (type ki), the value of the second internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter = 0
+ * par2 -- an integer, the label of the second Feynman parameter = 0
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero, an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p1m_2mi.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p2m_1mi_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p2m_1mi_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p2m_1mi_f90.html (revision 119)
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p2m_1mi.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p2m_1mi.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p2m5f1mi"></a>
+<a name="robo11"></a><h2>src/integral/three_point/function_3p2m_1mi [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p2m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p2m_1mi
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the two off-shell external leg one internal mass three point function
+ with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * f3p2m_1mi -- a function for the computation of the two off-shell external leg one internal mass three
+ point function with/without Feynman parameters in n dimensions
+ * f3p2m_1mi_np2 -- a function for the computation of the two off-shell external leg one internal mass three
+ point function with/without Feynman parameters in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * func_he (src/integrals/three_point/<a href="./mod_he_f90.html#robo_top_of_doc">mod_he.f90</a>)
+ * func_hf (src/integrals/three_point/<a href="./mod_hf_f90.html#robo_top_of_doc">mod_hf.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>) only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>) only : i_,un
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>) only : coupure_3p2m_1mi,rat_or_tot_par,tolerance,alpha_par,beta_par,lambda_par,mu2_scale_par
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>) only : packb
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>) only : generic_eval_numer
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p2m5f1mi2ff3p2m5f1mi"></a>
+<a name="robo153"></a><h2>src/integral/three_point/function_3p2m_1mi/f3p2m_1mi [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p2m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p2m_1mi(s23,s13,m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two off-shell external leg one internal mass three point function in n dimensions
+ with up to three Feynman parameters in the numerator.
+ It retuns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p2m5f1mi2ff3p2m5f1mi5fnp2"></a>
+<a name="robo154"></a><h2>src/integral/three_point/function_3p2m_1mi/f3p2m_1mi_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p2m_1mi_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p2m_1mi_np2(s23,s13,m3_sq,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two off-shell external leg one internal mass three point function in n+2 dimensions
+ with up to three Feynman parameters in the numerator.
+ It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s23 -- real/complex (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ * s13 -- real/complex (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ * m3_sq -- real/complex (type ki), the value of the internal mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero, an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p2m_1mi.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_hf_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_hf_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_hf_f90.html (revision 119)
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/mod_hf.f90</title>
+<!-- Source: ./../src/integrals/three_point/mod_hf.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf"></a>
+<a name="robo37"></a><h2>src/integrals/three_point/func_hf [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module func_hf
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use func_hf
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains several functions for the computation of
+ - int^1_0 dy y^n*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3) where z1 and
+ z3 are complex numbers
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This modules exports three functions:
+ * hf -- a function
+ * hf_gen -- a function
+ * hf_c -- a function
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf2fhf"></a>
+<a name="robo222"></a><h2>src/integrals/three_point/func_hf/hf [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function hf
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = hf(n,a1,a3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ - int^1_0 dy y^(n-1)*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3)
+ where z1 = a1 + i b1 and z3 = a3 + i b3
+ For n=1, it is equal to: -(ln^2(z1)-ln^2(z3))/2/(z1-z3)
+ compatible with the definition of HnF
+ It switches to numerical evaluation if
+ |a1-a3|/max(|a1|,|a3|) &lt; coupure_3p2m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1 (time -1)
+ * a3 -- a real (type ki), the real part of z3 (time -1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf2fhf5fc"></a>
+<a name="robo223"></a><h2>src/integrals/three_point/func_hf/hf_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function hf_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = hf_c(n,a1,a3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing as hf
+ but it returns a complex instead of a real array of rank 1 and shape 2
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1 (time -1)
+ * a3 -- a real (type ki), the real part of z3 (time -1)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fhf2fhf5fgen"></a>
+<a name="robo224"></a><h2>src/integrals/three_point/func_hf/hf_gen [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function hf_gen
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = hf_gen(n,a1,b1,a3,b3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ int^1_0 dy y^n*ln(y*z1+(1-y)*z3)/(y*z1+(1-y)*z3)
+ where z1 = a1 + i b1 and z3 = a3 + i b3
+ For n=1, it is equal to: (ln^2(z1)-ln^2(z3))/(z1-z3)
+ It switches to numerical evaluation if
+ |a1-a3|/max(|a1|,|a3|) &lt; coupure_3p2m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of y in the integrand
+ * a1 -- a real (type ki), the real part of z1
+ * b1 -- a real (type ki), the imaginary part of z1
+ * a3 -- a real (type ki), the real part of z3
+ * b3 -- a real (type ki), the imaginary part of z3
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/mod_hf.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/generic_function_3p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/generic_function_3p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/generic_function_3p_f90.html (revision 119)
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/generic_function_3p.f90</title>
+<!-- Source: ./../src/integrals/three_point/generic_function_3p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2fthree5fpoint2fgeneric5ffunction5f3p"></a>
+<a name="robo38"></a><h2>src/integrals/three_point/generic_function_3p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module generic_function_3p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use generic_function_3p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the generic routines to compute the
+ three point functions in n and n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports two public routines:
+ * f3p(_sc) -- a function to compute the three point function in n dimensions
+ * f3p_np2(_sc) -- a function to compute the three point function in n+2 dimensions
+ Calling the functions with _sc returns a real array. These calls will not be cached.
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s (src/kinematic/<a href="../../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>) ( only : dim_s, b_ref )
+ * s_matrix_type (src/module/<a href="../../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * function_3p1m (src/integrals/three_point/<a href="./function_3p1m_f90.html#robo_top_of_doc">function_3p1m.f90</a>)
+ * function_3p2m (src/integrals/three_point/<a href="./function_3p2m_f90.html#robo_top_of_doc">function_3p2m.f90</a>)
+ * function_3p3m (src/integrals/three_point/<a href="./function_3p3m_f90.html#robo_top_of_doc">function_3p3m.f90</a>)
+ * cache (src/module/<a href="../../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * equal (src/module/<a href="../../module/equal_f90.html#robo_top_of_doc">equal.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2fgeneric5ffunction5f3p2ff3p"></a>
+<a name="robo225"></a><h2>src/integrals/three_point/generic_function_3p/f3p [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim3 = f3p(s_mat_p, b_pro, parf1, parf2, parf3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic three point function in n dimensions,
+ with or without Feynman parameters in the numerator.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a type s_matrix_poly object, the S matrix
+ * b_pro -- an integer whose digits represents the set of the three unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 3
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2fgeneric5ffunction5f3p2ff3p5fnp2"></a>
+<a name="robo226"></a><h2>src/integrals/three_point/generic_function_3p/f3p_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim2 = f3p_np2_ca(s_mat,b_pro,parf1,parf2,parf3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic three point function in n+2 dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat -- a s_matrix_poly type object, the S matrix
+ * b_pro -- an integer whose digits represents the set of the three unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2fgeneric5ffunction5f3p2ff3p5fnp25fsc"></a>
+<a name="robo227"></a><h2>src/integrals/three_point/generic_function_3p/f3p_np2_sc [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p_np2_sc
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p_np2_sc(s_mat,s,parf1,parf2,parf3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic three point function in n+2 dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat -- a real/complex (type ki)/s_matrix_poly array of rank 2, the S matrix
+ * s -- an integer array of rank 1 and shape 3, the set of the three unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 4
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2fgeneric5ffunction5f3p2ff3p5fsc"></a>
+<a name="robo228"></a><h2>src/integrals/three_point/generic_function_3p/f3p_sc [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p_sc
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p_sc(s_mat,s,parf1,parf2,parf3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic three point function in n dimensions,
+ with or without Feynman parameters in the numerator without using a cache
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat -- a real/complex (type ki)/s_matrix_poly array of rank 2, the S matrix
+ * s -- an integer array of rank 1 and shape 3, the set of the three unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 6
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/generic_function_3p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_gn_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_gn_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_gn_f90.html (revision 119)
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/mod_gn.f90</title>
+<!-- Source: ./../src/integrals/three_point/mod_gn.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fgn"></a>
+<a name="robo34"></a><h2>src/integrals/three_point/func_gn [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module func_gn
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use func_gn
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains several functions for the computation of
+ int^1_0 dx x^(n-1)*ln(a*x^2+b*x+c-i*lambda)/(a*x^2+b*x+c-i*lambda)
+ where a, b and c are real numbers
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This modules exports four functions:
+ * ge -- a function
+ * ge_c -- a function
+ * gf -- a function
+ * gf_c -- a function
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/precision.f90)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>) only : tab_erreur_par,catch_exception,origine_info_par,num_grand_b_info_par,denom_grand_b_info_par
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>) only : i_,un,pi
+</pre>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fgn2fge"></a>
+<a name="robo213"></a><h2>src/integrals/three_point/func_gn/ge [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ge
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = ge(n,a,b,c)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ int^1_0 dx x^(n-1)/(a*x^2+b*x+c-i*lambda)
+ where a, b and c are reals
+ It switches to numerical evaluation if
+ (b^2-4*a*c) &lt; coupure_3p1m_2mi
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of x in the integrand
+ * a -- a real (type ki), coefficient of x^2
+ * b -- a real (type ki), coefficient of x^1
+ * c -- a real (type ki), coefficient of x^0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m_2mi
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fgn2fgf"></a>
+<a name="robo214"></a><h2>src/integrals/three_point/func_gn/gf [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gf
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = gf(n,a,b,c)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ int^1_0 dx x^(n-1)*ln(a*x^2+b*x+c-i*lambda)/(a*x^2+b*x+c-i*lambda)
+ where a, b and c are reals
+ It switches to numerical evaluation if
+ (b^2-4*a*c) &lt; coupure_3p1m_2mi
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of x in the integrand
+ * a -- a real (type ki), coefficient of x^2
+ * b -- a real (type ki), coefficient of x^1
+ * c -- a real (type ki), coefficient of x^0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variables
+ rat_or_tot_par, coupure_3p2m_2mi
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fgn2fgl"></a>
+<a name="robo215"></a><h2>src/integrals/three_point/func_gn/gl [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gl
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = gl(n,a,b,c)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes:
+ int^1_0 dx x^(n-1)*ln(a*x^2+b*x+c-i*lambda)
+ where a, b and c are reals
+ here, no need to switch to numerical evaluation
+ no numerical problems when (b^2-4*a*c) = 0
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * n -- an integer, the power of x in the integrand
+ * a -- a real (type ki), coefficient of x^2
+ * b -- a real (type ki), coefficient of x^1
+ * c -- a real (type ki), coefficient of x^0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variable
+ rat_or_tot_par
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/mod_gn.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p1m_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p1m.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p1m.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m"></a>
+<a name="robo7"></a><h2>src/integral/three_point/function_3p1m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p1m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p1m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the one off-shell external leg three point function
+ with no internal mass with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * f3p1m -- a function for the computation of the one off-shell external three
+ point function with/without Feynman parameters in n dimensions
+ * f3p1m_np2 -- a function for the computation of the one off-shell external three
+ point function with/without Feynman parameters in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * func_h0 (src/integrals/three_point/<a href="./mod_h0_f90.html#robo_top_of_doc">mod_h0.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m2ff3p1m"></a>
+<a name="robo145"></a><h2>src/integral/three_point/function_3p1m/f3p1m [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p1m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p1m(s13,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the one off-shell external three point function in n dimensions
+ with up to three Feynman parameters in the numerator.
+ It retuns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> one mass three point function without Feynman parameters
+ f3p1m(s13,0,0,0)
+ with one Feynman parameter at the numerator z_1
+ f3p1m(s13,0,0,1)
+ with three Feynman parameters at the numerator z_2^2 z_3
+ f3p1m(s13,2,2,3)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p1m2ff3p1m5fnp2"></a>
+<a name="robo146"></a><h2>src/integral/three_point/function_3p1m/f3p1m_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p1m_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p1m_np2(s13,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the one off-shell external three point function in n+2 dimensions.
+ with up to one Feynman parameter in the numerator.
+ It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the external off-shell leg
+ * par1 -- an integer, the label of the third Feynman parameter = 0
+ * par2 -- an integer, the label of the second Feynman parameter = 0
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero, an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> one mass three point function without Feynman parameters
+ f3p1m_np2(s13,0,0,0)
+ with one Feynman parameter at the numerator z_1
+ f3p1m_np2(s13,0,0,1)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p1m.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p_finite_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p_finite_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p_finite_f90.html (revision 119)
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p_finite.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p_finite.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3pC0i"></a>
+<a name="robo13"></a><h2>src/integral/three_point/function_3pC0i [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p_finite
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p_finite
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute IR finite three point functions
+ with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions:
+ * f3p_finite, C0 -- functions for the computation of IR finite
+ three-point functions with/without Feynman parameters in n, n+2 dimensions
+ * f3p_finite_c -- a function which computes the same thing as f3p_finite, only
+ the format of the return values is different
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_2p (src/integrals/two_point/<a href="../two_point/generic_function_2p_f90.html#robo_top_of_doc">generic_function_2p.f90</a>)
+ * multiply_div (src/module/<a href="../../module/multiply_div_f90.html#robo_top_of_doc">multiply_div.f90</a>)
+ * s_matrix_type (src/module/<a href="../../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p5ffinite2ff3p5ffinite"></a>
+<a name="robo158"></a><h2>src/integral/three_point/function_3p_finite/f3p_finite [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p_finite
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p_finite(dim,s1,s2,s3,m1,m2,m3,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the IR finite three-point
+ function in n and n+2 dimensions.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * m1 -- a real/complex (type ki), the first mass squared
+ * m2 -- a real/complex (type ki), the second mass squared
+ * m3 -- a real/complex (type ki), the third mass squared
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6,
+ where the last two entries corresponding to
+ the real/imaginary part of the constant term.
+ the first 4 entries are always zero, but the shape should be
+ uniform for all triangles called in generic_function_3p
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3pC0i2fC0"></a>
+<a name="robo159"></a><h2>src/integral/three_point/function_3pC0i/C0 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function C0, follows A.Denner, Fortsch.Phys.41:307-420,1993
+ resp. Oldenborgh/Vermaseren Z.Phys.C46:425-438,1990
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = C0(s1,s2,s3,m1,m2,m3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes finite scalar three point functions
+ with internal masses in 4 dimensions
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real/complex (type ki), p1^2
+ * s2 -- a real/complex (type ki), p2^2
+ * s3 -- a real/complex (type ki), p3^2
+ * m1 -- a real/complex (type ki), the first internal mass squared
+ * m2 -- a real/complex (type ki), the second internal mass squared
+ * m3 -- a real/complex (type ki), the third internal mass squared
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of rat_or_tot_par
+ (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3pC0i2ff3p5ffinite5fc"></a>
+<a name="robo160"></a><h2>src/integral/three_point/function_3pC0i/f3p_finite_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p_finite_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim2 = f3p_finite_c(s1,s2,s3,m1,m2,m3,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> It computes the same as the function f3p_finite, but the returned
+ value is a complex (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (length 3), to compute in n or n+2 dimensions
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * m1 -- a real (type ki), the first mass^2
+ * m2 -- a real (type ki), the second mass^2
+ * m3 -- a real (type ki), the third mass^2
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An complex (type ki) array of rank 1 and shape 2 corresponding to
+ the (real part,imaginary part) of the coefficient of the 1/epsilon term
+ and the (real part,imaginary part) of the constant term. if par1 and/or par2
+ are different from zero for dim="n+2", an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p_finite.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p2m_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p2m_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/function_3p2m_f90.html (revision 119)
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/function_3p2m.f90</title>
+<!-- Source: ./../src/integrals/three_point/function_3p2m.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p2m"></a>
+<a name="robo10"></a><h2>src/integral/three_point/function_3p2m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_3p2m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_3p2m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the two off-shell external leg three point function
+ with no internal mass with/without Feynman parameters in n, n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports two functions:
+ * f3p2m -- a function for the computation of the two off-shell external leg three
+ point function with/without Feynman parameters in n dimensions
+ * f3p2m_np2 -- a function for the computation of the two off-shell external leg three
+ point function with/without Feynman parameters in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * func_h0 (src/integrals/three_point/<a href="./mod_h0_f90.html#robo_top_of_doc">mod_h0.f90</a>)
+ * func_he (src/integrals/three_point/<a href="./mod_he_f90.html#robo_top_of_doc">mod_he.f90</a>)
+ * func_hf (src/integrals/three_point/<a href="./mod_hf_f90.html#robo_top_of_doc">mod_hf.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p2m2ff3p2m"></a>
+<a name="robo151"></a><h2>src/integral/three_point/function_3p2m/f3p2m [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p2m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f3p2m(s13,s23,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two off-shell external leg three point function in n dimensions
+ with up to three Feynman parameters in the numerator.
+ It retuns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon^2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ * s23 -- real (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ * par1 -- an integer, the label of the third Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon^2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> two mass three point function without Feynman parameters
+ f3p2m(s13,s23,0,0,0)
+ with one Feynman parameter at the numerator z_1
+ f3p2m(s13,s23,0,0,1)
+ with three Feynman parameters at the numerator z_2^2 z_3
+ f3p2m(s13,s23,2,2,3)
+</pre>
+
+<hr />
+<a name="src2fintegral2fthree5fpoint2ffunction5f3p2m2ff3p2m5fnp2"></a>
+<a name="robo152"></a><h2>src/integral/three_point/function_3p2m/f3p2m_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f3p2m_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f3p2m_np2(s13,s23,par1,par2,par3)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two off-shell external leg three point function in n+2 dimensions.
+ with up to one Feynman parameter in the numerator.
+ It retuns an array of 4 reals corresponding to the real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s13 -- real (type ki), the value of the S matrix element corresponding to the first external off-shell leg
+ * s23 -- real (type ki), the value of the S matrix element corresponding to the second external off-shell leg
+ * par1 -- an integer, the label of the third Feynman parameter = 0
+ * par2 -- an integer, the label of the second Feynman parameter = 0
+ * par3 -- an integer, the label of the first Feynman parameter
+ Note that par1,par2 and par3 are supposed to be ordered, i.e.
+ par1 &lt;= par2 &lt;= par3, note also that put zero for par1, par2 or par3
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term. If par1 and/or par2
+ are different from zero, an error is returned.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> two mass three point function without Feynman parameters
+ f3p2m_np2(s13,s23,0,0,0)
+ with one Feynman parameter at the numerator z_1
+ f3p2m_np2(s13,s23,0,0,1)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/function_3p2m.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_h0_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_h0_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/three_point/mod_h0_f90.html (revision 119)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/three_point/mod_h0.f90</title>
+<!-- Source: ./../src/integrals/three_point/mod_h0.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fh0"></a>
+<a name="robo35"></a><h2>src/integrals/three_point/func_h0 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module func_h0
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use func_h0
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is specific for the function h0 defined
+ by h0(x,alpha) = (-x-i lambda)^(alpha)/x
+ with alpha &lt;&lt; 1. The three functions h0d, h0e and h0f
+ are defined as:
+ h0(x,alpha) = h0d(x) + alpha h0e(x) + alpha^2 h0f(x)
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions:
+ * h0d -- function
+ * h0e -- function
+ * h0f -- function
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fh02fh0d"></a>
+<a name="robo216"></a><h2>src/integrals/three_point/func_h0/h0d [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function h0d
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = h0d(x)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Compute the function 1/x
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * x -- a real (type ki)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fh02fh0e"></a>
+<a name="robo217"></a><h2>src/integrals/three_point/func_h0/h0e [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function h0e
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = h0e(x)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Compute the function ln(-x)/x
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * x -- a real (type ki)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variable rat_or_tot_par
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2fthree5fpoint2ffunc5fh02fh0f"></a>
+<a name="robo218"></a><h2>src/integrals/three_point/func_h0/h0f [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function h0f
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim2 = h0f(x)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Compute the function 1/2 ln(-x)^2/x
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * x -- a real (type ki)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, the returned value depends on the global variable rat_or_tot_par
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/three_point/mod_h0.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p0m_mi_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p0m_mi_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p0m_mi_f90.html (revision 119)
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/two_point/function_2p0m_mi.f90</title>
+<!-- Source: ./../src/integrals/two_point/function_2p0m_mi.f90 -->
+<!-- Generated with ROBODoc Version 4.99.40 (Jun 3 2010) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p0m"></a>
+<a name="robo14"></a><h2>src/integral/two_point/function_2p0m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_2p0m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_2p0m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the two-point function
+ with zero momentum and two equal masses: I_2(0,m^2,m^2)
+ and the two-point function
+ with zero momentum and two different masses: I_2(0,m1^2,m2^2)
+ with/without Feynman parameters in n dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions:
+ * f2p0m_1mi -- a function for the computation of the
+ two-point integrals
+ with zero momentum and two equal masses: I2({j})(0,m^2,m^2)
+ with/without Feynman parameters, in n dimensions
+
+ * f2p0m_m1m2 -- a function for the computation of the
+ two-point integrals
+ with zero momentum and two different masses: I2({j})(0,m1^2,m2^2)
+ with/without Feynman parameters, in n dimensions
+
+ scalar functions:
+
+ i20m1: computes the scalar two point function
+ with zero momentum and one propagator having nonzero mass:
+ I_2^n(0,0,m^2)
+
+ i20mm: computes the scalar two point function
+ with zero momentum and two massive propagators
+ with equal masses: I_2^n(0,m^2,m^2)
+
+ i20m1m2: computes the scalar two point function
+ with zero momentum and two massive propagators
+ with different masses: I_2^n(0,m1^2,m2^2)
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/preci_double.f90)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p0m2ff2p0m5f1mi"></a>
+<a name="robo156"></a><h2>src/integral/two_point/function_2p0m/f2p0m_1mi [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p0m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f2p0m_1mi(msq,par1,par2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two point function in n dimensions
+ with zero momentum and two massive propagators with m1=m2
+ with up to two Feynman parameters in the numerator.
+ It retuns an array of 4 reals corresponding to the
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+
+ corresponds to eqs.(A.9),(A.10) in hep-ph/0504267
+ note overall minus sign has to be corrected in first line of (A.10)
+ note also that for rank one A_j^{2,1}=MINUS I_2(j,...)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m1_sq -- real (type ki), the value of the mass
+ * par1 -- an integer, the label of one Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ Note that par1,par2 are ordered internally, i.e.
+ par1 &lt;= par2, note also to use zero for par1, par2
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 4 corresponding to
+ the real/imaginary part of the coefficient of the coefficient
+ of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> light-like-momentum two point function without Feynman parameters
+ f2p0m_1mi(msq,0,0)
+ with one Feynman parameter in the numerator z_1
+ f2p0m_1mi(msq,0,1)
+ with two Feynman parameters in the numerator z_2**2
+ f2p0m_1mi(msq,2,2)
+ with two Feynman parameters in the numerator z1*z_2
+ f2p0m_1mi(msq,1,2)
+</pre>
+
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p0m2ff2p0m5fm1m2"></a>
+<a name="robo157"></a><h2>src/integral/two_point/function_2p0m/f2p0m_m1m2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p0m_m1m2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f2p0m_m1m2(m1sq,m2sq,par1,par2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two point function in n dimensions
+ with zero momentum and two massive propagators with m1 not= m2
+ with up to two Feynman parameters in the numerator.
+ It retuns an array of 6 reals corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon**2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+ corresponds to eqs.(A.8) in hep-ph/0504267
+ note that for rank one A_j^{2,1}=MINUS I_2(j,...)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m1_sq,m2_sq -- real (type ki), the values of the masses
+ * par1 -- an integer, the label of one Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ Note that par1,par2 are ordered internally, i.e.
+ par1 &lt;= par2, note also to use zero for par1, par2
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real (type ki) array of rank 1 and shape 6 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon**2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> light-like-momentum two point function without Feynman parameters
+ f2p0m_m1m2(m1sq,m2sq,0,0)
+ with one Feynman parameter in the numerator z_1
+ f2p0m_m1m2(m1sq,m2sq,0,1)
+ with two Feynman parameters in the numerator z_2**2
+ f2p0m_m1m2(m1sq,m2sq,2,2)
+ with two Feynman parameters in the numerator z1*z_2
+ f2p0m_m1m2(m1sq,m2sq,1,2)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/two_point/function_2p0m_mi.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.40 on Thu Jun 17 2010 17:24:50
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p0m_1mi_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p0m_1mi_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p0m_1mi_f90.html (revision 119)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/two_point/function_2p0m_1mi.f90</title>
+<!-- Source: ./../src/integrals/two_point/function_2p0m_1mi.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p0m"></a>
+<a name="robo14"></a><h2>src/integral/two_point/function_2p0m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_2p0m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_2p0m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the two-point function
+ with zero momentum and two equal masses: I_2(0,m^2,m^2)
+ and the two-point function
+ with zero momentum and two different masses: I_2(0,m1^2,m2^2)
+ with/without Feynman parameters in n dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions:
+ * f2p0m_1mi -- a function for the computation of the
+ two-point integrals
+ with zero momentum and two equal masses: I2({j})(0,m^2,m^2)
+ with/without Feynman parameters, in n dimensions
+
+ * f2p0m_m1m2 -- a function for the computation of the
+ two-point integrals
+ with zero momentum and two different masses: I2({j})(0,m1^2,m2^2)
+ with/without Feynman parameters, in n dimensions
+
+ scalar functions:
+
+ i20m1: computes the scalar two point function
+ with zero momentum and one propagator having nonzero mass:
+ I_2^n(0,0,m^2)
+
+ i20mm: computes the scalar two point function
+ with zero momentum and two massive propagators
+ with equal masses: I_2^n(0,m^2,m^2)
+
+ i20m1m2: computes the scalar two point function
+ with zero momentum and two massive propagators
+ with different masses: I_2^n(0,m1^2,m2^2)
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p0m2ff2p0m5f1mi"></a>
+<a name="robo161"></a><h2>src/integral/two_point/function_2p0m/f2p0m_1mi [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p0m_1mi
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f2p0m_1mi(msq_r,par1,par2)
+ complex_dim2 = f2p0m_1mi(msq_c,par1,par2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two point function in n dimensions
+ with zero momentum and two massive propagators with m1=m2
+ with up to two Feynman parameters in the numerator.
+ It retuns an array of (4 reals / 2 complex) corresponding to the
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+
+ corresponds to eqs.(A.9),(A.10) in hep-ph/0504267
+ note overall minus sign has to be corrected in first line of (A.10)
+ note also that for rank one A_j^{2,1}=MINUS I_2(j,...)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m1_sq -- real/complex (type ki), the value of the mass
+ * par1 -- an integer, the label of one Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ Note that par1,par2 are ordered internally, i.e.
+ par1 &lt;= par2, note also to use zero for par1, par2
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real/complex (type ki) array of rank 1 and shape 4/2 corresponding to
+ the real/imaginary part of the coefficient of the coefficient
+ of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> light-like-momentum two point function without Feynman parameters
+ f2p0m_1mi(msq,0,0)
+ with one Feynman parameter in the numerator z_1
+ f2p0m_1mi(msq,0,1)
+ with two Feynman parameters in the numerator z_2**2
+ f2p0m_1mi(msq,2,2)
+ with two Feynman parameters in the numerator z1*z_2
+ f2p0m_1mi(msq,1,2)
+</pre>
+
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p0m2ff2p0m5fm1m2"></a>
+<a name="robo162"></a><h2>src/integral/two_point/function_2p0m/f2p0m_m1m2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p0m_m1m2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f2p0m_m1m2(m1sq_r,m2sq_r,par1,par2)
+ complex_dim3 = f2p0m_m1m2(m1sq_c,m2sq_c,par1,par2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the two point function in n dimensions
+ with zero momentum and two massive propagators with m1 not= m2
+ with up to two Feynman parameters in the numerator.
+ It retuns an array of (6 reals / 3 complex) corresponding to the real/imaginary
+ part of the coefficient of the 1/epsilon**2 term, real/imaginary part of the
+ coefficient of the 1/epsilon term and the real/imaginary part of the
+ constant term.
+ corresponds to eqs.(A.8) in hep-ph/0504267
+ note that for rank one A_j^{2,1}=MINUS I_2(j,...)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m1_sq,m2_sq -- real/complex (type ki), the values of the masses
+ * par1 -- an integer, the label of one Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ Note that par1,par2 are ordered internally, i.e.
+ par1 &lt;= par2, note also to use zero for par1, par2
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real/complex (type ki) array of rank 1 and shape 6/3 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon**2 term,
+ real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> light-like-momentum two point function without Feynman parameters
+ f2p0m_m1m2(m1sq,m2sq,0,0)
+ with one Feynman parameter in the numerator z_1
+ f2p0m_m1m2(m1sq,m2sq,0,1)
+ with two Feynman parameters in the numerator z_2**2
+ f2p0m_m1m2(m1sq,m2sq,2,2)
+ with two Feynman parameters in the numerator z1*z_2
+ f2p0m_m1m2(m1sq,m2sq,1,2)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/two_point/function_2p0m_1mi.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p_m1m2_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p_m1m2_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/function_2p_m1m2_f90.html (revision 119)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/two_point/function_2p_m1m2.f90</title>
+<!-- Source: ./../src/integrals/two_point/function_2p_m1m2.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p5fm1m2"></a>
+<a name="robo15"></a><h2>src/integral/two_point/function_2p_m1m2 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_2p_m1m2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_2p_m1m2
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module is used to compute the two-point function
+ I_2(s,m1^2,m2^2)
+ with/without Feynman parameters in n dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions:
+ * f2p_m1m2 -- a function for the computation of
+ two-point integrals
+ with non-zero momentum and two masses: I2^n({zj})(s,m1^2,m2^2)
+ with/without Feynman parameters, in n dimensions
+ one of the masses can be zero
+ massless case is already contained in generic_function_2p
+
+
+ i2sm1m2: computes the scalar two point function
+ where both propagators have nonzero mass:
+ I_2^n(s,m1^2,m2^2)
+
+ i2sm1: computes the scalar two point function
+ where only one propagator has nonzero mass:
+ I_2^n(s,m^2,0)
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * function_2p0m_1mi (src/integrals/two_point/<a href="./function_2p0m_1mi_f90.html#robo_top_of_doc">function_2p0m_1mi.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegral2ftwo5fpoint2ffunction5f2p5fm1m22ff2p5fm1m2"></a>
+<a name="robo163"></a><h2>src/integral/two_point/function_2p_m1m2/f2p_m1m2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p_m1m2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim4 = f2p_m1m2(s,msq1_r,msq2_r,par1,par2)
+ complex_dim2 = f2p_m1m2(s,msq1_c,msq2_c,par1,par2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the
+ two point function in n dimensions
+ with non-zero momentum and two massive propagators
+ with up to two Feynman parameters in the numerator.
+ It retuns an array of 4 reals / 2 complex corresponding to the real/imaginary
+ part of the coefficient of the
+ 1/epsilon term and the real/imaginary part of the
+ constant term.
+ corresponds to eqs.(A.5),(A.7) in hep-ph/0504267
+ note that for rank one A_j^{2,1}=MINUS I_2(j,...)
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * m1,m2 -- real/complex (type ki), the value of the masses
+ * par1 -- an integer, the label of one Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ Note that par1,par2 are ordered internally, i.e.
+ par1 &lt;= par2, note also to use zero for par1, par2
+ if this Feynman parameter does not exist.
+ Use the routine tri_int(t_in,t_out) to order the labels in the module
+ tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> An real/complex (type ki) array of rank 1 and shape 4/2 corresponding to
+ the real/imaginary part of the coefficient of the 1/epsilon term
+ and the real/imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> light-like-momentum two point function without Feynman parameters
+ f2p_m1m2(s,m1sq,m2sq,0,0)
+ with one Feynman parameter in the numerator z_1
+ f2p_m1m2(s,m1sq,m2sq,0,1)
+ with two Feynman parameters in the numerator z_2^2
+ f2p_m1m2(s,m1sq,m2sq,2,2)
+ with two Feynman parameters in the numerator z1*z_2
+ f2p_m1m2(s,m1sq,m2sq,1,2)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/two_point/function_2p_m1m2.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/generic_function_2p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/generic_function_2p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/two_point/generic_function_2p_f90.html (revision 119)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/two_point/generic_function_2p.f90</title>
+<!-- Source: ./../src/integrals/two_point/generic_function_2p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ftwo5fpoint2fgeneric5ffunction5f2p"></a>
+<a name="robo40"></a><h2>src/integrals/two_point/generic_function_2p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module generic_function_2p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use generic_function_2p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the generic routines to compute the
+ two point functions in n and n+2 dimensions
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports two public routine:
+ * f2p -- a function to compute the two point function in n dimensions
+ * f2p_np2 -- a function to compute the two point function in n+2 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/precision.f90)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * function_2p0m_1mi (src/integrals/two_point/<a href="./function_2p0m_1mi_f90.html#robo_top_of_doc">function_2p0m_1mi.f90</a>)
+ * function_2p_m1m2 (src/integrals/two_point/<a href="./function_2p_m1m2_f90.html#robo_top_of_doc">function_2p_m1m2.f90</a>)
+ * s_matrix_type (src/module/<a href="../../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ftwo5fpoint2fgeneric5ffunction5f2p2ff2p"></a>
+<a name="robo229"></a><h2>src/integrals/two_point/generic_function_2p/f2p [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> cmplx_dim2 = f2p(s_mat_p,b_pro,parf1,parf2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic two point function in n dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat -- a derived type s_matrix_poly, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 2
+</pre>
+
+<hr />
+<a name="src2fintegrals2ftwo5fpoint2fgeneric5ffunction5f2p2ff2p5fnp2"></a>
+<a name="robo230"></a><h2>src/integrals/two_point/generic_function_2p/f2p_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f2p_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> cmplx_dim2 = f2p_np2(s_mat_p,b_pro)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic two point function in n+2 dimensions,
+ without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a s_matrix_poly type object
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 2
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/two_point/generic_function_2p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_3mi_onshell_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_3mi_onshell_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_3mi_onshell_f90.html (revision 119)
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p2m_3mi_onshell.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p2m_3mi_onshell.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5f3mi5fonshell"></a>
+<a name="robo17"></a><h2>src/integrals/four_point/function_4p2m_3mi_onshell [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p2m_3mi_onshell
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p2m_3mi_onshell
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional
+ two adjacent massive on-shell legs four point function with 3 internal masses,
+ all masses equal, the only massless internal line connects the two on-shell legs
+ =&gt; corresponding n-dim box is IR div
+ only without Feynman parameters in the numerator.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p2m_3mi_onshell, f4p2m_3mi_onshell_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5f3mi5fonshell2ff4p2m5f3mi5fonshell"></a>
+<a name="robo167"></a><h2>src/integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p2m_3mi_onshell
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p2m_3mi_onshell(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional
+ two adjacent massive on-shell legs four point function with 3 internal masses,
+ all masses equal, the only massless internal line connects the two on-shell legs
+ =&gt; corresponding n-dim box is IR div
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n": (4-2*eps)- dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5f3mi5fonshell2ff4p2m5f3mi5fonshell5fc"></a>
+<a name="robo168"></a><h2>src/integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p2m_3mi_onshell_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p2m_3mi_onshell_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p2m_3mi_onshell
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p2m_3mi_onshell
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p2m_3mi_onshell.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/generic_function_4p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/generic_function_4p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/generic_function_4p_f90.html (revision 119)
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/generic_function_4p.f90</title>
+<!-- Source: ./../src/integrals/four_point/generic_function_4p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p"></a>
+<a name="robo33"></a><h2>src/integrals/four_point/generic_function_4p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module generic_function_4p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use generic_function_4p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the generic routines to compute the
+ four point functions in n+2 and n+4 dimensions. It can compute
+ the zero mass, one mass, two mass adjacent, two mass opposite, three mass
+ and four mass four point functions with massless internal lines
+ It can also calculate the IR divergent boxes with massive internal lines, but
+ ONLY in the scalar case.
+ For the latter, the (4-2*eps)-dim expressions are implemented
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports three public routines:
+ * f4p -- a function to compute the four point function in n dimensions
+ (used donly if internal masses are present)
+ * f4p_np2 -- a function to compute the four point function in n+2 dimensions
+ * f4p_np4 -- a function to compute the four point function in n+4 dimensions
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s (src/kinematic/<a href="../../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>) ( only : dim_s, set_ref )
+ * s_matrix_type (src/module/<a href="../../module/s_matrix_type_f90.html#robo_top_of_doc">s_matrix_type.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * tri_croissant (src/module/<a href="../../module/tri_f90.html#robo_top_of_doc">tri.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * function_4p1m (src/integrals/four_point/<a href="./function_4p1m_f90.html#robo_top_of_doc">function_4p1m.f90</a>)
+ * function_4p2m_opp (src/integrals/four_point/<a href="./function_4p2m_opp_f90.html#robo_top_of_doc">function_4p2m_opp.f90</a>)
+ * function_4p2m_adj (src/integrals/four_point/<a href="./function_4p2m_adj_f90.html#robo_top_of_doc">function_4p2m_adj.f90</a>)
+ * function_4p3m (src/integrals/four_point/<a href="./function_4p3m_f90.html#robo_top_of_doc">function_4p3m.f90</a>)
+ * function_4p4m (src/integrals/four_point/<a href="./function_4p4m_f90.html#robo_top_of_doc">function_4p4m.f90</a>)
+ * cache (src/module/<a href="../../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>), only : coupure_3p2m,coupure_3p3m,coupure_4p1m,
+ coupure_4p2m_opp,coupure_4p2m_adj,coupure_4p3m,coupure_4p4m
+ * equal (src/module/<a href="../../module/equal_f90.html#robo_top_of_doc">equal.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p"></a>
+<a name="robo205"></a><h2>src/integrals/four_point/generic_function_4p/f4p [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> cmplx_dim3 = f4p(s_mat,b_pro,b_pin,parf1,parf2,parf3,parf4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic four point function in n dimensions
+ only scalar case is implemented!!!
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * b_pin -- an integer which represents the set of the pinched propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+ * parf4 -- an integer (optional), the label of the forth Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 3
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p5fnp2"></a>
+<a name="robo206"></a><h2>src/integrals/four_point/generic_function_4p/f4p_np2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_np2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f4p_np2(s_mat,b_pro,b_pin,parf1,parf2,parf3,parf4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes recursively the generic four point function in n+2 dimensions,
+ with or without Feynman parameters in the numerator using the formula of
+ JHEP 10 (2005) 015.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a derived type (s_matrix_poly), giving the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * b_pin -- an integer which represents the set of the pinched propagators
+ * parf1 -- an integer (optional), the label of the first Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+ * parf4 -- an integer (optional), the label of the forth Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) number
+
+ NOTE
+
+ This function has been changed! It accepts only a s_matrix_poly-type as input
+ and returns a complex number instead of a real array!
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p5fnp25fnumeric"></a>
+<a name="robo207"></a><h2>src/integrals/four_point/generic_function_4p/f4p_np2_numeric [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_np2_numeric
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f4p_np2_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes numerically the generic four point function in n+2 dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * par1 -- an integer, the label of the one Feynman parameter
+ * par2 -- an integer, the label of the second Feynman parameter
+ * par3 -- an integer, the label of the third Feynman parameter
+ * par4 -- an integer, the label of the forth Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex number!
+</pre>
+<p class="item_name">NOTES</p>
+<pre> This function has been changed! It only accepts a s_matrix_poly type object!
+ It returns a complex number!
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p5fnp25fsca"></a>
+<a name="robo208"></a><h2>src/integrals/four_point/generic_function_4p/f4p_np2_sca [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_np2_sca
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f4p_np2_sca(s_mat_p,b_pro,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic four point function in n+2 dimensions,
+ without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a type s_matrix_poly object, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) number!
+
+ NOTE
+
+ This function now returns a complex number instaed of a real array!
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p5fnp4"></a>
+<a name="robo209"></a><h2>src/integrals/four_point/generic_function_4p/f4p_np4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_np4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim2 = f4p_np4(s_mat_p,b_pro,b_pin,parf1,parf2,parf3,parf4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes recursively the generic four point function in n+4 dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a type s_matrix_poly object, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * b_pin -- an integer which represents the set of the pinched propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+ * parf4 -- an integer (optional), the label of the forth Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 2.
+</pre>
+<p class="item_name">NOTES</p>
+<pre> This function has been changed! It only accepts a s_matrix_poly type object as input.
+ It returns a complex instead of a real array!
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p5fnp45fnumeric"></a>
+<a name="robo210"></a><h2>src/integrals/four_point/generic_function_4p/f4p_np4_numeric [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_np4_numeric
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim2 = f4p_np4_numeric(s_mat_p,b_pro,parf1,parf2,parf3,parf4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes numerically the generic four point function in n+4 dimensions,
+ with or without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a derived type s_matrix_poly, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+ * parf1 -- an integer (optional), the label of the one Feynman parameter
+ * parf2 -- an integer (optional), the label of the second Feynman parameter
+ * parf3 -- an integer (optional), the label of the third Feynman parameter
+ * parf4 -- an integer (optional), the label of the forth Feynman parameter
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) array of rank 1 and shape 2.
+</pre>
+<p class="item_name">NOTES</p>
+<pre> This function has been changed! It only accepts a s_matrix_poly type object!
+ It returns a complex array!
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2fgeneric5ffunction5f4p2ff4p5fsca"></a>
+<a name="robo211"></a><h2>src/integrals/four_point/generic_function_4p/f4p_sca [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_sca
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim6 = f4p_sca(s_mat_p,b_pro)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the generic four point function in n dimensions,
+ without Feynman parameters in the numerator
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s_mat_p -- a s_matrix_poly type, the S matrix
+ * b_pro -- an integer which represents the set of the four unpinched
+ propagators
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a real (type ki) array of rank 1 and shape 6
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/generic_function_4p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql10_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql10_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql10_f90.html (revision 119)
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql10.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql10.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql10"></a>
+<a name="robo22"></a><h2>src/integrals/four_point/function_4p_ql10 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql10
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql10
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 10
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql10, f4p_ql10_c,f4p_ql10a, f4p_ql10a_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql102ff4p5fql10"></a>
+<a name="robo181"></a><h2>src/integrals/four_point/function_4p_ql10/f4p_ql10 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql10
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql10(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql102ff4p5fql105fc"></a>
+<a name="robo182"></a><h2>src/integrals/four_point/function_4p_ql10/f4p_ql10_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql10_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql10_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql10
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql10
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql102ff4p5fql10a5fc"></a>
+<a name="robo183"></a><h2>src/integrals/four_point/function_4p_ql10/f4p_ql10a_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql10a_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql10a_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql10
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql10
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql10a2ff4p5fql10a"></a>
+<a name="robo184"></a><h2>src/integrals/four_point/function_4p_ql10a/f4p_ql10a [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql10a
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql10a(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql10.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p1m_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p1m_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p1m_f90.html (revision 119)
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p1m.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p1m.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p1m"></a>
+<a name="robo16"></a><h2>src/integrals/four_point/function_4p1m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p1m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p1m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the six-dimensional and eight dimensional
+ one mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions f4p1m,f4p1m_c and f1
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p1m2ff1"></a>
+<a name="robo164"></a><h2>src/integrals/four_point/function_4p1m/f1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> function f1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f1(a,b,c)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the "finite part" of the scalar four dimensional one/zero mass
+ four point function. The expression has been taken in
+ Nucl. Phys. {\bf B615} (2001) , 385
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a -- a real (type ki), (p1+p2)^2
+ * b -- a real (type ki), (p2+p3)^2
+ * c -- a real (type ki), p4^2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+ Affected by the variable rat_or_tot_par (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p1m2ff4p1m"></a>
+<a name="robo165"></a><h2>src/integrals/four_point/function_4p1m/f4p1m [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p1m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p1m(dim,s24,s13,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the six dimensional/eight dimensional
+ one mass four point function with or without Feynman parameters
+ in the numerator, Note that it also computes the zero mass four
+ point function
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ one mass four point function, dim="n+4" eight dimensional
+ one mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> If the user wants to compute:
+ * a six dimensional one mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p1m("n+2",s24,s13,s34,0,0,0,0)
+ * a eight dimensional one mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p1m("n+4",s24,s13,s34,0,0,0,0)
+ * a six dimensional zero mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p1m("n+2",s24,s13,0._ki,0,0,0,0)
+ * a six dimensional one mass four point function
+ with the Feynman parameter z1 in the numerator:
+ real_dim_4 = f4p1m("n+2",s24,s13,s34,0,0,0,1)
+ * a six dimensional one mass four point function
+ with the Feynman parameters z1^2*z2 in the numerator:
+ real_dim_4 = f4p1m("n+2",s24,s13,s34,0,2,1,1)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p1m2ff4p1m5fc"></a>
+<a name="robo166"></a><h2>src/integrals/four_point/function_4p1m/f4p1m_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p1m_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_2 = f4p1m_c(dim,s24,s13,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing that the fucntion f4p1m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ one mass four point function, dim="n+4" eight dimensional
+ one mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p1m
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p1m.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql11_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql11_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql11_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql11.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql11.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql11"></a>
+<a name="robo23"></a><h2>src/integrals/four_point/function_4p_ql11 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql11
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql11
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 11
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql11, f4p_ql11_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql112ff4p5fql11"></a>
+<a name="robo185"></a><h2>src/integrals/four_point/function_4p_ql11/f4p_ql11 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql11
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql11(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql112ff4p5fql115fc"></a>
+<a name="robo186"></a><h2>src/integrals/four_point/function_4p_ql11/f4p_ql11_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql11_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql11_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql11
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql11
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql11.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql12_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql12_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql12_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql12.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql12.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql12"></a>
+<a name="robo24"></a><h2>src/integrals/four_point/function_4p_ql12 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql12
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql12
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 12
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql12, f4p_ql12_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql122ff4p5fql12"></a>
+<a name="robo187"></a><h2>src/integrals/four_point/function_4p_ql12/f4p_ql12 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql12
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql12(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql122ff4p5fql125fc"></a>
+<a name="robo188"></a><h2>src/integrals/four_point/function_4p_ql12/f4p_ql12_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql12_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql12_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql12
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql12
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql12.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p3m_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p3m_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p3m_f90.html (revision 119)
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p3m.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p3m.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p3m"></a>
+<a name="robo20"></a><h2>src/integrals/four_point/function_4p3m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p3m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p3m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the six-dimensional and eight dimensional
+ three mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions f4p3m, f4p3m_c and f3
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p3m2ff3"></a>
+<a name="robo175"></a><h2>src/integrals/four_point/function_4p3m/f3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> function f3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f3(s,t,m2,m3,m4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the "finite part" of the scalar four dimensional three
+ mass four point function.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s -- a real (type ki), (p1+p2)^2
+ * t -- a real (type ki), (p2+p3)^2
+ * m2 -- a real (type ki), p2^2
+ * m3 -- a real (type ki), p3^2
+ * m4 -- a real (type ki), p4^2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+ Affected by the variable rat_or_tot_par (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p3m2ff4p3m"></a>
+<a name="robo176"></a><h2>src/integrals/four_point/function_4p3m/f4p3m [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p3m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p3m(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the six dimensional/eight dimensional
+ three mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ three mass four point function, dim="n+4" eight dimensional
+ three mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s12 -- a real (type ki), the S matrix element 1,2
+ * s23 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> If the user wants to compute:
+ * a six dimensional three mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p3m("n+2",s24,s13,s12,s23,s34,0,0,0,0)
+ * a eight dimensional three mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p3m("n+4",s24,s13,s12,s23,s34,0,0,0,0)
+ * a six dimensional three mass four point function
+ with the Feynman parameter z1 in the numerator:
+ real_dim_4 = f4p3m("n+2",s24,s13,s12,s23,s34,0,0,0,1)
+ * a six dimensional three mass four point function
+ with the Feynman parameters z1^2*z2 in the numerator:
+ real_dim_4 = f4p3m("n+2",s24,s13,s12,s23,s34,0,2,1,1)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p3m2ff4p3m5fc"></a>
+<a name="robo177"></a><h2>src/integrals/four_point/function_4p3m/f4p3m_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p3m_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_2 = f4p3m_c(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing that the function f4p3m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ two adjacent mass four point function, dim="n+4" eight dimensional
+ two adjacent mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s12 -- a real (type ki), the S matrix element 1,2
+ * s23 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p3m
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p3m.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql13_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql13_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql13_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql13.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql13.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql13"></a>
+<a name="robo25"></a><h2>src/integrals/four_point/function_4p_ql13 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql13
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql13
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 12
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql13, f4p_ql13_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql132ff4p5fql13"></a>
+<a name="robo189"></a><h2>src/integrals/four_point/function_4p_ql13/f4p_ql13 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql13
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql13(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql132ff4p5fql135fc"></a>
+<a name="robo190"></a><h2>src/integrals/four_point/function_4p_ql13/f4p_ql13_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql13_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql13_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql13
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql13
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql13.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p4m_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p4m_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p4m_f90.html (revision 119)
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p4m.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p4m.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p4m"></a>
+<a name="robo21"></a><h2>src/integrals/four_point/function_4p4m [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p4m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p4m
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the six-dimensional and eight dimensional
+ three mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions f4p4m, f4p4m_c and f4
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p4m2ff4"></a>
+<a name="robo178"></a><h2>src/integrals/four_point/function_4p4m/f4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> function f4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f4(s,t,s1,s2,s3,s4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the "finite part" of the scalar four dimensional three
+ mass four point function.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s -- a real (type ki), (p1+p2)^2
+ * t -- a real (type ki), (p2+p3)^2
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+ Affected by the variable rat_or_tot_par (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p4m2ff4p4m"></a>
+<a name="robo179"></a><h2>src/integrals/four_point/function_4p4m/f4p4m [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p4m
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p4m(dim,s24,s13,s12,s23,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the six dimensional/eight dimensional
+ three mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ three mass four point function, dim="n+4" eight dimensional
+ three mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s12 -- a real (type ki), the S matrix element 1,2
+ * s23 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> If the user wants to compute:
+ * a six dimensional three mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p4m("n+2",s24,s13,s12,s23,s34,0,0,0,0)
+ * a eight dimensional three mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p4m("n+4",s24,s13,s12,s23,s34,0,0,0,0)
+ * a six dimensional three mass four point function
+ with the Feynman parameter z1 in the numerator:
+ real_dim_4 = f4p4m("n+2",s24,s13,s12,s23,s34,0,0,0,1)
+ * a six dimensional three mass four point function
+ with the Feynman parameters z1^2*z2 in the numerator:
+ real_dim_4 = f4p4m("n+2",s24,s13,s12,s23,s34,0,2,1,1)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p4m2ff4p4m5fc"></a>
+<a name="robo180"></a><h2>src/integrals/four_point/function_4p4m/f4p4m_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p4m_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_2 = f4p4m_c(dim,s24,s13,s14,s12,s23,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing that the function f4p4m
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ two adjacent mass four point function, dim="n+4" eight dimensional
+ two adjacent mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s14 -- a real (type ki), the S matrix element 1,4
+ * s12 -- a real (type ki), the S matrix element 1,2
+ * s23 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p4m
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p4m.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql14_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql14_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql14_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql14.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql14.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql14"></a>
+<a name="robo26"></a><h2>src/integrals/four_point/function_4p_ql14 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql14
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql14
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 14
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql14, f4p_ql14_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql142ff4p5fql14"></a>
+<a name="robo191"></a><h2>src/integrals/four_point/function_4p_ql14/f4p_ql14 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql14
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql14(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql142ff4p5fql145fc"></a>
+<a name="robo192"></a><h2>src/integrals/four_point/function_4p_ql14/f4p_ql14_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql14_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql14_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql14
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql14
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql14.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql15_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql15_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql15_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql15.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql15.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql15"></a>
+<a name="robo27"></a><h2>src/integrals/four_point/function_4p_ql15 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql15
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql15
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 14
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql15, f4p_ql15_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql152ff4p5fql15"></a>
+<a name="robo193"></a><h2>src/integrals/four_point/function_4p_ql15/f4p_ql15 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql15
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql15(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql152ff4p5fql155fc"></a>
+<a name="robo194"></a><h2>src/integrals/four_point/function_4p_ql15/f4p_ql15_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql15_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql15_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql15
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql15
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql15.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql16_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql16_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql16_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql16.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql16.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql16"></a>
+<a name="robo28"></a><h2>src/integrals/four_point/function_4p_ql16 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql16
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql16
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 14
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql16, f4p_ql16_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql162ff4p5fql16"></a>
+<a name="robo195"></a><h2>src/integrals/four_point/function_4p_ql16/f4p_ql16 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql16
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql16(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql162ff4p5fql165fc"></a>
+<a name="robo196"></a><h2>src/integrals/four_point/function_4p_ql16/f4p_ql16_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql16_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql16_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql16
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql16
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql16.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_adj_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_adj_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_adj_f90.html (revision 119)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p2m_adj.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p2m_adj.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fadj"></a>
+<a name="robo18"></a><h2>src/integrals/four_point/function_4p2m_adj [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p2m_adj
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p2m_adj
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the six-dimensional and eight dimensional
+ two adjacent mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions f4p2m_adj, f4p2m_adj_c and f2a
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fadj2ff2a"></a>
+<a name="robo169"></a><h2>src/integrals/four_point/function_4p2m_adj/f2a [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> function f2a
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f2a(u,v,w,x)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the "finite part" of the scalar four dimensional two
+ adjacent mass four point function. The expression has been taken in
+ Nucl. Phys. {\bf B615} (2001) , 385
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * u -- a real (type ki), (p1+p2)^2
+ * v -- a real (type ki), (p2+p3)^2
+ * w -- a real (type ki), p3^2
+ * x -- a real (type ki), p4^2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+ Affected by the variable rat_or_tot_par (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fadj2ff4p2m5fadj"></a>
+<a name="robo170"></a><h2>src/integrals/four_point/function_4p2m_adj/f4p2m_adj [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p2m_adj
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p2m_adj(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the six dimensional/eight dimensional
+ two adjacent mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ two adjacent mass four point function, dim="n+4" eight dimensional
+ two adjacent mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s23 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> If the user wants to compute:
+ * a six dimensional two adjacent mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p2m_adj("n+2",s24,s13,s23,s34,0,0,0,0)
+ * a eight dimensional two adjacent mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p2m_adj("n+4",s24,s13,s23,s34,0,0,0,0)
+ * a six dimensional two adjacent mass four point function
+ with the Feynman parameter z1 in the numerator:
+ real_dim_4 = f4p2m_adj("n+2",s24,s13,s23,s34,0,0,0,1)
+ * a six dimensional two adjacent mass four point function
+ with the Feynman parameters z1^2*z2 in the numerator:
+ real_dim_4 = f4p2m_adj("n+2",s24,s13,s23,s34,0,2,1,1)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fadj2ff4p2m5fadj5fc"></a>
+<a name="robo171"></a><h2>src/integrals/four_point/function_4p2m_adj/f4p2m_adj_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p2m_adj_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_2 = f4p2m_adj_c(dim,s24,s13,s23,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing that the function f4p2m_adj
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ two adjacent mass four point function, dim="n+4" eight dimensional
+ two adjacent mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s23 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p2m_adj
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p2m_adj.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_opp_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_opp_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p2m_opp_f90.html (revision 119)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p2m_opp.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p2m_opp.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fopp"></a>
+<a name="robo19"></a><h2>src/integrals/four_point/function_4p2m_opp [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p2m_opp
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p2m_opp
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the six-dimensional and eight dimensional
+ two opposite mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports three functions f4p2m_opp, f4p2m_opp_c and f2b
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fopp2ff2b"></a>
+<a name="robo172"></a><h2>src/integrals/four_point/function_4p2m_opp/f2b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> function f2b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = f2b(a,b,c,d)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the "finite part" of the scalar four dimensional two
+ opposit mass four point function. The expression has been taken in
+ Nucl. Phys. {\bf B615} (2001) , 385
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * a -- a real (type ki), (p1+p2)^2
+ * b -- a real (type ki), (p2+p3)^2
+ * c -- a real (type ki), p2^2
+ * d -- a real (type ki), p4^2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+ Affected by the variable rat_or_tot_par (in src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns a complex (type ki)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fopp2ff4p2m5fopp"></a>
+<a name="robo173"></a><h2>src/integrals/four_point/function_4p2m_opp/f4p2m_opp [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p2m_opp
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p2m_opp(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the six dimensional/eight dimensional
+ two opposit mass four point function with or without Feynman parameters
+ in the numerator.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ two opposit mass four point function, dim="n+4" eight dimensional
+ two opposit mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s12 -- a real (type ki), the S matrix element 1,2
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> If the user wants to compute:
+ * a six dimensional two opposit mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p2m_opp("n+2",s24,s13,s12,s34,0,0,0,0)
+ * a eight dimensional two opposit mass four point function
+ with no Feynman parameters in the numerator:
+ real_dim_4 = f4p2m_opp("n+4",s24,s13,s12,s34,0,0,0,0)
+ * a six dimensional two opposit mass four point function
+ with the Feynman parameter z1 in the numerator:
+ real_dim_4 = f4p2m_opp("n+2",s24,s13,s12,s34,0,0,0,1)
+ * a six dimensional two opposit mass four point function
+ with the Feynman parameters z1^2*z2 in the numerator:
+ real_dim_4 = f4p2m_opp("n+2",s24,s13,s12,s34,0,2,1,1)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p2m5fopp2ff4p2m5fopp5fc"></a>
+<a name="robo174"></a><h2>src/integrals/four_point/function_4p2m_opp/f4p2m_opp_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p2m_opp_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_2 = f4p2m_opp_c(dim,s24,s13,s12,s34,par1,par2,par3,par4)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function computes the same thing that the fucntion f4p2m_opp
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character (dimension 3), dim="n+2" six dimensional
+ two opposit mass four point function, dim="n+4" eight dimensional
+ two opposit mass four point function
+ * s24 -- a real (type ki), the S matrix element 2,4
+ * s13 -- a real (type ki), the S matrix element 1,3
+ * s12 -- a real (type ki), the S matrix element 2,3
+ * s34 -- a real (type ki), the S matrix element 3,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p2m_opp
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p2m_opp.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql6_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql6_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql6_f90.html (revision 119)
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql6.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql6.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql6"></a>
+<a name="robo29"></a><h2>src/integrals/four_point/function_4p_ql6 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql6
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql6, f4p_ql6_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql62ff4p5fql6"></a>
+<a name="robo197"></a><h2>src/integrals/four_point/function_4p_ql6/f4p_ql6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql6(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql62ff4p5fql65fc"></a>
+<a name="robo198"></a><h2>src/integrals/four_point/function_4p_ql6/f4p_ql6_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql6_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql6_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql6
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql6.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql7_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql7_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql7_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql7.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql7.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql7"></a>
+<a name="robo30"></a><h2>src/integrals/four_point/function_4p_ql7 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql7
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql7
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 7
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql7, f4p_ql7_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql72ff4p5fql7"></a>
+<a name="robo199"></a><h2>src/integrals/four_point/function_4p_ql7/f4p_ql7 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql7
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql7(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql72ff4p5fql75fc"></a>
+<a name="robo200"></a><h2>src/integrals/four_point/function_4p_ql7/f4p_ql7_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql7_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql7_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql7
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql7
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql7.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql8_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql8_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql8_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql8.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql8.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql8"></a>
+<a name="robo31"></a><h2>src/integrals/four_point/function_4p_ql8 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql8
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql8
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 8
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql8, f4p_ql8_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql82ff4p5fql8"></a>
+<a name="robo201"></a><h2>src/integrals/four_point/function_4p_ql8/f4p_ql8 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql8
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql8(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql82ff4p5fql85fc"></a>
+<a name="robo202"></a><h2>src/integrals/four_point/function_4p_ql8/f4p_ql8_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql8_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql8_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql8
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql8
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql8.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql9_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql9_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/integrals/four_point/function_4p_ql9_f90.html (revision 119)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../../robodoc.css" type="text/css" />
+<title>./../src/integrals/four_point/function_4p_ql9.f90</title>
+<!-- Source: ./../src/integrals/four_point/function_4p_ql9.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../../masterindex.html#top">Index</a>
+<a class="menuitem" href="../../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql9"></a>
+<a name="robo32"></a><h2>src/integrals/four_point/function_4p_ql9 [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module function_4p_ql9
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use function_4p_ql9
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module computes the n-dimensional four point function
+ corresponding to QCDLoop box number 9
+ implemented only without Feynman parameters in the numerator!
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions f4p_ql9, f4p_ql9_c
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * numerical_evaluation (src/numerical/<a href="../../numerical/mod_numeric_f90.html#robo_top_of_doc">mod_numeric.f90</a>)
+ * dilogarithme (src/module/<a href="../../module/zdilog_f90.html#robo_top_of_doc">zdilog.f90</a>)
+ * logarithme (src/module/<a href="../../module/z_log_f90.html#robo_top_of_doc">z_log.f90</a>)
+ * constante (src/module/<a href="../../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * parametre (src/module/<a href="../../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * array (src/module/<a href="../../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * translate (src/module/<a href="../../module/translate_f90.html#robo_top_of_doc">translate.f90</a>)
+ * more_integ_info (src/module/more_integ_info.f90)
+</pre>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql92ff4p5fql9"></a>
+<a name="robo203"></a><h2>src/integrals/four_point/function_4p_ql9/f4p_ql9 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql9
+</pre>
+<p class="item_name">USAGE</p>
+<pre> real_dim_4 = f4p_ql9(dim,s1,s2,s3,s4,s12,s23,m1s,m2s,m3s,m4s,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> computes the n-dimensional four point function
+ with 1 internal mass and two massive on-shell legs,
+ corresponding to QCDLoop box number 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character , dim="n" (4-2*eps) - dimensional
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+
+ Be careful that, in this function, the arguments par1, par2, par3 and par4
+ are mandatory, otherwise use the generic four point function f4p_np2 (f4p_np4).
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of four reals (type ki) corresponding to the
+ real imaginary part of 1/epsilon coefficient, real, imaginary part of the
+ finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fintegrals2ffour5fpoint2ffunction5f4p5fql92ff4p5fql95fc"></a>
+<a name="robo204"></a><h2>src/integrals/four_point/function_4p_ql9/f4p_ql9_c [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function f4p_ql9_c
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex_dim_4 = f4p_ql9_c(dim,s24,s13,s23,s34,par1,par2,par3,par4,mu2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function also computes the function f4p_ql9
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * dim -- a character, dim="n"
+ * s12 -- a real (type ki), the S matrix element 2,4 +m1s+m2s
+ * s23 -- a real (type ki), the S matrix element 2,3 +m2s+m3s
+ * s1 -- a real (type ki), the S matrix element 1,4
+ * s2 -- a real (type ki), the S matrix element 2,1
+ * s3 -- a real (type ki), the S matrix element 3,2
+ * s4 -- a real (type ki), the S matrix element 4,3
+ * m1s -- a real (type ki), -1/2*the S matrix element 1,1
+ * m2s -- a real (type ki), -1/2*the S matrix element 2,2
+ * m3s -- a real (type ki), -1/2*the S matrix element 3,3
+ * m4s -- a real (type ki), -1/2*the S matrix element 4,4
+ * par1 -- an integer, the label of the fourth Feynman parameter, if none, put 0
+ * par2 -- an integer, the label of the third Feynman parameter, if none, put 0
+ * par3 -- an integer, the label of the second Feynman parameter, if none, put 0
+ * par4 -- an integer, the label of the first Feynman parameter, if none, put 0
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> this function returns an array of two complexs (type ki) corresponding to the
+ 1/epsilon coefficient and the finite part (as epsilon --&gt; 0)
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> see function f4p_ql9
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/integrals/four_point/function_4p_ql9.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/robo_types.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/robo_types.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/robo_types.html (revision 119)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Types</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="./toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="./masterindex.html#top">Index</a>
+<a class="menuitem" href="./robo_generics.html#top">Generics</a>
+<a class="menuitem" href="./robo_functions.html#top">Functions</a>
+<a class="menuitem" href="./robo_modules.html#top">Modules</a>
+<a class="menuitem" href="#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<h1>Types</h1>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+<h2><a name="I"></a>I</h2><a href="./interface/tens_rec_f90.html#robo281" class="indexitem" >interface/tens_rec/coeff_type_1</a>
+<a href="./interface/tens_rec_f90.html#robo282" class="indexitem" >interface/tens_rec/coeff_type_2</a>
+<a href="./interface/tens_rec_f90.html#robo283" class="indexitem" >interface/tens_rec/coeff_type_3</a>
+<a href="./interface/tens_rec_f90.html#robo284" class="indexitem" >interface/tens_rec/coeff_type_4</a>
+<a href="./interface/tens_rec_f90.html#robo285" class="indexitem" >interface/tens_rec/coeff_type_5</a>
+<a href="./interface/tens_rec_f90.html#robo286" class="indexitem" >interface/tens_rec/coeff_type_6</a>
+<h2><a name="M"></a>M</h2><a href="./module/form_factor_type_f90.html#robo392" class="indexitem" >module/form_factor_type/eps</a>
+<a href="./module/form_factor_type_f90.html#robo393" class="indexitem" >module/form_factor_type/epsilon_type</a>
+<a href="./module/form_factor_type_f90.html#robo394" class="indexitem" >module/form_factor_type/form_factor</a>
+<a href="./module/s_matrix_type_f90.html#robo413" class="indexitem" >module/s_matrix_type/s_matrix_poly</a>
+<a href="./module/sortie_erreur_f90.html#robo416" class="indexitem" >module/sortie_erreur/erreur</a>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/robo_functions.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/robo_functions.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/robo_functions.html (revision 119)
@@ -0,0 +1,389 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Functions</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="./toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="./masterindex.html#top">Index</a>
+<a class="menuitem" href="./robo_generics.html#top">Generics</a>
+<a class="menuitem" href="#top">Functions</a>
+<a class="menuitem" href="./robo_modules.html#top">Modules</a>
+<a class="menuitem" href="./robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<h1>Functions</h1>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+<h2><a name="F"></a>F</h2><a href="./form_factor/form_factor_1p_f90.html#robo65" class="indexitem" >form_factor/form_factor_1p/a10_b</a>
+<a href="./form_factor/form_factor_1p_f90.html#robo66" class="indexitem" >form_factor/form_factor_1p/a10_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo67" class="indexitem" >form_factor/form_factor_2p/a20_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo68" class="indexitem" >form_factor/form_factor_2p/a20_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo69" class="indexitem" >form_factor/form_factor_2p/a21_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo70" class="indexitem" >form_factor/form_factor_2p/a21_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo71" class="indexitem" >form_factor/form_factor_2p/a22_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo72" class="indexitem" >form_factor/form_factor_2p/a22_s</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo73" class="indexitem" >form_factor/form_factor_2p/b22_b</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo74" class="indexitem" >form_factor/form_factor_2p/b22_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo75" class="indexitem" >form_factor/form_factor_3p/a30_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo76" class="indexitem" >form_factor/form_factor_3p/a30_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo77" class="indexitem" >form_factor/form_factor_3p/a31_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo78" class="indexitem" >form_factor/form_factor_3p/a31_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo79" class="indexitem" >form_factor/form_factor_3p/a32_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo80" class="indexitem" >form_factor/form_factor_3p/a32_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo81" class="indexitem" >form_factor/form_factor_3p/a33_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo82" class="indexitem" >form_factor/form_factor_3p/a33_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo83" class="indexitem" >form_factor/form_factor_3p/b32_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo84" class="indexitem" >form_factor/form_factor_3p/b32_s</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo85" class="indexitem" >form_factor/form_factor_3p/b33_b</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo86" class="indexitem" >form_factor/form_factor_3p/b33_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo87" class="indexitem" >form_factor/form_factor_4p/a40_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo88" class="indexitem" >form_factor/form_factor_4p/a40_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo89" class="indexitem" >form_factor/form_factor_4p/a41_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo90" class="indexitem" >form_factor/form_factor_4p/a41_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo91" class="indexitem" >form_factor/form_factor_4p/a42_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo92" class="indexitem" >form_factor/form_factor_4p/a42_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo93" class="indexitem" >form_factor/form_factor_4p/a43_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo94" class="indexitem" >form_factor/form_factor_4p/a43_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo95" class="indexitem" >form_factor/form_factor_4p/a44_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo96" class="indexitem" >form_factor/form_factor_4p/a44_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo97" class="indexitem" >form_factor/form_factor_4p/b42_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo98" class="indexitem" >form_factor/form_factor_4p/b42_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo99" class="indexitem" >form_factor/form_factor_4p/b43_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo100" class="indexitem" >form_factor/form_factor_4p/b43_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo101" class="indexitem" >form_factor/form_factor_4p/b44_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo102" class="indexitem" >form_factor/form_factor_4p/b44_s</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo103" class="indexitem" >form_factor/form_factor_4p/c44_b</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo104" class="indexitem" >form_factor/form_factor_4p/c44_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo105" class="indexitem" >form_factor/form_factor_5p/a50_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo106" class="indexitem" >form_factor/form_factor_5p/a50_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo107" class="indexitem" >form_factor/form_factor_5p/a51_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo108" class="indexitem" >form_factor/form_factor_5p/a51_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo109" class="indexitem" >form_factor/form_factor_5p/a52_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo110" class="indexitem" >form_factor/form_factor_5p/a52_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo111" class="indexitem" >form_factor/form_factor_5p/a53_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo112" class="indexitem" >form_factor/form_factor_5p/a53_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo113" class="indexitem" >form_factor/form_factor_5p/a54_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo114" class="indexitem" >form_factor/form_factor_5p/a54_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo115" class="indexitem" >form_factor/form_factor_5p/a55_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo116" class="indexitem" >form_factor/form_factor_5p/a55_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo117" class="indexitem" >form_factor/form_factor_5p/a61_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo118" class="indexitem" >form_factor/form_factor_5p/a61_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo119" class="indexitem" >form_factor/form_factor_5p/a62_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo120" class="indexitem" >form_factor/form_factor_5p/a62_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo121" class="indexitem" >form_factor/form_factor_5p/a63_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo122" class="indexitem" >form_factor/form_factor_5p/a63_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo123" class="indexitem" >form_factor/form_factor_5p/b52_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo124" class="indexitem" >form_factor/form_factor_5p/b52_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo125" class="indexitem" >form_factor/form_factor_5p/b53_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo126" class="indexitem" >form_factor/form_factor_5p/b53_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo127" class="indexitem" >form_factor/form_factor_5p/b54_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo128" class="indexitem" >form_factor/form_factor_5p/b54_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo129" class="indexitem" >form_factor/form_factor_5p/b55_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo130" class="indexitem" >form_factor/form_factor_5p/b55_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo131" class="indexitem" >form_factor/form_factor_5p/c54_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo132" class="indexitem" >form_factor/form_factor_5p/c54_s</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo133" class="indexitem" >form_factor/form_factor_5p/c55_b</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo134" class="indexitem" >form_factor/form_factor_5p/c55_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo135" class="indexitem" >form_factor/form_factor_6p/a60_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo136" class="indexitem" >form_factor/form_factor_6p/a60_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo137" class="indexitem" >form_factor/form_factor_6p/a64_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo138" class="indexitem" >form_factor/form_factor_6p/a64_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo139" class="indexitem" >form_factor/form_factor_6p/a65_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo140" class="indexitem" >form_factor/form_factor_6p/a65_s</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo141" class="indexitem" >form_factor/form_factor_6p/a66_b</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo142" class="indexitem" >form_factor/form_factor_6p/a66_s</a>
+<h2><a name="I"></a>I</h2><a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo143" class="indexitem" >integral/three_point/function_3p0m_1mi/f3p0m_1mi</a>
+<a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo144" class="indexitem" >integral/three_point/function_3p0m_1mi/f3p0m_1mi_np2</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo145" class="indexitem" >integral/three_point/function_3p1m/f3p1m</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo146" class="indexitem" >integral/three_point/function_3p1m/f3p1m_np2</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo147" class="indexitem" >integral/three_point/function_3p1m_1mi/f3p1m_1mi</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo148" class="indexitem" >integral/three_point/function_3p1m_1mi/f3p1m_1mi_np2</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo149" class="indexitem" >integral/three_point/function_3p1m_2mi/f3p1m_2mi</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo150" class="indexitem" >integral/three_point/function_3p1m_2mi/f3p1m_2mi_np2</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo151" class="indexitem" >integral/three_point/function_3p2m/f3p2m</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo152" class="indexitem" >integral/three_point/function_3p2m/f3p2m_np2</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo153" class="indexitem" >integral/three_point/function_3p2m_1mi/f3p2m_1mi</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo154" class="indexitem" >integral/three_point/function_3p2m_1mi/f3p2m_1mi_np2</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo155" class="indexitem" >integral/three_point/function_3p3m/f3p3m</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo156" class="indexitem" >integral/three_point/function_3p3m/f3p3m_c</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo157" class="indexitem" >integral/three_point/function_3p3m/i3_3mass</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo158" class="indexitem" >integral/three_point/function_3p_finite/f3p_finite</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo159" class="indexitem" >integral/three_point/function_3pC0i/C0</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo160" class="indexitem" >integral/three_point/function_3pC0i/f3p_finite_c</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo161" class="indexitem" >integral/two_point/function_2p0m/f2p0m_1mi</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo162" class="indexitem" >integral/two_point/function_2p0m/f2p0m_m1m2</a>
+<a href="./integrals/two_point/function_2p_m1m2_f90.html#robo163" class="indexitem" >integral/two_point/function_2p_m1m2/f2p_m1m2</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo164" class="indexitem" >integrals/four_point/function_4p1m/f1</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo165" class="indexitem" >integrals/four_point/function_4p1m/f4p1m</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo166" class="indexitem" >integrals/four_point/function_4p1m/f4p1m_c</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo167" class="indexitem" >integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo168" class="indexitem" >integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell_c</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo169" class="indexitem" >integrals/four_point/function_4p2m_adj/f2a</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo170" class="indexitem" >integrals/four_point/function_4p2m_adj/f4p2m_adj</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo171" class="indexitem" >integrals/four_point/function_4p2m_adj/f4p2m_adj_c</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo172" class="indexitem" >integrals/four_point/function_4p2m_opp/f2b</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo173" class="indexitem" >integrals/four_point/function_4p2m_opp/f4p2m_opp</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo174" class="indexitem" >integrals/four_point/function_4p2m_opp/f4p2m_opp_c</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo175" class="indexitem" >integrals/four_point/function_4p3m/f3</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo176" class="indexitem" >integrals/four_point/function_4p3m/f4p3m</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo177" class="indexitem" >integrals/four_point/function_4p3m/f4p3m_c</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo178" class="indexitem" >integrals/four_point/function_4p4m/f4</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo179" class="indexitem" >integrals/four_point/function_4p4m/f4p4m</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo180" class="indexitem" >integrals/four_point/function_4p4m/f4p4m_c</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo181" class="indexitem" >integrals/four_point/function_4p_ql10/f4p_ql10</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo182" class="indexitem" >integrals/four_point/function_4p_ql10/f4p_ql10_c</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo183" class="indexitem" >integrals/four_point/function_4p_ql10/f4p_ql10a_c</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo184" class="indexitem" >integrals/four_point/function_4p_ql10a/f4p_ql10a</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo185" class="indexitem" >integrals/four_point/function_4p_ql11/f4p_ql11</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo186" class="indexitem" >integrals/four_point/function_4p_ql11/f4p_ql11_c</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo187" class="indexitem" >integrals/four_point/function_4p_ql12/f4p_ql12</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo188" class="indexitem" >integrals/four_point/function_4p_ql12/f4p_ql12_c</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo189" class="indexitem" >integrals/four_point/function_4p_ql13/f4p_ql13</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo190" class="indexitem" >integrals/four_point/function_4p_ql13/f4p_ql13_c</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo191" class="indexitem" >integrals/four_point/function_4p_ql14/f4p_ql14</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo192" class="indexitem" >integrals/four_point/function_4p_ql14/f4p_ql14_c</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo193" class="indexitem" >integrals/four_point/function_4p_ql15/f4p_ql15</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo194" class="indexitem" >integrals/four_point/function_4p_ql15/f4p_ql15_c</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo195" class="indexitem" >integrals/four_point/function_4p_ql16/f4p_ql16</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo196" class="indexitem" >integrals/four_point/function_4p_ql16/f4p_ql16_c</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo197" class="indexitem" >integrals/four_point/function_4p_ql6/f4p_ql6</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo198" class="indexitem" >integrals/four_point/function_4p_ql6/f4p_ql6_c</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo199" class="indexitem" >integrals/four_point/function_4p_ql7/f4p_ql7</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo200" class="indexitem" >integrals/four_point/function_4p_ql7/f4p_ql7_c</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo201" class="indexitem" >integrals/four_point/function_4p_ql8/f4p_ql8</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo202" class="indexitem" >integrals/four_point/function_4p_ql8/f4p_ql8_c</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo203" class="indexitem" >integrals/four_point/function_4p_ql9/f4p_ql9</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo204" class="indexitem" >integrals/four_point/function_4p_ql9/f4p_ql9_c</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo205" class="indexitem" >integrals/four_point/generic_function_4p/f4p</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo206" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np2</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo207" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np2_numeric</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo208" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np2_sca</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo209" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np4</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo210" class="indexitem" >integrals/four_point/generic_function_4p/f4p_np4_numeric</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo211" class="indexitem" >integrals/four_point/generic_function_4p/f4p_sca</a>
+<a href="./integrals/one_point/generic_function_1p_f90.html#robo212" class="indexitem" >integrals/one_point/generic_function_1p/f1p</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo213" class="indexitem" >integrals/three_point/func_gn/ge</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo214" class="indexitem" >integrals/three_point/func_gn/gf</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo215" class="indexitem" >integrals/three_point/func_gn/gl</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo216" class="indexitem" >integrals/three_point/func_h0/h0d</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo217" class="indexitem" >integrals/three_point/func_h0/h0e</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo218" class="indexitem" >integrals/three_point/func_h0/h0f</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo219" class="indexitem" >integrals/three_point/func_he/he</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo220" class="indexitem" >integrals/three_point/func_he/he_c</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo221" class="indexitem" >integrals/three_point/func_he/he_gen</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo222" class="indexitem" >integrals/three_point/func_hf/hf</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo223" class="indexitem" >integrals/three_point/func_hf/hf_c</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo224" class="indexitem" >integrals/three_point/func_hf/hf_gen</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo225" class="indexitem" >integrals/three_point/generic_function_3p/f3p</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo226" class="indexitem" >integrals/three_point/generic_function_3p/f3p_np2</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo227" class="indexitem" >integrals/three_point/generic_function_3p/f3p_np2_sc</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo228" class="indexitem" >integrals/three_point/generic_function_3p/f3p_sc</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo229" class="indexitem" >integrals/two_point/generic_function_2p/f2p</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo230" class="indexitem" >integrals/two_point/generic_function_2p/f2p_np2</a>
+<a href="./interface/gb0_f90.html#robo231" class="indexitem" >interface/gb0</a>
+<a href="./interface/gb0_f90.html#robo232" class="indexitem" >interface/gb0i</a>
+<a href="./interface/gc0_f90.html#robo233" class="indexitem" >interface/gc0</a>
+<a href="./interface/gc0_f90.html#robo234" class="indexitem" >interface/gc0i</a>
+<a href="./interface/gd0_f90.html#robo235" class="indexitem" >interface/gd0</a>
+<a href="./interface/gd0_f90.html#robo236" class="indexitem" >interface/gd0i</a>
+<a href="./interface/ge0_f90.html#robo237" class="indexitem" >interface/ge0</a>
+<a href="./interface/ge0_f90.html#robo238" class="indexitem" >interface/ge0i</a>
+<a href="./interface/gf0_f90.html#robo239" class="indexitem" >interface/gf0</a>
+<a href="./interface/gf0_f90.html#robo240" class="indexitem" >interface/gf0i</a>
+<a href="./interface/tens_comb_f90.html#robo241" class="indexitem" >interface/tens_comb/contract2_1</a>
+<a href="./interface/tens_comb_f90.html#robo242" class="indexitem" >interface/tens_comb/contract2_2</a>
+<a href="./interface/tens_comb_f90.html#robo243" class="indexitem" >interface/tens_comb/contract2_2s1</a>
+<a href="./interface/tens_comb_f90.html#robo244" class="indexitem" >interface/tens_comb/contract3_1</a>
+<a href="./interface/tens_comb_f90.html#robo245" class="indexitem" >interface/tens_comb/contract3_2</a>
+<a href="./interface/tens_comb_f90.html#robo246" class="indexitem" >interface/tens_comb/contract3_2s1</a>
+<a href="./interface/tens_comb_f90.html#robo247" class="indexitem" >interface/tens_comb/contract3_3</a>
+<a href="./interface/tens_comb_f90.html#robo248" class="indexitem" >interface/tens_comb/contract3_3s1</a>
+<a href="./interface/tens_comb_f90.html#robo249" class="indexitem" >interface/tens_comb/contract4_1</a>
+<a href="./interface/tens_comb_f90.html#robo250" class="indexitem" >interface/tens_comb/contract4_2</a>
+<a href="./interface/tens_comb_f90.html#robo251" class="indexitem" >interface/tens_comb/contract4_2s1</a>
+<a href="./interface/tens_comb_f90.html#robo252" class="indexitem" >interface/tens_comb/contract4_3</a>
+<a href="./interface/tens_comb_f90.html#robo253" class="indexitem" >interface/tens_comb/contract4_3s1</a>
+<a href="./interface/tens_comb_f90.html#robo254" class="indexitem" >interface/tens_comb/contract4_4</a>
+<a href="./interface/tens_comb_f90.html#robo255" class="indexitem" >interface/tens_comb/contract4_4s1</a>
+<a href="./interface/tens_comb_f90.html#robo256" class="indexitem" >interface/tens_comb/contract4_4s2</a>
+<a href="./interface/tens_comb_f90.html#robo257" class="indexitem" >interface/tens_comb/contract5_1</a>
+<a href="./interface/tens_comb_f90.html#robo258" class="indexitem" >interface/tens_comb/contract5_2</a>
+<a href="./interface/tens_comb_f90.html#robo259" class="indexitem" >interface/tens_comb/contract5_3</a>
+<a href="./interface/tens_comb_f90.html#robo260" class="indexitem" >interface/tens_comb/contract5_4</a>
+<a href="./interface/tens_comb_f90.html#robo261" class="indexitem" >interface/tens_comb/contract5_5</a>
+<a href="./interface/tens_comb_f90.html#robo262" class="indexitem" >interface/tens_comb/contract6_1</a>
+<a href="./interface/tens_comb_f90.html#robo263" class="indexitem" >interface/tens_comb/contract6_2</a>
+<a href="./interface/tens_comb_f90.html#robo264" class="indexitem" >interface/tens_comb/contract6_3</a>
+<a href="./interface/tens_comb_f90.html#robo265" class="indexitem" >interface/tens_comb/contract6_4</a>
+<a href="./interface/tens_comb_f90.html#robo266" class="indexitem" >interface/tens_comb/contract6_5</a>
+<a href="./interface/tens_comb_f90.html#robo267" class="indexitem" >interface/tens_comb/contract6_6</a>
+<a href="./interface/tens_comb_f90.html#robo268" class="indexitem" >interface/tens_comb/contract_a_tensor_1</a>
+<a href="./interface/tens_comb_f90.html#robo269" class="indexitem" >interface/tens_comb/contract_a_tensor_2</a>
+<a href="./interface/tens_comb_f90.html#robo270" class="indexitem" >interface/tens_comb/contract_a_tensor_3</a>
+<a href="./interface/tens_comb_f90.html#robo271" class="indexitem" >interface/tens_comb/contract_a_tensor_4</a>
+<a href="./interface/tens_comb_f90.html#robo272" class="indexitem" >interface/tens_comb/contract_a_tensor_5</a>
+<a href="./interface/tens_comb_f90.html#robo273" class="indexitem" >interface/tens_comb/contract_b_tensor_2</a>
+<a href="./interface/tens_comb_f90.html#robo274" class="indexitem" >interface/tens_comb/contract_b_tensor_3</a>
+<a href="./interface/tens_comb_f90.html#robo275" class="indexitem" >interface/tens_comb/contract_b_tensor_4</a>
+<a href="./interface/tens_comb_f90.html#robo276" class="indexitem" >interface/tens_comb/contract_b_tensor_5</a>
+<a href="./interface/tens_comb_f90.html#robo277" class="indexitem" >interface/tens_comb/contract_c_tensor_4</a>
+<a href="./interface/tens_comb_f90.html#robo278" class="indexitem" >interface/tens_comb/contract_c_tensor_5</a>
+<a href="./interface/tens_comb_f90.html#robo279" class="indexitem" >interface/tens_comb/evaluate_b</a>
+<a href="./interface/tens_comb_f90.html#robo280" class="indexitem" >interface/tens_comb/evaluate_s</a>
+<a href="./interface/tens_rec_f90.html#robo287" class="indexitem" >interface/tens_rec/ctenseval1</a>
+<a href="./interface/tens_rec_f90.html#robo288" class="indexitem" >interface/tens_rec/ctenseval1_1</a>
+<a href="./interface/tens_rec_f90.html#robo289" class="indexitem" >interface/tens_rec/ctenseval2</a>
+<a href="./interface/tens_rec_f90.html#robo290" class="indexitem" >interface/tens_rec/ctenseval2_1</a>
+<a href="./interface/tens_rec_f90.html#robo291" class="indexitem" >interface/tens_rec/ctenseval2_2</a>
+<a href="./interface/tens_rec_f90.html#robo292" class="indexitem" >interface/tens_rec/ctenseval3</a>
+<a href="./interface/tens_rec_f90.html#robo293" class="indexitem" >interface/tens_rec/ctenseval3_1</a>
+<a href="./interface/tens_rec_f90.html#robo294" class="indexitem" >interface/tens_rec/ctenseval3_2</a>
+<a href="./interface/tens_rec_f90.html#robo295" class="indexitem" >interface/tens_rec/ctenseval3_3</a>
+<a href="./interface/tens_rec_f90.html#robo296" class="indexitem" >interface/tens_rec/ctenseval4</a>
+<a href="./interface/tens_rec_f90.html#robo297" class="indexitem" >interface/tens_rec/ctenseval4_1</a>
+<a href="./interface/tens_rec_f90.html#robo298" class="indexitem" >interface/tens_rec/ctenseval4_2</a>
+<a href="./interface/tens_rec_f90.html#robo299" class="indexitem" >interface/tens_rec/ctenseval4_3</a>
+<a href="./interface/tens_rec_f90.html#robo300" class="indexitem" >interface/tens_rec/ctenseval4_4</a>
+<a href="./interface/tens_rec_f90.html#robo301" class="indexitem" >interface/tens_rec/ctenseval5</a>
+<a href="./interface/tens_rec_f90.html#robo302" class="indexitem" >interface/tens_rec/ctenseval5_1</a>
+<a href="./interface/tens_rec_f90.html#robo303" class="indexitem" >interface/tens_rec/ctenseval5_2</a>
+<a href="./interface/tens_rec_f90.html#robo304" class="indexitem" >interface/tens_rec/ctenseval5_3</a>
+<a href="./interface/tens_rec_f90.html#robo305" class="indexitem" >interface/tens_rec/ctenseval5_4</a>
+<a href="./interface/tens_rec_f90.html#robo306" class="indexitem" >interface/tens_rec/ctenseval6</a>
+<a href="./interface/tens_rec_f90.html#robo307" class="indexitem" >interface/tens_rec/ctenseval6_1</a>
+<a href="./interface/tens_rec_f90.html#robo308" class="indexitem" >interface/tens_rec/ctenseval6_2</a>
+<a href="./interface/tens_rec_f90.html#robo309" class="indexitem" >interface/tens_rec/ctenseval6_3</a>
+<a href="./interface/tens_rec_f90.html#robo310" class="indexitem" >interface/tens_rec/ctenseval6_4</a>
+<a href="./interface/tens_rec_f90.html#robo311" class="indexitem" >interface/tens_rec/print_coeffs_1</a>
+<a href="./interface/tens_rec_f90.html#robo312" class="indexitem" >interface/tens_rec/print_coeffs_2</a>
+<a href="./interface/tens_rec_f90.html#robo313" class="indexitem" >interface/tens_rec/print_coeffs_3</a>
+<a href="./interface/tens_rec_f90.html#robo314" class="indexitem" >interface/tens_rec/print_coeffs_4</a>
+<a href="./interface/tens_rec_f90.html#robo315" class="indexitem" >interface/tens_rec/print_coeffs_5</a>
+<a href="./interface/tens_rec_f90.html#robo316" class="indexitem" >interface/tens_rec/print_coeffs_6</a>
+<a href="./interface/tens_rec_f90.html#robo317" class="indexitem" >interface/tens_rec/reconstruct1</a>
+<a href="./interface/tens_rec_f90.html#robo318" class="indexitem" >interface/tens_rec/reconstruct2</a>
+<a href="./interface/tens_rec_f90.html#robo319" class="indexitem" >interface/tens_rec/reconstruct3</a>
+<a href="./interface/tens_rec_f90.html#robo320" class="indexitem" >interface/tens_rec/reconstruct4</a>
+<a href="./interface/tens_rec_f90.html#robo321" class="indexitem" >interface/tens_rec/reconstruct5</a>
+<a href="./interface/tens_rec_f90.html#robo322" class="indexitem" >interface/tens_rec/reconstruct6</a>
+<a href="./interface/tens_rec_f90.html#robo323" class="indexitem" >interface/tens_rec/solve1</a>
+<a href="./interface/tens_rec_f90.html#robo324" class="indexitem" >interface/tens_rec/solve1_1</a>
+<a href="./interface/tens_rec_f90.html#robo325" class="indexitem" >interface/tens_rec/solve2</a>
+<a href="./interface/tens_rec_f90.html#robo326" class="indexitem" >interface/tens_rec/solve2_1</a>
+<a href="./interface/tens_rec_f90.html#robo327" class="indexitem" >interface/tens_rec/solve2_2</a>
+<a href="./interface/tens_rec_f90.html#robo328" class="indexitem" >interface/tens_rec/solve3</a>
+<a href="./interface/tens_rec_f90.html#robo329" class="indexitem" >interface/tens_rec/solve3_1</a>
+<a href="./interface/tens_rec_f90.html#robo330" class="indexitem" >interface/tens_rec/solve3_2</a>
+<a href="./interface/tens_rec_f90.html#robo331" class="indexitem" >interface/tens_rec/solve3_3</a>
+<a href="./interface/tens_rec_f90.html#robo332" class="indexitem" >interface/tens_rec/solve4</a>
+<a href="./interface/tens_rec_f90.html#robo333" class="indexitem" >interface/tens_rec/solve4_1</a>
+<a href="./interface/tens_rec_f90.html#robo334" class="indexitem" >interface/tens_rec/solve4_2</a>
+<a href="./interface/tens_rec_f90.html#robo335" class="indexitem" >interface/tens_rec/solve4_3</a>
+<a href="./interface/tens_rec_f90.html#robo336" class="indexitem" >interface/tens_rec/solve4_4</a>
+<a href="./interface/tens_rec_f90.html#robo337" class="indexitem" >interface/tens_rec/solve5</a>
+<a href="./interface/tens_rec_f90.html#robo338" class="indexitem" >interface/tens_rec/solve5_1</a>
+<a href="./interface/tens_rec_f90.html#robo339" class="indexitem" >interface/tens_rec/solve5_2</a>
+<a href="./interface/tens_rec_f90.html#robo340" class="indexitem" >interface/tens_rec/solve5_3</a>
+<a href="./interface/tens_rec_f90.html#robo341" class="indexitem" >interface/tens_rec/solve5_4</a>
+<a href="./interface/tens_rec_f90.html#robo342" class="indexitem" >interface/tens_rec/solve6</a>
+<a href="./interface/tens_rec_f90.html#robo343" class="indexitem" >interface/tens_rec/solve6_1</a>
+<a href="./interface/tens_rec_f90.html#robo344" class="indexitem" >interface/tens_rec/solve6_2</a>
+<a href="./interface/tens_rec_f90.html#robo345" class="indexitem" >interface/tens_rec/solve6_3</a>
+<a href="./interface/tens_rec_f90.html#robo346" class="indexitem" >interface/tens_rec/solve6_4</a>
+<a href="./interface/tens_rec_f90.html#robo347" class="indexitem" >interface/tens_rec/tenseval1</a>
+<a href="./interface/tens_rec_f90.html#robo348" class="indexitem" >interface/tens_rec/tenseval1_1</a>
+<a href="./interface/tens_rec_f90.html#robo349" class="indexitem" >interface/tens_rec/tenseval2</a>
+<a href="./interface/tens_rec_f90.html#robo350" class="indexitem" >interface/tens_rec/tenseval2_1</a>
+<a href="./interface/tens_rec_f90.html#robo351" class="indexitem" >interface/tens_rec/tenseval2_2</a>
+<a href="./interface/tens_rec_f90.html#robo352" class="indexitem" >interface/tens_rec/tenseval3</a>
+<a href="./interface/tens_rec_f90.html#robo353" class="indexitem" >interface/tens_rec/tenseval3_1</a>
+<a href="./interface/tens_rec_f90.html#robo354" class="indexitem" >interface/tens_rec/tenseval3_2</a>
+<a href="./interface/tens_rec_f90.html#robo355" class="indexitem" >interface/tens_rec/tenseval3_3</a>
+<a href="./interface/tens_rec_f90.html#robo356" class="indexitem" >interface/tens_rec/tenseval4</a>
+<a href="./interface/tens_rec_f90.html#robo357" class="indexitem" >interface/tens_rec/tenseval4_1</a>
+<a href="./interface/tens_rec_f90.html#robo358" class="indexitem" >interface/tens_rec/tenseval4_2</a>
+<a href="./interface/tens_rec_f90.html#robo359" class="indexitem" >interface/tens_rec/tenseval4_3</a>
+<a href="./interface/tens_rec_f90.html#robo360" class="indexitem" >interface/tens_rec/tenseval4_4</a>
+<a href="./interface/tens_rec_f90.html#robo361" class="indexitem" >interface/tens_rec/tenseval5</a>
+<a href="./interface/tens_rec_f90.html#robo362" class="indexitem" >interface/tens_rec/tenseval5_1</a>
+<a href="./interface/tens_rec_f90.html#robo363" class="indexitem" >interface/tens_rec/tenseval5_2</a>
+<a href="./interface/tens_rec_f90.html#robo364" class="indexitem" >interface/tens_rec/tenseval5_3</a>
+<a href="./interface/tens_rec_f90.html#robo365" class="indexitem" >interface/tens_rec/tenseval5_4</a>
+<a href="./interface/tens_rec_f90.html#robo366" class="indexitem" >interface/tens_rec/tenseval6</a>
+<a href="./interface/tens_rec_f90.html#robo367" class="indexitem" >interface/tens_rec/tenseval6_1</a>
+<a href="./interface/tens_rec_f90.html#robo368" class="indexitem" >interface/tens_rec/tenseval6_2</a>
+<a href="./interface/tens_rec_f90.html#robo369" class="indexitem" >interface/tens_rec/tenseval6_3</a>
+<a href="./interface/tens_rec_f90.html#robo370" class="indexitem" >interface/tens_rec/tenseval6_4</a>
+<a href="./interface/tool_lt_to_golem_f90.html#robo371" class="indexitem" >interface/tool_lt_to_golem/extract</a>
+<h2><a name="K"></a>K</h2><a href="./kinematic/inverse_matrice_f90.html#robo372" class="indexitem" >kinematic/inverse_matrice/imprime_mat</a>
+<a href="./kinematic/inverse_matrice_f90.html#robo373" class="indexitem" >kinematic/inverse_matrice/inverse</a>
+<a href="./kinematic/matrice_s_f90.html#robo374" class="indexitem" >kinematic/inversion/b</a>
+<a href="./kinematic/matrice_s_f90.html#robo375" class="indexitem" >kinematic/inversion/hj</a>
+<a href="./kinematic/matrice_s_f90.html#robo376" class="indexitem" >kinematic/inversion/init_invs</a>
+<a href="./kinematic/matrice_s_f90.html#robo377" class="indexitem" >kinematic/inversion/inv_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo378" class="indexitem" >kinematic/inversion/norma_sumb</a>
+<a href="./kinematic/matrice_s_f90.html#robo379" class="indexitem" >kinematic/inversion/sumb</a>
+<a href="./kinematic/matrice_s_f90.html#robo380" class="indexitem" >kinematic/matrice_s/allocation_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo381" class="indexitem" >kinematic/matrice_s/deallocation_s</a>
+<a href="./kinematic/matrice_s_f90.html#robo382" class="indexitem" >kinematic/matrice_s/prepare_s_matrix</a>
+<h2><a name="M"></a>M</h2><a href="./module/cache_f90.html#robo383" class="indexitem" >module/cache/allocate_cache</a>
+<a href="./module/cache_f90.html#robo384" class="indexitem" >module/cache/clear_cache</a>
+<a href="./module/cache_f90.html#robo385" class="indexitem" >module/cache/reset_cache</a>
+<a href="./module/array_f90.html#robo386" class="indexitem" >module/countb</a>
+<a href="./module/zdilog_f90.html#robo387" class="indexitem" >module/dilogarithme/cdilog</a>
+<a href="./module/zdilog_f90.html#robo388" class="indexitem" >module/dilogarithme/zdilog</a>
+<a href="./module/equal_f90.html#robo389" class="indexitem" >module/equal/equal_real</a>
+<a href="./module/kronecker_f90.html#robo398" class="indexitem" >module/kronecker/delta</a>
+<a href="./module/kronecker_f90.html#robo399" class="indexitem" >module/kronecker/deltab</a>
+<a href="./module/array_f90.html#robo400" class="indexitem" >module/locateb</a>
+<a href="./module/z_log_f90.html#robo401" class="indexitem" >module/logarithme/q</a>
+<a href="./module/z_log_f90.html#robo402" class="indexitem" >module/logarithme/z_log</a>
+<a href="./module/z_log_f90.html#robo403" class="indexitem" >module/logarithme/z_log2</a>
+<a href="./module/multiply_div_f90.html#robo404" class="indexitem" >module/multiply_div/mult_div_c</a>
+<a href="./module/multiply_div_f90.html#robo405" class="indexitem" >module/multiply_div/mult_div_r</a>
+<a href="./module/array_f90.html#robo406" class="indexitem" >module/packb</a>
+<a href="./module/array_f90.html#robo407" class="indexitem" >module/pminus</a>
+<a href="./module/parametre_f90.html#robo408" class="indexitem" >module/print_parameter</a>
+<a href="./module/array_f90.html#robo409" class="indexitem" >module/punion</a>
+<a href="./module/s_matrix_type_f90.html#robo410" class="indexitem" >module/s_matrix_type/assign_s_matrix</a>
+<a href="./module/s_matrix_type_f90.html#robo411" class="indexitem" >module/s_matrix_type/fill_s_matrix</a>
+<a href="./module/s_matrix_type_f90.html#robo412" class="indexitem" >module/s_matrix_type/nullify_s_matrix</a>
+<a href="./module/s_matrix_type_f90.html#robo414" class="indexitem" >module/s_matrix_type/set_s_matrix_bits</a>
+<a href="./module/sortie_erreur_f90.html#robo415" class="indexitem" >module/sortie_erreur/catch_exception</a>
+<a href="./module/spinor_f90.html#robo417" class="indexitem" >module/spinor/bra</a>
+<a href="./module/spinor_f90.html#robo418" class="indexitem" >module/spinor/bra_ket</a>
+<a href="./module/spinor_f90.html#robo419" class="indexitem" >module/spinor/e_</a>
+<a href="./module/spinor_f90.html#robo420" class="indexitem" >module/spinor/eps_prod_eps</a>
+<a href="./module/spinor_f90.html#robo421" class="indexitem" >module/spinor/eps_prod_sca</a>
+<a href="./module/spinor_f90.html#robo422" class="indexitem" >module/spinor/ket</a>
+<a href="./module/spinor_f90.html#robo423" class="indexitem" >module/spinor/pslash</a>
+<a href="./module/spinor_f90.html#robo424" class="indexitem" >module/spinor/scalar</a>
+<a href="./module/translate_f90.html#robo425" class="indexitem" >module/translate/to_complex</a>
+<a href="./module/tri_f90.html#robo426" class="indexitem" >module/tri_croissant/exchange_param</a>
+<a href="./module/tri_f90.html#robo427" class="indexitem" >module/tri_croissant/shift_param</a>
+<a href="./module/tri_f90.html#robo428" class="indexitem" >module/tri_croissant/tri_int</a>
+<a href="./module/array_f90.html#robo429" class="indexitem" >module/unpackb</a>
+<h2><a name="N"></a>N</h2><a href="./numerical/mod_adapt_gauss_f90.html#robo430" class="indexitem" >numerical/adapt_gauss/adapt_gauss1</a>
+<a href="./numerical/mod_numeric_f90.html#robo431" class="indexitem" >numerical/numerical_evaluation/generic_eval_numer</a>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/robo_modules.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/robo_modules.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/robo_modules.html (revision 119)
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Modules</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="./toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="./masterindex.html#top">Index</a>
+<a class="menuitem" href="./robo_generics.html#top">Generics</a>
+<a class="menuitem" href="./robo_functions.html#top">Functions</a>
+<a class="menuitem" href="#top">Modules</a>
+<a class="menuitem" href="./robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<h1>Modules</h1>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+<h2><a name="F"></a>F</h2><a href="./form_factor/form_factor_1p_f90.html#robo0" class="indexitem" >form_factor/form_factor_1p</a>
+<a href="./form_factor/form_factor_2p_f90.html#robo1" class="indexitem" >form_factor/form_factor_2p</a>
+<a href="./form_factor/form_factor_3p_f90.html#robo2" class="indexitem" >form_factor/form_factor_3p</a>
+<a href="./form_factor/form_factor_4p_f90.html#robo3" class="indexitem" >form_factor/form_factor_4p</a>
+<a href="./form_factor/form_factor_5p_f90.html#robo4" class="indexitem" >form_factor/form_factor_5p</a>
+<a href="./form_factor/form_factor_6p_f90.html#robo5" class="indexitem" >form_factor/form_factor_6p</a>
+<h2><a name="I"></a>I</h2><a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo6" class="indexitem" >integral/three_point/function_3p0m_1mi</a>
+<a href="./integrals/three_point/function_3p1m_f90.html#robo7" class="indexitem" >integral/three_point/function_3p1m</a>
+<a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo8" class="indexitem" >integral/three_point/function_3p1m_1mi</a>
+<a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo9" class="indexitem" >integral/three_point/function_3p1m_2mi</a>
+<a href="./integrals/three_point/function_3p2m_f90.html#robo10" class="indexitem" >integral/three_point/function_3p2m</a>
+<a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo11" class="indexitem" >integral/three_point/function_3p2m_1mi</a>
+<a href="./integrals/three_point/function_3p3m_f90.html#robo12" class="indexitem" >integral/three_point/function_3p3m</a>
+<a href="./integrals/three_point/function_3p_finite_f90.html#robo13" class="indexitem" >integral/three_point/function_3pC0i</a>
+<a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo14" class="indexitem" >integral/two_point/function_2p0m</a>
+<a href="./integrals/two_point/function_2p_m1m2_f90.html#robo15" class="indexitem" >integral/two_point/function_2p_m1m2</a>
+<a href="./integrals/four_point/function_4p1m_f90.html#robo16" class="indexitem" >integrals/four_point/function_4p1m</a>
+<a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo17" class="indexitem" >integrals/four_point/function_4p2m_3mi_onshell</a>
+<a href="./integrals/four_point/function_4p2m_adj_f90.html#robo18" class="indexitem" >integrals/four_point/function_4p2m_adj</a>
+<a href="./integrals/four_point/function_4p2m_opp_f90.html#robo19" class="indexitem" >integrals/four_point/function_4p2m_opp</a>
+<a href="./integrals/four_point/function_4p3m_f90.html#robo20" class="indexitem" >integrals/four_point/function_4p3m</a>
+<a href="./integrals/four_point/function_4p4m_f90.html#robo21" class="indexitem" >integrals/four_point/function_4p4m</a>
+<a href="./integrals/four_point/function_4p_ql10_f90.html#robo22" class="indexitem" >integrals/four_point/function_4p_ql10</a>
+<a href="./integrals/four_point/function_4p_ql11_f90.html#robo23" class="indexitem" >integrals/four_point/function_4p_ql11</a>
+<a href="./integrals/four_point/function_4p_ql12_f90.html#robo24" class="indexitem" >integrals/four_point/function_4p_ql12</a>
+<a href="./integrals/four_point/function_4p_ql13_f90.html#robo25" class="indexitem" >integrals/four_point/function_4p_ql13</a>
+<a href="./integrals/four_point/function_4p_ql14_f90.html#robo26" class="indexitem" >integrals/four_point/function_4p_ql14</a>
+<a href="./integrals/four_point/function_4p_ql15_f90.html#robo27" class="indexitem" >integrals/four_point/function_4p_ql15</a>
+<a href="./integrals/four_point/function_4p_ql16_f90.html#robo28" class="indexitem" >integrals/four_point/function_4p_ql16</a>
+<a href="./integrals/four_point/function_4p_ql6_f90.html#robo29" class="indexitem" >integrals/four_point/function_4p_ql6</a>
+<a href="./integrals/four_point/function_4p_ql7_f90.html#robo30" class="indexitem" >integrals/four_point/function_4p_ql7</a>
+<a href="./integrals/four_point/function_4p_ql8_f90.html#robo31" class="indexitem" >integrals/four_point/function_4p_ql8</a>
+<a href="./integrals/four_point/function_4p_ql9_f90.html#robo32" class="indexitem" >integrals/four_point/function_4p_ql9</a>
+<a href="./integrals/four_point/generic_function_4p_f90.html#robo33" class="indexitem" >integrals/four_point/generic_function_4p</a>
+<a href="./integrals/three_point/mod_gn_f90.html#robo34" class="indexitem" >integrals/three_point/func_gn</a>
+<a href="./integrals/three_point/mod_h0_f90.html#robo35" class="indexitem" >integrals/three_point/func_h0</a>
+<a href="./integrals/three_point/mod_he_f90.html#robo36" class="indexitem" >integrals/three_point/func_he</a>
+<a href="./integrals/three_point/mod_hf_f90.html#robo37" class="indexitem" >integrals/three_point/func_hf</a>
+<a href="./integrals/three_point/generic_function_3p_f90.html#robo38" class="indexitem" >integrals/three_point/generic_function_3p</a>
+<a href="./integrals/one_point/generic_function_1p_f90.html#robo39" class="indexitem" >integrals/two_point/generic_function_1p</a>
+<a href="./integrals/two_point/generic_function_2p_f90.html#robo40" class="indexitem" >integrals/two_point/generic_function_2p</a>
+<a href="./interface/tens_comb_f90.html#robo41" class="indexitem" >interface/tens_comb</a>
+<a href="./interface/tens_rec_f90.html#robo42" class="indexitem" >interface/tens_rec</a>
+<a href="./interface/tensor_integrals_f90.html#robo43" class="indexitem" >interface/tensor_integrals</a>
+<a href="./interface/tool_lt_to_golem_f90.html#robo44" class="indexitem" >interface/tool_lt_to_golem</a>
+<h2><a name="K"></a>K</h2><a href="./kinematic/inverse_matrice_f90.html#robo45" class="indexitem" >kinematic/inverse_matrice</a>
+<a href="./kinematic/matrice_s_f90.html#robo46" class="indexitem" >kinematic/matrice_s</a>
+<h2><a name="M"></a>M</h2><a href="./module/array_f90.html#robo47" class="indexitem" >module/array</a>
+<a href="./module/cache_f90.html#robo48" class="indexitem" >module/cache</a>
+<a href="./module/constante_f90.html#robo49" class="indexitem" >module/constante</a>
+<a href="./module/zdilog_f90.html#robo50" class="indexitem" >module/dilogarithme</a>
+<a href="./module/equal_f90.html#robo51" class="indexitem" >module/equal</a>
+<a href="./module/form_factor_type_f90.html#robo52" class="indexitem" >module/form_factor_type</a>
+<a href="./module/kronecker_f90.html#robo53" class="indexitem" >module/kronecker</a>
+<a href="./module/z_log_f90.html#robo54" class="indexitem" >module/logarithme</a>
+<a href="./module/multiply_div_f90.html#robo55" class="indexitem" >module/multiply_div</a>
+<a href="./module/parametre_f90.html#robo56" class="indexitem" >module/parametre</a>
+<a href="./module/precision_golem_f90.html#robo57" class="indexitem" >module/precision_golem</a>
+<a href="./module/s_matrix_type_f90.html#robo58" class="indexitem" >module/s_matrix_type</a>
+<a href="./module/sortie_erreur_f90.html#robo59" class="indexitem" >module/sortie_erreur</a>
+<a href="./module/spinor_f90.html#robo60" class="indexitem" >module/spinor</a>
+<a href="./module/translate_f90.html#robo61" class="indexitem" >module/translate</a>
+<a href="./module/tri_f90.html#robo62" class="indexitem" >module/tri_croissant</a>
+<h2><a name="N"></a>N</h2><a href="./numerical/mod_adapt_gauss_f90.html#robo63" class="indexitem" >numerical/adapt_gauss</a>
+<a href="./numerical/mod_numeric_f90.html#robo64" class="indexitem" >numerical/numerical_evaluation</a>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/robodoc.css
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/robodoc.css (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/robodoc.css (revision 119)
@@ -0,0 +1,302 @@
+/****h* ROBODoc/ROBODoc Cascading Style Sheet
+ * FUNCTION
+ * This is the default cascading style sheet for documentation
+ * generated with ROBODoc.
+ * You can edit this file to your own liking and then use
+ * it with the option
+ * --css <filename>
+ *
+ * This style-sheet defines the following layout
+ * +----------------------------------------+
+ * | logo |
+ * +----------------------------------------+
+ * | extra |
+ * +----------------------------------------+
+ * | | navi- |
+ * | | gation |
+ * | content | |
+ * | | |
+ * +----------------------------------------+
+ * | footer |
+ * +----------------------------------------+
+ *
+ * This style-sheet is based on a style-sheet that was automatically
+ * generated with the Strange Banana stylesheet generator.
+ * See http://www.strangebanana.com/generator.aspx
+ *
+ ******
+ * $Id: html_generator.c,v 1.94 2008/06/17 11:49:27 gumpu Exp $
+ */
+
+body
+{
+ background-color: rgb(255,255,255);
+ color: rgb(98,84,55);
+ font-family: Arial, serif;
+ border-color: rgb(226,199,143);
+}
+
+pre
+{
+ font-family: monospace;
+ margin: 15px;
+ padding: 5px;
+ white-space: pre;
+ color: #000;
+}
+
+pre.source
+{
+ background-color: #ffe;
+ border: dashed #aa9 1px;
+}
+
+p
+{
+ margin:15px;
+}
+
+p.item_name
+{
+ font-weight: bolder;
+ margin:5px;
+ font-size: 120%;
+}
+
+#content
+{
+ font-size: 100%;
+ color: rgb(0,0,0);
+ background-color: rgb(255,255,255);
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-top-width: 0px;
+ border-bottom-width: 0px;
+ border-left-style: none;
+ border-right-style: none;
+ border-top-style: none;
+ border-bottom-style: none;
+ padding: 40px 31px 14px 17px;
+ border-color: rgb(0,0,0);
+ text-align: justify;
+}
+
+#navigation
+{
+ background-color: rgb(98,84,55);
+ color: rgb(230,221,202);
+ font-family: "Times New Roman", serif;
+ font-style: normal;
+ border-color: rgb(0,0,0);
+}
+
+a.menuitem
+{
+ font-size: 120%;
+ background-color: rgb(0,0,0);
+ color: rgb(195,165,100);
+ font-variant: normal;
+ text-transform: none;
+ font-weight: normal;
+ padding: 1px 8px 3px 1px;
+ margin-left: 5px;
+ margin-right: 5px;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ border-color: rgb(159,126,57);
+ text-align: right;
+}
+
+#logo, #logo a
+{
+ font-size: 130%;
+ background-color: rgb(198,178,135);
+ color: rgb(98,84,55);
+ font-family: Georgia, serif;
+ font-style: normal;
+ font-variant: normal;
+ text-transform: none;
+ font-weight: bold;
+ padding: 20px 18px 20px 18px;
+ border-color: rgb(255,255,255);
+ text-align: right;
+}
+
+#extra, #extra a
+{
+ font-size: 128%;
+ background-color: rgb(0,0,0);
+ color: rgb(230,221,202);
+ font-style: normal;
+ font-variant: normal;
+ text-transform: none;
+ font-weight: normal;
+ border-left-width: 0px;
+ border-right-width: 0px;
+ border-top-width: 0px;
+ border-bottom-width: 0px;
+ border-left-style: none;
+ border-right-style: none;
+ border-top-style: none;
+ border-bottom-style: none;
+ padding: 12px 12px 12px 12px;
+ border-color: rgb(195,165,100);
+ text-align: center;
+}
+
+#content a
+{
+ color: rgb(159,126,57);
+ text-decoration: none;
+}
+
+#content a:hover, #content a:active
+{
+ color: rgb(255,255,255);
+ background-color: rgb(159,126,57);
+}
+
+a.indexitem
+{
+ display: block;
+}
+
+h1, h2, h3, h4, h5, h6
+{
+ background-color: rgb(221,221,221);
+ font-family: Arial, serif;
+ font-style: normal;
+ font-variant: normal;
+ text-transform: none;
+ font-weight: normal;
+}
+
+h1
+{
+ font-size: 151%;
+}
+
+h2
+{
+ font-size: 142%;
+}
+
+h3
+{
+ font-size: 133%;
+}
+
+h4
+{
+ font-size: 124%;
+}
+
+h5
+{
+ font-size: 115%;
+}
+
+h6
+{
+ font-size: 106%;
+}
+
+#navigation a
+{
+ text-decoration: none;
+}
+
+.menuitem:hover
+{
+ background-color: rgb(195,165,100);
+ color: rgb(0,0,0);
+}
+
+#extra a
+{
+ text-decoration: none;
+}
+
+#logo a
+{
+ text-decoration: none;
+}
+
+#extra a:hover
+{
+}
+
+/* layout */
+#navigation
+{
+ width: 22%;
+ position: relative;
+ top: 0;
+ right: 0;
+ float: right;
+ text-align: center;
+ margin-left: 10px;
+}
+
+.menuitem {width: auto;}
+#content {width: auto;}
+.menuitem {display: block;}
+
+
+div#footer
+{
+ background-color: rgb(198,178,135);
+ color: rgb(98,84,55);
+ clear: left;
+ width: 100%;
+ font-size: 71%;
+}
+
+div#footer a
+{
+ background-color: rgb(198,178,135);
+ color: rgb(98,84,55);
+}
+
+div#footer p
+{
+ margin:0;
+ padding:5px 10px
+}
+
+span.keyword
+{
+ color: #00F;
+}
+
+span.comment
+{
+ color: #080;
+}
+
+span.quote
+{
+ color: #F00;
+}
+
+span.squote
+{
+ color: #F0F;
+}
+
+span.sign
+{
+ color: #008B8B;
+}
+
+span.line_number
+{
+ color: #808080;
+}
+
+@media print
+{
+ #navigation {display: none;}
+ #content {padding: 0px;}
+ #content a {text-decoration: underline;}
+}
Index: 95/branches/golem95_without_olo_cmake/doc/html/numerical/mod_adapt_gauss_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/numerical/mod_adapt_gauss_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/numerical/mod_adapt_gauss_f90.html (revision 119)
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/numerical/mod_adapt_gauss.f90</title>
+<!-- Source: ./../src/numerical/mod_adapt_gauss.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fnumerical2fadapt5fgauss"></a>
+<a name="robo63"></a><h2>src/numerical/adapt_gauss [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module adapt_gauss (file src/numerical/adapt_gauss.f90)
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use adapt_gauss
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains several routines for a one dimensional
+ integration using Gauss Kronrod method
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> The only subroutine which can be used by use association in adapt_gaus1,
+ all the other subroutines/functions of this module are private
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fnumerical2fadapt5fgauss2fadapt5fgauss1"></a>
+<a name="robo430"></a><h2>src/numerical/adapt_gauss/adapt_gauss1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine adapt_gauss1 (file src/numerical/adapt_gauss.f90)
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call adapt_gauss1(func,b_inf,b_sup,tol,rest,abserr)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine performs a one dimensional adaptative integration of the
+ function func between b_inf and b_sup using a Gaussian quadrature
+ with Kronrod polynomial. The integrand is assumed to be complex. For a
+ certain criterium (function test_error), the range of integration is split
+ into two. All the cells are put into a chained list whose element are of
+ type intervalle
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> this subroutine takes as inputs:
+ * func -- an external function as declared by the interface block
+ * b_inf -- a real (type ki), the lower bound of the integration range
+ * b_sup -- a real (type ki), the upper bound of the integration range
+ * tol -- a real (type ki), the tolerance asked by the user
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> no side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> it returns:
+ * rest -- a complex (type ki), the result of the integration
+ * abserr -- a complex (type ki), the absolute value of the estimated error
+</pre>
+<p class="item_name">EXAMPLE</p>
+<pre> to integrate a function f
+ between 0 and 1 with a tolerance of 0.0001
+ the result is put in result
+ and the relative error returned in error
+
+ call adapt_gauss1(f,0._ki,1._ki,1.e-4_ki,result,error)
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/numerical/mod_adapt_gauss.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/numerical/mod_numeric_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/numerical/mod_numeric_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/numerical/mod_numeric_f90.html (revision 119)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/numerical/mod_numeric.f90</title>
+<!-- Source: ./../src/numerical/mod_numeric.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fnumerical2fnumerical5fevaluation"></a>
+<a name="robo64"></a><h2>src/numerical/numerical_evaluation [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module numerical_evaluation
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use numerical_evaluation
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains a generic routine for a one dimensional integration.
+ Up to now, the routine used is adapt_gauss1 (in file <a href="./mod_adapt_gauss_f90.html#robo_top_of_doc">mod_adapt_gauss.f90</a>).
+ To add a new integration routine, wrap it in a module, load this module
+ in this file using use association and add a new if case in the routine generic_eval_numer
+ also modify the value of choix accordingly. Of course, do not forget to modify the
+ Makefile (or better the script configure,pl) in such a way that this new module is compiled
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> With this module, one can access to the routine generic_eval_numer
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * sortie_erreur (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * parametre (src/module/<a href="../module/parametre_f90.html#robo_top_of_doc">parametre.f90</a>)
+ * adapt_gauss (src/numerical/<a href="./mod_adapt_gauss_f90.html#robo_top_of_doc">mod_adapt_gauss.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fnumerical2fnumerical5fevaluation2fgeneric5feval5fnumer"></a>
+<a name="robo431"></a><h2>src/numerical/numerical_evaluation/generic_eval_numer [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine generic_eval_numer
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call generic_eval_numer(func,b_inf,b_sup,tol,rest,abserr)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Generic routine for the one dimensional integration.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * func -- an external function as declared by the interface block
+ * b_inf -- a real (type ki), the lower bound of the integration range
+ * b_sup -- a real (type ki), the upper bound of the integration range
+ * tol -- a real (type ki), the tolerance asked by the user
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> no side effects
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> * rest -- a complex (type ki), the result of the integration
+ * abserr -- a complex (type ki), the absolute value of the estimated error
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/numerical/mod_numeric.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/toc_index.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/toc_index.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/toc_index.html (revision 119)
@@ -0,0 +1,470 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Table of Contents</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="#top">Table of Contents</a>
+<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="./masterindex.html#top">Index</a>
+<a class="menuitem" href="./robo_generics.html#top">Generics</a>
+<a class="menuitem" href="./robo_functions.html#top">Functions</a>
+<a class="menuitem" href="./robo_modules.html#top">Modules</a>
+<a class="menuitem" href="./robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<h3>TABLE OF CONTENTS</h3>
+<ul>
+<li><a href="./form_factor/form_factor_1p_f90.html#robo0">src/form_factor/form_factor_1p</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo1">src/form_factor/form_factor_2p</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo2">src/form_factor/form_factor_3p</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo3">src/form_factor/form_factor_4p</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo4">src/form_factor/form_factor_5p</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo5">src/form_factor/form_factor_6p</a></li>
+<li><a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo6">src/integral/three_point/function_3p0m_1mi</a></li>
+<li><a href="./integrals/three_point/function_3p1m_f90.html#robo7">src/integral/three_point/function_3p1m</a></li>
+<li><a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo8">src/integral/three_point/function_3p1m_1mi</a></li>
+<li><a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo9">src/integral/three_point/function_3p1m_2mi</a></li>
+<li><a href="./integrals/three_point/function_3p2m_f90.html#robo10">src/integral/three_point/function_3p2m</a></li>
+<li><a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo11">src/integral/three_point/function_3p2m_1mi</a></li>
+<li><a href="./integrals/three_point/function_3p3m_f90.html#robo12">src/integral/three_point/function_3p3m</a></li>
+<li><a href="./integrals/three_point/function_3p_finite_f90.html#robo13">src/integral/three_point/function_3pC0i</a></li>
+<li><a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo14">src/integral/two_point/function_2p0m</a></li>
+<li><a href="./integrals/two_point/function_2p_m1m2_f90.html#robo15">src/integral/two_point/function_2p_m1m2</a></li>
+<li><a href="./integrals/four_point/function_4p1m_f90.html#robo16">src/integrals/four_point/function_4p1m</a></li>
+<li><a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo17">src/integrals/four_point/function_4p2m_3mi_onshell</a></li>
+<li><a href="./integrals/four_point/function_4p2m_adj_f90.html#robo18">src/integrals/four_point/function_4p2m_adj</a></li>
+<li><a href="./integrals/four_point/function_4p2m_opp_f90.html#robo19">src/integrals/four_point/function_4p2m_opp</a></li>
+<li><a href="./integrals/four_point/function_4p3m_f90.html#robo20">src/integrals/four_point/function_4p3m</a></li>
+<li><a href="./integrals/four_point/function_4p4m_f90.html#robo21">src/integrals/four_point/function_4p4m</a></li>
+<li><a href="./integrals/four_point/function_4p_ql10_f90.html#robo22">src/integrals/four_point/function_4p_ql10</a></li>
+<li><a href="./integrals/four_point/function_4p_ql11_f90.html#robo23">src/integrals/four_point/function_4p_ql11</a></li>
+<li><a href="./integrals/four_point/function_4p_ql12_f90.html#robo24">src/integrals/four_point/function_4p_ql12</a></li>
+<li><a href="./integrals/four_point/function_4p_ql13_f90.html#robo25">src/integrals/four_point/function_4p_ql13</a></li>
+<li><a href="./integrals/four_point/function_4p_ql14_f90.html#robo26">src/integrals/four_point/function_4p_ql14</a></li>
+<li><a href="./integrals/four_point/function_4p_ql15_f90.html#robo27">src/integrals/four_point/function_4p_ql15</a></li>
+<li><a href="./integrals/four_point/function_4p_ql16_f90.html#robo28">src/integrals/four_point/function_4p_ql16</a></li>
+<li><a href="./integrals/four_point/function_4p_ql6_f90.html#robo29">src/integrals/four_point/function_4p_ql6</a></li>
+<li><a href="./integrals/four_point/function_4p_ql7_f90.html#robo30">src/integrals/four_point/function_4p_ql7</a></li>
+<li><a href="./integrals/four_point/function_4p_ql8_f90.html#robo31">src/integrals/four_point/function_4p_ql8</a></li>
+<li><a href="./integrals/four_point/function_4p_ql9_f90.html#robo32">src/integrals/four_point/function_4p_ql9</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo33">src/integrals/four_point/generic_function_4p</a></li>
+<li><a href="./integrals/three_point/mod_gn_f90.html#robo34">src/integrals/three_point/func_gn</a></li>
+<li><a href="./integrals/three_point/mod_h0_f90.html#robo35">src/integrals/three_point/func_h0</a></li>
+<li><a href="./integrals/three_point/mod_he_f90.html#robo36">src/integrals/three_point/func_he</a></li>
+<li><a href="./integrals/three_point/mod_hf_f90.html#robo37">src/integrals/three_point/func_hf</a></li>
+<li><a href="./integrals/three_point/generic_function_3p_f90.html#robo38">src/integrals/three_point/generic_function_3p</a></li>
+<li><a href="./integrals/one_point/generic_function_1p_f90.html#robo39">src/integrals/two_point/generic_function_1p</a></li>
+<li><a href="./integrals/two_point/generic_function_2p_f90.html#robo40">src/integrals/two_point/generic_function_2p</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo41">src/interface/tens_comb</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo42">src/interface/tens_rec</a></li>
+<li><a href="./interface/tensor_integrals_f90.html#robo43">src/interface/tensor_integrals</a></li>
+<li><a href="./interface/tool_lt_to_golem_f90.html#robo44">src/interface/tool_lt_to_golem</a></li>
+<li><a href="./kinematic/inverse_matrice_f90.html#robo45">src/kinematic/inverse_matrice</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo46">src/kinematic/matrice_s</a></li>
+<li><a href="./module/array_f90.html#robo47">src/module/array</a></li>
+<li><a href="./module/cache_f90.html#robo48">src/module/cache</a></li>
+<li><a href="./module/constante_f90.html#robo49">src/module/constante</a></li>
+<li><a href="./module/zdilog_f90.html#robo50">src/module/dilogarithme</a></li>
+<li><a href="./module/equal_f90.html#robo51">src/module/equal</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo52">src/module/form_factor_type</a></li>
+<li><a href="./module/kronecker_f90.html#robo53">src/module/kronecker</a></li>
+<li><a href="./module/z_log_f90.html#robo54">src/module/logarithme</a></li>
+<li><a href="./module/multiply_div_f90.html#robo55">src/module/multiply_div</a></li>
+<li><a href="./module/parametre_f90.html#robo56">src/module/parametre</a></li>
+<li><a href="./module/precision_golem_f90.html#robo57">src/module/precision_golem</a></li>
+<li><a href="./module/s_matrix_type_f90.html#robo58">src/module/s_matrix_type</a></li>
+<li><a href="./module/sortie_erreur_f90.html#robo59">src/module/sortie_erreur</a></li>
+<li><a href="./module/spinor_f90.html#robo60">src/module/spinor</a></li>
+<li><a href="./module/translate_f90.html#robo61">src/module/translate</a></li>
+<li><a href="./module/tri_f90.html#robo62">src/module/tri_croissant</a></li>
+<li><a href="./numerical/mod_adapt_gauss_f90.html#robo63">src/numerical/adapt_gauss</a></li>
+<li><a href="./numerical/mod_numeric_f90.html#robo64">src/numerical/numerical_evaluation</a></li>
+<li><a href="./form_factor/form_factor_1p_f90.html#robo65">src/form_factor/form_factor_1p/a10_b</a></li>
+<li><a href="./form_factor/form_factor_1p_f90.html#robo66">src/form_factor/form_factor_1p/a10_s</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo67">src/form_factor/form_factor_2p/a20_b</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo68">src/form_factor/form_factor_2p/a20_s</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo69">src/form_factor/form_factor_2p/a21_b</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo70">src/form_factor/form_factor_2p/a21_s</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo71">src/form_factor/form_factor_2p/a22_b</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo72">src/form_factor/form_factor_2p/a22_s</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo73">src/form_factor/form_factor_2p/b22_b</a></li>
+<li><a href="./form_factor/form_factor_2p_f90.html#robo74">src/form_factor/form_factor_2p/b22_s</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo75">src/form_factor/form_factor_3p/a30_b</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo76">src/form_factor/form_factor_3p/a30_s</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo77">src/form_factor/form_factor_3p/a31_b</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo78">src/form_factor/form_factor_3p/a31_s</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo79">src/form_factor/form_factor_3p/a32_b</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo80">src/form_factor/form_factor_3p/a32_s</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo81">src/form_factor/form_factor_3p/a33_b</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo82">src/form_factor/form_factor_3p/a33_s</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo83">src/form_factor/form_factor_3p/b32_b</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo84">src/form_factor/form_factor_3p/b32_s</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo85">src/form_factor/form_factor_3p/b33_b</a></li>
+<li><a href="./form_factor/form_factor_3p_f90.html#robo86">src/form_factor/form_factor_3p/b33_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo87">src/form_factor/form_factor_4p/a40_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo88">src/form_factor/form_factor_4p/a40_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo89">src/form_factor/form_factor_4p/a41_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo90">src/form_factor/form_factor_4p/a41_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo91">src/form_factor/form_factor_4p/a42_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo92">src/form_factor/form_factor_4p/a42_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo93">src/form_factor/form_factor_4p/a43_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo94">src/form_factor/form_factor_4p/a43_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo95">src/form_factor/form_factor_4p/a44_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo96">src/form_factor/form_factor_4p/a44_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo97">src/form_factor/form_factor_4p/b42_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo98">src/form_factor/form_factor_4p/b42_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo99">src/form_factor/form_factor_4p/b43_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo100">src/form_factor/form_factor_4p/b43_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo101">src/form_factor/form_factor_4p/b44_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo102">src/form_factor/form_factor_4p/b44_s</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo103">src/form_factor/form_factor_4p/c44_b</a></li>
+<li><a href="./form_factor/form_factor_4p_f90.html#robo104">src/form_factor/form_factor_4p/c44_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo105">src/form_factor/form_factor_5p/a50_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo106">src/form_factor/form_factor_5p/a50_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo107">src/form_factor/form_factor_5p/a51_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo108">src/form_factor/form_factor_5p/a51_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo109">src/form_factor/form_factor_5p/a52_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo110">src/form_factor/form_factor_5p/a52_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo111">src/form_factor/form_factor_5p/a53_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo112">src/form_factor/form_factor_5p/a53_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo113">src/form_factor/form_factor_5p/a54_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo114">src/form_factor/form_factor_5p/a54_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo115">src/form_factor/form_factor_5p/a55_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo116">src/form_factor/form_factor_5p/a55_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo117">src/form_factor/form_factor_5p/a61_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo118">src/form_factor/form_factor_5p/a61_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo119">src/form_factor/form_factor_5p/a62_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo120">src/form_factor/form_factor_5p/a62_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo121">src/form_factor/form_factor_5p/a63_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo122">src/form_factor/form_factor_5p/a63_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo123">src/form_factor/form_factor_5p/b52_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo124">src/form_factor/form_factor_5p/b52_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo125">src/form_factor/form_factor_5p/b53_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo126">src/form_factor/form_factor_5p/b53_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo127">src/form_factor/form_factor_5p/b54_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo128">src/form_factor/form_factor_5p/b54_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo129">src/form_factor/form_factor_5p/b55_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo130">src/form_factor/form_factor_5p/b55_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo131">src/form_factor/form_factor_5p/c54_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo132">src/form_factor/form_factor_5p/c54_s</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo133">src/form_factor/form_factor_5p/c55_b</a></li>
+<li><a href="./form_factor/form_factor_5p_f90.html#robo134">src/form_factor/form_factor_5p/c55_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo135">src/form_factor/form_factor_6p/a60_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo136">src/form_factor/form_factor_6p/a60_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo137">src/form_factor/form_factor_6p/a64_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo138">src/form_factor/form_factor_6p/a64_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo139">src/form_factor/form_factor_6p/a65_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo140">src/form_factor/form_factor_6p/a65_s</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo141">src/form_factor/form_factor_6p/a66_b</a></li>
+<li><a href="./form_factor/form_factor_6p_f90.html#robo142">src/form_factor/form_factor_6p/a66_s</a></li>
+<li><a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo143">src/integral/three_point/function_3p0m_1mi/f3p0m_1mi</a></li>
+<li><a href="./integrals/three_point/function_3p0m_1mi_f90.html#robo144">src/integral/three_point/function_3p0m_1mi/f3p0m_1mi_np2</a></li>
+<li><a href="./integrals/three_point/function_3p1m_f90.html#robo145">src/integral/three_point/function_3p1m/f3p1m</a></li>
+<li><a href="./integrals/three_point/function_3p1m_f90.html#robo146">src/integral/three_point/function_3p1m/f3p1m_np2</a></li>
+<li><a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo147">src/integral/three_point/function_3p1m_1mi/f3p1m_1mi</a></li>
+<li><a href="./integrals/three_point/function_3p1m_1mi_f90.html#robo148">src/integral/three_point/function_3p1m_1mi/f3p1m_1mi_np2</a></li>
+<li><a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo149">src/integral/three_point/function_3p1m_2mi/f3p1m_2mi</a></li>
+<li><a href="./integrals/three_point/function_3p1m_2mi_f90.html#robo150">src/integral/three_point/function_3p1m_2mi/f3p1m_2mi_np2</a></li>
+<li><a href="./integrals/three_point/function_3p2m_f90.html#robo151">src/integral/three_point/function_3p2m/f3p2m</a></li>
+<li><a href="./integrals/three_point/function_3p2m_f90.html#robo152">src/integral/three_point/function_3p2m/f3p2m_np2</a></li>
+<li><a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo153">src/integral/three_point/function_3p2m_1mi/f3p2m_1mi</a></li>
+<li><a href="./integrals/three_point/function_3p2m_1mi_f90.html#robo154">src/integral/three_point/function_3p2m_1mi/f3p2m_1mi_np2</a></li>
+<li><a href="./integrals/three_point/function_3p3m_f90.html#robo155">src/integral/three_point/function_3p3m/f3p3m</a></li>
+<li><a href="./integrals/three_point/function_3p3m_f90.html#robo156">src/integral/three_point/function_3p3m/f3p3m_c</a></li>
+<li><a href="./integrals/three_point/function_3p3m_f90.html#robo157">src/integral/three_point/function_3p3m/i3_3mass</a></li>
+<li><a href="./integrals/three_point/function_3p_finite_f90.html#robo158">src/integral/three_point/function_3p_finite/f3p_finite</a></li>
+<li><a href="./integrals/three_point/function_3p_finite_f90.html#robo159">src/integral/three_point/function_3pC0i/C0</a></li>
+<li><a href="./integrals/three_point/function_3p_finite_f90.html#robo160">src/integral/three_point/function_3pC0i/f3p_finite_c</a></li>
+<li><a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo161">src/integral/two_point/function_2p0m/f2p0m_1mi</a></li>
+<li><a href="./integrals/two_point/function_2p0m_1mi_f90.html#robo162">src/integral/two_point/function_2p0m/f2p0m_m1m2</a></li>
+<li><a href="./integrals/two_point/function_2p_m1m2_f90.html#robo163">src/integral/two_point/function_2p_m1m2/f2p_m1m2</a></li>
+<li><a href="./integrals/four_point/function_4p1m_f90.html#robo164">src/integrals/four_point/function_4p1m/f1</a></li>
+<li><a href="./integrals/four_point/function_4p1m_f90.html#robo165">src/integrals/four_point/function_4p1m/f4p1m</a></li>
+<li><a href="./integrals/four_point/function_4p1m_f90.html#robo166">src/integrals/four_point/function_4p1m/f4p1m_c</a></li>
+<li><a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo167">src/integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell</a></li>
+<li><a href="./integrals/four_point/function_4p2m_3mi_onshell_f90.html#robo168">src/integrals/four_point/function_4p2m_3mi_onshell/f4p2m_3mi_onshell_c</a></li>
+<li><a href="./integrals/four_point/function_4p2m_adj_f90.html#robo169">src/integrals/four_point/function_4p2m_adj/f2a</a></li>
+<li><a href="./integrals/four_point/function_4p2m_adj_f90.html#robo170">src/integrals/four_point/function_4p2m_adj/f4p2m_adj</a></li>
+<li><a href="./integrals/four_point/function_4p2m_adj_f90.html#robo171">src/integrals/four_point/function_4p2m_adj/f4p2m_adj_c</a></li>
+<li><a href="./integrals/four_point/function_4p2m_opp_f90.html#robo172">src/integrals/four_point/function_4p2m_opp/f2b</a></li>
+<li><a href="./integrals/four_point/function_4p2m_opp_f90.html#robo173">src/integrals/four_point/function_4p2m_opp/f4p2m_opp</a></li>
+<li><a href="./integrals/four_point/function_4p2m_opp_f90.html#robo174">src/integrals/four_point/function_4p2m_opp/f4p2m_opp_c</a></li>
+<li><a href="./integrals/four_point/function_4p3m_f90.html#robo175">src/integrals/four_point/function_4p3m/f3</a></li>
+<li><a href="./integrals/four_point/function_4p3m_f90.html#robo176">src/integrals/four_point/function_4p3m/f4p3m</a></li>
+<li><a href="./integrals/four_point/function_4p3m_f90.html#robo177">src/integrals/four_point/function_4p3m/f4p3m_c</a></li>
+<li><a href="./integrals/four_point/function_4p4m_f90.html#robo178">src/integrals/four_point/function_4p4m/f4</a></li>
+<li><a href="./integrals/four_point/function_4p4m_f90.html#robo179">src/integrals/four_point/function_4p4m/f4p4m</a></li>
+<li><a href="./integrals/four_point/function_4p4m_f90.html#robo180">src/integrals/four_point/function_4p4m/f4p4m_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql10_f90.html#robo181">src/integrals/four_point/function_4p_ql10/f4p_ql10</a></li>
+<li><a href="./integrals/four_point/function_4p_ql10_f90.html#robo182">src/integrals/four_point/function_4p_ql10/f4p_ql10_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql10_f90.html#robo183">src/integrals/four_point/function_4p_ql10/f4p_ql10a_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql10_f90.html#robo184">src/integrals/four_point/function_4p_ql10a/f4p_ql10a</a></li>
+<li><a href="./integrals/four_point/function_4p_ql11_f90.html#robo185">src/integrals/four_point/function_4p_ql11/f4p_ql11</a></li>
+<li><a href="./integrals/four_point/function_4p_ql11_f90.html#robo186">src/integrals/four_point/function_4p_ql11/f4p_ql11_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql12_f90.html#robo187">src/integrals/four_point/function_4p_ql12/f4p_ql12</a></li>
+<li><a href="./integrals/four_point/function_4p_ql12_f90.html#robo188">src/integrals/four_point/function_4p_ql12/f4p_ql12_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql13_f90.html#robo189">src/integrals/four_point/function_4p_ql13/f4p_ql13</a></li>
+<li><a href="./integrals/four_point/function_4p_ql13_f90.html#robo190">src/integrals/four_point/function_4p_ql13/f4p_ql13_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql14_f90.html#robo191">src/integrals/four_point/function_4p_ql14/f4p_ql14</a></li>
+<li><a href="./integrals/four_point/function_4p_ql14_f90.html#robo192">src/integrals/four_point/function_4p_ql14/f4p_ql14_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql15_f90.html#robo193">src/integrals/four_point/function_4p_ql15/f4p_ql15</a></li>
+<li><a href="./integrals/four_point/function_4p_ql15_f90.html#robo194">src/integrals/four_point/function_4p_ql15/f4p_ql15_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql16_f90.html#robo195">src/integrals/four_point/function_4p_ql16/f4p_ql16</a></li>
+<li><a href="./integrals/four_point/function_4p_ql16_f90.html#robo196">src/integrals/four_point/function_4p_ql16/f4p_ql16_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql6_f90.html#robo197">src/integrals/four_point/function_4p_ql6/f4p_ql6</a></li>
+<li><a href="./integrals/four_point/function_4p_ql6_f90.html#robo198">src/integrals/four_point/function_4p_ql6/f4p_ql6_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql7_f90.html#robo199">src/integrals/four_point/function_4p_ql7/f4p_ql7</a></li>
+<li><a href="./integrals/four_point/function_4p_ql7_f90.html#robo200">src/integrals/four_point/function_4p_ql7/f4p_ql7_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql8_f90.html#robo201">src/integrals/four_point/function_4p_ql8/f4p_ql8</a></li>
+<li><a href="./integrals/four_point/function_4p_ql8_f90.html#robo202">src/integrals/four_point/function_4p_ql8/f4p_ql8_c</a></li>
+<li><a href="./integrals/four_point/function_4p_ql9_f90.html#robo203">src/integrals/four_point/function_4p_ql9/f4p_ql9</a></li>
+<li><a href="./integrals/four_point/function_4p_ql9_f90.html#robo204">src/integrals/four_point/function_4p_ql9/f4p_ql9_c</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo205">src/integrals/four_point/generic_function_4p/f4p</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo206">src/integrals/four_point/generic_function_4p/f4p_np2</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo207">src/integrals/four_point/generic_function_4p/f4p_np2_numeric</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo208">src/integrals/four_point/generic_function_4p/f4p_np2_sca</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo209">src/integrals/four_point/generic_function_4p/f4p_np4</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo210">src/integrals/four_point/generic_function_4p/f4p_np4_numeric</a></li>
+<li><a href="./integrals/four_point/generic_function_4p_f90.html#robo211">src/integrals/four_point/generic_function_4p/f4p_sca</a></li>
+<li><a href="./integrals/one_point/generic_function_1p_f90.html#robo212">src/integrals/one_point/generic_function_1p/f1p</a></li>
+<li><a href="./integrals/three_point/mod_gn_f90.html#robo213">src/integrals/three_point/func_gn/ge</a></li>
+<li><a href="./integrals/three_point/mod_gn_f90.html#robo214">src/integrals/three_point/func_gn/gf</a></li>
+<li><a href="./integrals/three_point/mod_gn_f90.html#robo215">src/integrals/three_point/func_gn/gl</a></li>
+<li><a href="./integrals/three_point/mod_h0_f90.html#robo216">src/integrals/three_point/func_h0/h0d</a></li>
+<li><a href="./integrals/three_point/mod_h0_f90.html#robo217">src/integrals/three_point/func_h0/h0e</a></li>
+<li><a href="./integrals/three_point/mod_h0_f90.html#robo218">src/integrals/three_point/func_h0/h0f</a></li>
+<li><a href="./integrals/three_point/mod_he_f90.html#robo219">src/integrals/three_point/func_he/he</a></li>
+<li><a href="./integrals/three_point/mod_he_f90.html#robo220">src/integrals/three_point/func_he/he_c</a></li>
+<li><a href="./integrals/three_point/mod_he_f90.html#robo221">src/integrals/three_point/func_he/he_gen</a></li>
+<li><a href="./integrals/three_point/mod_hf_f90.html#robo222">src/integrals/three_point/func_hf/hf</a></li>
+<li><a href="./integrals/three_point/mod_hf_f90.html#robo223">src/integrals/three_point/func_hf/hf_c</a></li>
+<li><a href="./integrals/three_point/mod_hf_f90.html#robo224">src/integrals/three_point/func_hf/hf_gen</a></li>
+<li><a href="./integrals/three_point/generic_function_3p_f90.html#robo225">src/integrals/three_point/generic_function_3p/f3p</a></li>
+<li><a href="./integrals/three_point/generic_function_3p_f90.html#robo226">src/integrals/three_point/generic_function_3p/f3p_np2</a></li>
+<li><a href="./integrals/three_point/generic_function_3p_f90.html#robo227">src/integrals/three_point/generic_function_3p/f3p_np2_sc</a></li>
+<li><a href="./integrals/three_point/generic_function_3p_f90.html#robo228">src/integrals/three_point/generic_function_3p/f3p_sc</a></li>
+<li><a href="./integrals/two_point/generic_function_2p_f90.html#robo229">src/integrals/two_point/generic_function_2p/f2p</a></li>
+<li><a href="./integrals/two_point/generic_function_2p_f90.html#robo230">src/integrals/two_point/generic_function_2p/f2p_np2</a></li>
+<li><a href="./interface/gb0_f90.html#robo231">src/interface/gb0</a></li>
+<li><a href="./interface/gb0_f90.html#robo232">src/interface/gb0i</a></li>
+<li><a href="./interface/gc0_f90.html#robo233">src/interface/gc0</a></li>
+<li><a href="./interface/gc0_f90.html#robo234">src/interface/gc0i</a></li>
+<li><a href="./interface/gd0_f90.html#robo235">src/interface/gd0</a></li>
+<li><a href="./interface/gd0_f90.html#robo236">src/interface/gd0i</a></li>
+<li><a href="./interface/ge0_f90.html#robo237">src/interface/ge0</a></li>
+<li><a href="./interface/ge0_f90.html#robo238">src/interface/ge0i</a></li>
+<li><a href="./interface/gf0_f90.html#robo239">src/interface/gf0</a></li>
+<li><a href="./interface/gf0_f90.html#robo240">src/interface/gf0i</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo241">src/interface/tens_comb/contract2_1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo242">src/interface/tens_comb/contract2_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo243">src/interface/tens_comb/contract2_2s1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo244">src/interface/tens_comb/contract3_1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo245">src/interface/tens_comb/contract3_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo246">src/interface/tens_comb/contract3_2s1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo247">src/interface/tens_comb/contract3_3</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo248">src/interface/tens_comb/contract3_3s1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo249">src/interface/tens_comb/contract4_1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo250">src/interface/tens_comb/contract4_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo251">src/interface/tens_comb/contract4_2s1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo252">src/interface/tens_comb/contract4_3</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo253">src/interface/tens_comb/contract4_3s1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo254">src/interface/tens_comb/contract4_4</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo255">src/interface/tens_comb/contract4_4s1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo256">src/interface/tens_comb/contract4_4s2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo257">src/interface/tens_comb/contract5_1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo258">src/interface/tens_comb/contract5_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo259">src/interface/tens_comb/contract5_3</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo260">src/interface/tens_comb/contract5_4</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo261">src/interface/tens_comb/contract5_5</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo262">src/interface/tens_comb/contract6_1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo263">src/interface/tens_comb/contract6_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo264">src/interface/tens_comb/contract6_3</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo265">src/interface/tens_comb/contract6_4</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo266">src/interface/tens_comb/contract6_5</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo267">src/interface/tens_comb/contract6_6</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo268">src/interface/tens_comb/contract_a_tensor_1</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo269">src/interface/tens_comb/contract_a_tensor_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo270">src/interface/tens_comb/contract_a_tensor_3</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo271">src/interface/tens_comb/contract_a_tensor_4</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo272">src/interface/tens_comb/contract_a_tensor_5</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo273">src/interface/tens_comb/contract_b_tensor_2</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo274">src/interface/tens_comb/contract_b_tensor_3</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo275">src/interface/tens_comb/contract_b_tensor_4</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo276">src/interface/tens_comb/contract_b_tensor_5</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo277">src/interface/tens_comb/contract_c_tensor_4</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo278">src/interface/tens_comb/contract_c_tensor_5</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo279">src/interface/tens_comb/evaluate_b</a></li>
+<li><a href="./interface/tens_comb_f90.html#robo280">src/interface/tens_comb/evaluate_s</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo281">src/interface/tens_rec/coeff_type_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo282">src/interface/tens_rec/coeff_type_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo283">src/interface/tens_rec/coeff_type_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo284">src/interface/tens_rec/coeff_type_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo285">src/interface/tens_rec/coeff_type_5</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo286">src/interface/tens_rec/coeff_type_6</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo287">src/interface/tens_rec/ctenseval1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo288">src/interface/tens_rec/ctenseval1_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo289">src/interface/tens_rec/ctenseval2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo290">src/interface/tens_rec/ctenseval2_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo291">src/interface/tens_rec/ctenseval2_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo292">src/interface/tens_rec/ctenseval3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo293">src/interface/tens_rec/ctenseval3_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo294">src/interface/tens_rec/ctenseval3_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo295">src/interface/tens_rec/ctenseval3_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo296">src/interface/tens_rec/ctenseval4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo297">src/interface/tens_rec/ctenseval4_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo298">src/interface/tens_rec/ctenseval4_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo299">src/interface/tens_rec/ctenseval4_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo300">src/interface/tens_rec/ctenseval4_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo301">src/interface/tens_rec/ctenseval5</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo302">src/interface/tens_rec/ctenseval5_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo303">src/interface/tens_rec/ctenseval5_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo304">src/interface/tens_rec/ctenseval5_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo305">src/interface/tens_rec/ctenseval5_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo306">src/interface/tens_rec/ctenseval6</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo307">src/interface/tens_rec/ctenseval6_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo308">src/interface/tens_rec/ctenseval6_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo309">src/interface/tens_rec/ctenseval6_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo310">src/interface/tens_rec/ctenseval6_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo311">src/interface/tens_rec/print_coeffs_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo312">src/interface/tens_rec/print_coeffs_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo313">src/interface/tens_rec/print_coeffs_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo314">src/interface/tens_rec/print_coeffs_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo315">src/interface/tens_rec/print_coeffs_5</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo316">src/interface/tens_rec/print_coeffs_6</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo317">src/interface/tens_rec/reconstruct1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo318">src/interface/tens_rec/reconstruct2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo319">src/interface/tens_rec/reconstruct3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo320">src/interface/tens_rec/reconstruct4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo321">src/interface/tens_rec/reconstruct5</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo322">src/interface/tens_rec/reconstruct6</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo323">src/interface/tens_rec/solve1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo324">src/interface/tens_rec/solve1_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo325">src/interface/tens_rec/solve2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo326">src/interface/tens_rec/solve2_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo327">src/interface/tens_rec/solve2_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo328">src/interface/tens_rec/solve3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo329">src/interface/tens_rec/solve3_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo330">src/interface/tens_rec/solve3_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo331">src/interface/tens_rec/solve3_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo332">src/interface/tens_rec/solve4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo333">src/interface/tens_rec/solve4_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo334">src/interface/tens_rec/solve4_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo335">src/interface/tens_rec/solve4_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo336">src/interface/tens_rec/solve4_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo337">src/interface/tens_rec/solve5</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo338">src/interface/tens_rec/solve5_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo339">src/interface/tens_rec/solve5_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo340">src/interface/tens_rec/solve5_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo341">src/interface/tens_rec/solve5_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo342">src/interface/tens_rec/solve6</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo343">src/interface/tens_rec/solve6_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo344">src/interface/tens_rec/solve6_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo345">src/interface/tens_rec/solve6_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo346">src/interface/tens_rec/solve6_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo347">src/interface/tens_rec/tenseval1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo348">src/interface/tens_rec/tenseval1_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo349">src/interface/tens_rec/tenseval2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo350">src/interface/tens_rec/tenseval2_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo351">src/interface/tens_rec/tenseval2_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo352">src/interface/tens_rec/tenseval3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo353">src/interface/tens_rec/tenseval3_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo354">src/interface/tens_rec/tenseval3_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo355">src/interface/tens_rec/tenseval3_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo356">src/interface/tens_rec/tenseval4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo357">src/interface/tens_rec/tenseval4_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo358">src/interface/tens_rec/tenseval4_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo359">src/interface/tens_rec/tenseval4_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo360">src/interface/tens_rec/tenseval4_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo361">src/interface/tens_rec/tenseval5</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo362">src/interface/tens_rec/tenseval5_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo363">src/interface/tens_rec/tenseval5_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo364">src/interface/tens_rec/tenseval5_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo365">src/interface/tens_rec/tenseval5_4</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo366">src/interface/tens_rec/tenseval6</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo367">src/interface/tens_rec/tenseval6_1</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo368">src/interface/tens_rec/tenseval6_2</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo369">src/interface/tens_rec/tenseval6_3</a></li>
+<li><a href="./interface/tens_rec_f90.html#robo370">src/interface/tens_rec/tenseval6_4</a></li>
+<li><a href="./interface/tool_lt_to_golem_f90.html#robo371">src/interface/tool_lt_to_golem/extract</a></li>
+<li><a href="./kinematic/inverse_matrice_f90.html#robo372">src/kinematic/inverse_matrice/imprime_mat</a></li>
+<li><a href="./kinematic/inverse_matrice_f90.html#robo373">src/kinematic/inverse_matrice/inverse</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo374">src/kinematic/inversion/b</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo375">src/kinematic/inversion/hj</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo376">src/kinematic/inversion/init_invs</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo377">src/kinematic/inversion/inv_s</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo378">src/kinematic/inversion/norma_sumb</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo379">src/kinematic/inversion/sumb</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo380">src/kinematic/matrice_s/allocation_s</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo381">src/kinematic/matrice_s/deallocation_s</a></li>
+<li><a href="./kinematic/matrice_s_f90.html#robo382">src/kinematic/matrice_s/prepare_s_matrix</a></li>
+<li><a href="./module/cache_f90.html#robo383">src/module/cache/allocate_cache</a></li>
+<li><a href="./module/cache_f90.html#robo384">src/module/cache/clear_cache</a></li>
+<li><a href="./module/cache_f90.html#robo385">src/module/cache/reset_cache</a></li>
+<li><a href="./module/array_f90.html#robo386">src/module/countb</a></li>
+<li><a href="./module/zdilog_f90.html#robo387">src/module/dilogarithme/cdilog</a></li>
+<li><a href="./module/zdilog_f90.html#robo388">src/module/dilogarithme/zdilog</a></li>
+<li><a href="./module/equal_f90.html#robo389">src/module/equal/equal_real</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo390">src/module/form_factor_type/assignment</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo391">src/module/form_factor_type/division</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo392">src/module/form_factor_type/eps</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo393">src/module/form_factor_type/epsilon_type</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo394">src/module/form_factor_type/form_factor</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo395">src/module/form_factor_type/multiplication</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo396">src/module/form_factor_type/subtraction</a></li>
+<li><a href="./module/form_factor_type_f90.html#robo397">src/module/form_factor_type/sum</a></li>
+<li><a href="./module/kronecker_f90.html#robo398">src/module/kronecker/delta</a></li>
+<li><a href="./module/kronecker_f90.html#robo399">src/module/kronecker/deltab</a></li>
+<li><a href="./module/array_f90.html#robo400">src/module/locateb</a></li>
+<li><a href="./module/z_log_f90.html#robo401">src/module/logarithme/q</a></li>
+<li><a href="./module/z_log_f90.html#robo402">src/module/logarithme/z_log</a></li>
+<li><a href="./module/z_log_f90.html#robo403">src/module/logarithme/z_log2</a></li>
+<li><a href="./module/multiply_div_f90.html#robo404">src/module/multiply_div/mult_div_c</a></li>
+<li><a href="./module/multiply_div_f90.html#robo405">src/module/multiply_div/mult_div_r</a></li>
+<li><a href="./module/array_f90.html#robo406">src/module/packb</a></li>
+<li><a href="./module/array_f90.html#robo407">src/module/pminus</a></li>
+<li><a href="./module/parametre_f90.html#robo408">src/module/print_parameter</a></li>
+<li><a href="./module/array_f90.html#robo409">src/module/punion</a></li>
+<li><a href="./module/s_matrix_type_f90.html#robo410">src/module/s_matrix_type/assign_s_matrix</a></li>
+<li><a href="./module/s_matrix_type_f90.html#robo411">src/module/s_matrix_type/fill_s_matrix</a></li>
+<li><a href="./module/s_matrix_type_f90.html#robo412">src/module/s_matrix_type/nullify_s_matrix</a></li>
+<li><a href="./module/s_matrix_type_f90.html#robo413">src/module/s_matrix_type/s_matrix_poly</a></li>
+<li><a href="./module/s_matrix_type_f90.html#robo414">src/module/s_matrix_type/set_s_matrix_bits</a></li>
+<li><a href="./module/sortie_erreur_f90.html#robo415">src/module/sortie_erreur/catch_exception</a></li>
+<li><a href="./module/sortie_erreur_f90.html#robo416">src/module/sortie_erreur/erreur</a></li>
+<li><a href="./module/spinor_f90.html#robo417">src/module/spinor/bra</a></li>
+<li><a href="./module/spinor_f90.html#robo418">src/module/spinor/bra_ket</a></li>
+<li><a href="./module/spinor_f90.html#robo419">src/module/spinor/e_</a></li>
+<li><a href="./module/spinor_f90.html#robo420">src/module/spinor/eps_prod_eps</a></li>
+<li><a href="./module/spinor_f90.html#robo421">src/module/spinor/eps_prod_sca</a></li>
+<li><a href="./module/spinor_f90.html#robo422">src/module/spinor/ket</a></li>
+<li><a href="./module/spinor_f90.html#robo423">src/module/spinor/pslash</a></li>
+<li><a href="./module/spinor_f90.html#robo424">src/module/spinor/scalar</a></li>
+<li><a href="./module/translate_f90.html#robo425">src/module/translate/to_complex</a></li>
+<li><a href="./module/tri_f90.html#robo426">src/module/tri_croissant/exchange_param</a></li>
+<li><a href="./module/tri_f90.html#robo427">src/module/tri_croissant/shift_param</a></li>
+<li><a href="./module/tri_f90.html#robo428">src/module/tri_croissant/tri_int</a></li>
+<li><a href="./module/array_f90.html#robo429">src/module/unpackb</a></li>
+<li><a href="./numerical/mod_adapt_gauss_f90.html#robo430">src/numerical/adapt_gauss/adapt_gauss1</a></li>
+<li><a href="./numerical/mod_numeric_f90.html#robo431">src/numerical/numerical_evaluation/generic_eval_numer</a></li>
+</ul>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/gd0_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/gd0_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/gd0_f90.html (revision 119)
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/gd0.f90</title>
+<!-- Source: ./../src/interface/gd0.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2fgd0"></a>
+<a name="robo235"></a><h2>src/interface/gd0 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gd0
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gd0(s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the scalar LoopTools D0 function.
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s -- a real (type ki), (p1+p2)^2
+ * t -- a real (type ki), (p2+p3)^2
+ * m1 -- a real (type ki), mass^2 of propagator 4
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * m3 -- a real (type ki), mass^2 of propagator 2
+ * m4 -- a real (type ki), mass^2 of propagator 3
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_4p (src/form_factor/<a href="../form_factor/form_factor_4p_f90.html#robo_top_of_doc">form_factor_4p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+
+<hr />
+<a name="src2finterface2fgd0i"></a>
+<a name="robo236"></a><h2>src/interface/gd0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gd0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gd0i(idt,s1,s2,s3,s4,s,t,m1,m2,m3,m4,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the LoopTools D0i function.
+ The first argument is a character of length &lt;= 6
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length &lt;= 6, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s -- a real (type ki), (p1+p2)^2
+ * t -- a real (type ki), (p2+p3)^2
+ * m1 -- a real (type ki), mass^2 of propagator 4
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * m3 -- a real (type ki), mass^2 of propagator 2
+ * m4 -- a real (type ki), mass^2 of propagator 3
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_4p (src/form_factor/<a href="../form_factor/form_factor_4p_f90.html#robo_top_of_doc">form_factor_4p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * tool_lt_to_golem, only : extract (src/interface/<a href="./tool_lt_to_golem_f90.html#robo_top_of_doc">tool_lt_to_golem.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/gd0.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/ge0_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/ge0_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/ge0_f90.html (revision 119)
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/ge0.f90</title>
+<!-- Source: ./../src/interface/ge0.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2fge0"></a>
+<a name="robo237"></a><h2>src/interface/ge0 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ge0
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = ge0(s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the scalar E0 function.
+ The last two arguments are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s5 -- a real (type ki), p5^2
+ * s12 -- a real (type ki), (p1+p2)^2
+ * s23 -- a real (type ki), (p2+p3)^2
+ * s34 -- a real (type ki), (p3+p4)^2
+ * s45 -- a real (type ki), (p4+p5)^2
+ * s51 -- a real (type ki), (p5+p1)^2
+ * m1 -- a real (type ki), mass^2 of propagator 5
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * m3 -- a real (type ki), mass^2 of propagator 2
+ * m4 -- a real (type ki), mass^2 of propagator 3
+ * m5 -- a real (type ki), mass^2 of propagator 4
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_5p (src/form_factor/<a href="../form_factor/form_factor_5p_f90.html#robo_top_of_doc">form_factor_5p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2fge0i"></a>
+<a name="robo238"></a><h2>src/interface/ge0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ge0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = ge0i(idt,s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,m1,m2,m3,m4,m5,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the LoopTools E0i function.
+ The first argument is a character of length &lt;= 7
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length &lt;= 7, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s5 -- a real (type ki), p5^2
+ * s12 -- a real (type ki), (p1+p2)^2
+ * s23 -- a real (type ki), (p2+p3)^2
+ * s34 -- a real (type ki), (p3+p4)^2
+ * s45 -- a real (type ki), (p4+p5)^2
+ * s51 -- a real (type ki), (p5+p1)^2
+ * m1 -- a real (type ki), mass^2 of propagator 5
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * m3 -- a real (type ki), mass^2 of propagator 2
+ * m4 -- a real (type ki), mass^2 of propagator 3
+ * m5 -- a real (type ki), mass^2 of propagator 4
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_5p (src/form_factor/<a href="../form_factor/form_factor_5p_f90.html#robo_top_of_doc">form_factor_5p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * tool_lt_to_golem, only : extract (src/interface/<a href="./tool_lt_to_golem_f90.html#robo_top_of_doc">tool_lt_to_golem.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/ge0.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/gf0_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/gf0_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/gf0_f90.html (revision 119)
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/gf0.f90</title>
+<!-- Source: ./../src/interface/gf0.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2fgf0"></a>
+<a name="robo239"></a><h2>src/interface/gf0 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gf0
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gf0(s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the scalar F0 function.
+ The last two arguments are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s5 -- a real (type ki), p5^2
+ * s6 -- a real (type ki), p6^2
+ * s12 -- a real (type ki), (p1+p2)^2
+ * s23 -- a real (type ki), (p2+p3)^2
+ * s34 -- a real (type ki), (p3+p4)^2
+ * s45 -- a real (type ki), (p4+p5)^2
+ * s56 -- a real (type ki), (p5+p6)^2
+ * s61 -- a real (type ki), (p6+p1)^2
+ * s123 -- a real (type ki), (p1+p2+p3)^2
+ * s234 -- a real (type ki), (p2+p3+p4)^2
+ * s345 -- a real (type ki), (p3+p4+p5)^2
+ * m1 -- a real (type ki), mass^2 of propagator 6
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * m3 -- a real (type ki), mass^2 of propagator 2
+ * m4 -- a real (type ki), mass^2 of propagator 3
+ * m5 -- a real (type ki), mass^2 of propagator 4
+ * m6 -- a real (type ki), mass^2 of propagator 5
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_6p (src/form_factor/<a href="../form_factor/form_factor_6p_f90.html#robo_top_of_doc">form_factor_6p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2fgf0i"></a>
+<a name="robo240"></a><h2>src/interface/gf0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gf0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gf0i(idt,s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function is the LoopTools F0i function.
+ The first argument is a character of length &lt;= 8
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length &lt;= 8, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * s4 -- a real (type ki), p4^2
+ * s5 -- a real (type ki), p5^2
+ * s6 -- a real (type ki), p6^2
+ * s12 -- a real (type ki), (p1+p2)^2
+ * s23 -- a real (type ki), (p2+p3)^2
+ * s34 -- a real (type ki), (p3+p4)^2
+ * s45 -- a real (type ki), (p4+p5)^2
+ * s56 -- a real (type ki), (p5+p6)^2
+ * s61 -- a real (type ki), (p6+p1)^2
+ * s123 -- a real (type ki), (p1+p2+p3)^2
+ * s234 -- a real (type ki), (p2+p3+p4)^2
+ * s345 -- a real (type ki), (p3+p4+p5)^2
+ * m1 -- a real (type ki), mass of propagator 6
+ * m2 -- a real (type ki), mass of propagator 1
+ * m3 -- a real (type ki), mass of propagator 2
+ * m4 -- a real (type ki), mass of propagator 3
+ * m5 -- a real (type ki), mass of propagator 4
+ * m6 -- a real (type ki), mass of propagator 5
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_6p (src/form_factor/<a href="../form_factor/form_factor_6p_f90.html#robo_top_of_doc">form_factor_6p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * tool_lt_to_golem, only : extract (src/interface/<a href="./tool_lt_to_golem_f90.html#robo_top_of_doc">tool_lt_to_golem.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/gf0.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/tool_lt_to_golem_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/tool_lt_to_golem_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/tool_lt_to_golem_f90.html (revision 119)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/tool_lt_to_golem.f90</title>
+<!-- Source: ./../src/interface/tool_lt_to_golem.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2ftool5flt5fto5fgolem"></a>
+<a name="robo44"></a><h2>src/interface/tool_lt_to_golem [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module tool_lt_to_golem
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use tool_lt_to_golem
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains one function to build the interface between LoopTools
+ and Golem
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports one function:
+ * extract -- extract the numbers contained in a string
+</pre>
+<p class="item_name">USES</p>
+
+<hr />
+<a name="src2finterface2ftool5flt5fto5fgolem2fextract"></a>
+<a name="robo371"></a><h2>src/interface/tool_lt_to_golem/extract [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine extract
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call extract(chaine,tab_int)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This routine takes a string of characters, extracts the numbers and puts them into an array
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * chaine -- a character of unknown length
+ * tab_int -- an integer array of rank 1 whose extend is length(chaine),
+ it is filled with -1
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> no side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> it returns an integer array of rank 1
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/tool_lt_to_golem.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:15
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/tens_rec_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/tens_rec_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/tens_rec_f90.html (revision 119)
@@ -0,0 +1,2715 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/tens_rec.f90</title>
+<!-- Source: ./../src/interface/tens_rec.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2ftens5frec"></a>
+<a name="robo42"></a><h2>src/interface/tens_rec [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module tens_rec
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use tens_rec
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module offers the possibility of reconstructing the tensor
+ coefficients that have to be contracted with tensor integrals in
+ order to reproduce a diagram, which has been specified by a set
+ of denominators and a numerator N(q, mu^2). This module is typically
+ used in connection with the module tens_comb.
+
+ Please, note that this module is generated by a script and should not
+ be modified manually. In order to make changes to this module rerun
+ the Python script
+
+ tool/tens_rec/tens.py
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fcoeff5ftype5f1"></a>
+<a name="robo281"></a><h2>src/interface/tens_rec/coeff_type_1 [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Type coeff_type_1
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Holds the coefficients of a mixed rank tensor integral with maximum
+ tensor rank 1.
+
+ ENTRIES
+
+ * c0, ..., c1 -- coefficients of terms with 0,...,1
+ first index selects non-zero components of q
+ second index selects a specific monomial
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fcoeff5ftype5f2"></a>
+<a name="robo282"></a><h2>src/interface/tens_rec/coeff_type_2 [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Type coeff_type_2
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Holds the coefficients of a mixed rank tensor integral with maximum
+ tensor rank 2.
+
+ ENTRIES
+
+ * c0, ..., c2 -- coefficients of terms with 0,...,2
+ first index selects non-zero components of q
+ second index selects a specific monomial
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fcoeff5ftype5f3"></a>
+<a name="robo283"></a><h2>src/interface/tens_rec/coeff_type_3 [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Type coeff_type_3
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Holds the coefficients of a mixed rank tensor integral with maximum
+ tensor rank 3.
+
+ ENTRIES
+
+ * c0, ..., c3 -- coefficients of terms with 0,...,3
+ first index selects non-zero components of q
+ second index selects a specific monomial
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fcoeff5ftype5f4"></a>
+<a name="robo284"></a><h2>src/interface/tens_rec/coeff_type_4 [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Type coeff_type_4
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Holds the coefficients of a mixed rank tensor integral with maximum
+ tensor rank 4.
+
+ ENTRIES
+
+ * c0, ..., c4 -- coefficients of terms with 0,...,4
+ first index selects non-zero components of q
+ second index selects a specific monomial
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fcoeff5ftype5f5"></a>
+<a name="robo285"></a><h2>src/interface/tens_rec/coeff_type_5 [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Type coeff_type_5
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Holds the coefficients of a mixed rank tensor integral with maximum
+ tensor rank 5.
+
+ ENTRIES
+
+ * c0, ..., c4 -- coefficients of terms with 0,...,4
+ first index selects non-zero components of q
+ second index selects a specific monomial
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fcoeff5ftype5f6"></a>
+<a name="robo286"></a><h2>src/interface/tens_rec/coeff_type_6 [ Types ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_types.html#robo_top_of_doc">Types</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Type coeff_type_6
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Holds the coefficients of a mixed rank tensor integral with maximum
+ tensor rank 6.
+
+ ENTRIES
+
+ * c0, ..., c4 -- coefficients of terms with 0,...,4
+ first index selects non-zero components of q
+ second index selects a specific monomial
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval1"></a>
+<a name="robo287"></a><h2>src/interface/tens_rec/ctenseval1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval1(Q, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_1
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval15f1"></a>
+<a name="robo288"></a><h2>src/interface/tens_rec/ctenseval1_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval1_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval1_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval2"></a>
+<a name="robo289"></a><h2>src/interface/tens_rec/ctenseval2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval2(Q, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_2
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval25f1"></a>
+<a name="robo290"></a><h2>src/interface/tens_rec/ctenseval2_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval2_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval2_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(2) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval25f2"></a>
+<a name="robo291"></a><h2>src/interface/tens_rec/ctenseval2_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval2_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval2_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval3"></a>
+<a name="robo292"></a><h2>src/interface/tens_rec/ctenseval3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval3(Q, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_3
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval35f1"></a>
+<a name="robo293"></a><h2>src/interface/tens_rec/ctenseval3_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval3_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval3_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(3) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval35f2"></a>
+<a name="robo294"></a><h2>src/interface/tens_rec/ctenseval3_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval3_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval3_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(3) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval35f3"></a>
+<a name="robo295"></a><h2>src/interface/tens_rec/ctenseval3_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval3_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval3_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval4"></a>
+<a name="robo296"></a><h2>src/interface/tens_rec/ctenseval4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval4(Q, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_4
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval45f1"></a>
+<a name="robo297"></a><h2>src/interface/tens_rec/ctenseval4_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval4_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval4_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(4) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval45f2"></a>
+<a name="robo298"></a><h2>src/interface/tens_rec/ctenseval4_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval4_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval4_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(6) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval45f3"></a>
+<a name="robo299"></a><h2>src/interface/tens_rec/ctenseval4_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval4_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval4_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(4) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval45f4"></a>
+<a name="robo300"></a><h2>src/interface/tens_rec/ctenseval4_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval4_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval4_4(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 4 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(4): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 4 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval5"></a>
+<a name="robo301"></a><h2>src/interface/tens_rec/ctenseval5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval5(Q, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_5
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval55f1"></a>
+<a name="robo302"></a><h2>src/interface/tens_rec/ctenseval5_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval5_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval5_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(5) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval55f2"></a>
+<a name="robo303"></a><h2>src/interface/tens_rec/ctenseval5_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval5_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval5_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(10) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval55f3"></a>
+<a name="robo304"></a><h2>src/interface/tens_rec/ctenseval5_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval5_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval5_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(10) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval55f4"></a>
+<a name="robo305"></a><h2>src/interface/tens_rec/ctenseval5_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval5_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval5_4(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 4 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(4): the set of non-zero indices.
+ * coeffs -- an array of dimension(5) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 4 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval6"></a>
+<a name="robo306"></a><h2>src/interface/tens_rec/ctenseval6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval6(Q, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_6
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval65f1"></a>
+<a name="robo307"></a><h2>src/interface/tens_rec/ctenseval6_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval6_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval6_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(6) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval65f2"></a>
+<a name="robo308"></a><h2>src/interface/tens_rec/ctenseval6_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval6_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval6_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(15) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval65f3"></a>
+<a name="robo309"></a><h2>src/interface/tens_rec/ctenseval6_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval6_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval6_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(20) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fctenseval65f4"></a>
+<a name="robo310"></a><h2>src/interface/tens_rec/ctenseval6_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function ctenseval6_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = ctenseval6_4(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 4 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a complex vector of dimension(0:3)
+ * indices -- array of dimension(4): the set of non-zero indices.
+ * coeffs -- an array of dimension(15) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 4 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fprint5fcoeffs5f1"></a>
+<a name="robo311"></a><h2>src/interface/tens_rec/print_coeffs_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_coeffs_1
+
+ Visible through public interface print_coeffs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_coeffs(coeffs,unit=6)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Prints the coefficients of a numerator of maximum rank 1
+ in human readable form.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- a record of type coeff_type_1
+ * unit -- number of an open file, defaults to stdout (unit=6)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Prints to the given file
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fprint5fcoeffs5f2"></a>
+<a name="robo312"></a><h2>src/interface/tens_rec/print_coeffs_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_coeffs_2
+
+ Visible through public interface print_coeffs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_coeffs(coeffs,unit=6)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Prints the coefficients of a numerator of maximum rank 2
+ in human readable form.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- a record of type coeff_type_2
+ * unit -- number of an open file, defaults to stdout (unit=6)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Prints to the given file
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fprint5fcoeffs5f3"></a>
+<a name="robo313"></a><h2>src/interface/tens_rec/print_coeffs_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_coeffs_3
+
+ Visible through public interface print_coeffs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_coeffs(coeffs,unit=6)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Prints the coefficients of a numerator of maximum rank 3
+ in human readable form.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- a record of type coeff_type_3
+ * unit -- number of an open file, defaults to stdout (unit=6)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Prints to the given file
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fprint5fcoeffs5f4"></a>
+<a name="robo314"></a><h2>src/interface/tens_rec/print_coeffs_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_coeffs_4
+
+ Visible through public interface print_coeffs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_coeffs(coeffs,unit=6)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Prints the coefficients of a numerator of maximum rank 4
+ in human readable form.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- a record of type coeff_type_4
+ * unit -- number of an open file, defaults to stdout (unit=6)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Prints to the given file
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fprint5fcoeffs5f5"></a>
+<a name="robo315"></a><h2>src/interface/tens_rec/print_coeffs_5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_coeffs_5
+
+ Visible through public interface print_coeffs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_coeffs(coeffs,unit=6)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Prints the coefficients of a numerator of maximum rank 5
+ in human readable form.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- a record of type coeff_type_5
+ * unit -- number of an open file, defaults to stdout (unit=6)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Prints to the given file
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fprint5fcoeffs5f6"></a>
+<a name="robo316"></a><h2>src/interface/tens_rec/print_coeffs_6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine print_coeffs_6
+
+ Visible through public interface print_coeffs
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call print_coeffs(coeffs,unit=6)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Prints the coefficients of a numerator of maximum rank 6
+ in human readable form.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- a record of type coeff_type_6
+ * unit -- number of an open file, defaults to stdout (unit=6)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Prints to the given file
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2freconstruct1"></a>
+<a name="robo317"></a><h2>src/interface/tens_rec/reconstruct1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reconstruct1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reconstruct1(numeval, cm0)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Reconstructs all coefficients of a tensor integral of maximum rank 1,
+ including the coefficients in front of mu2 and mu2^2.
+
+ In the given case the rank is too low in order to allow for mu2 pieces.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * cm0 -- coefficients of type coeff_type_1, representing the
+ numerator
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Writes results to cm0.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2freconstruct2"></a>
+<a name="robo318"></a><h2>src/interface/tens_rec/reconstruct2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reconstruct2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reconstruct2(numeval, cm0, cm1, cm2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Reconstructs all coefficients of a tensor integral of maximum rank 2,
+ including the coefficients in front of mu2 and mu2^2.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * cm0 -- coefficients of type coeff_type_2, representing the
+ numerator at mu2=0
+ * cm1 -- coefficients of type complex(ki), representing the
+ tensor in front of mu2 [optional]
+ * cm2 -- coefficients of type complex(ki), representing the
+ tensor in front of mu2^2 [optional]
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+ only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+ is at most linear in mu2.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2freconstruct3"></a>
+<a name="robo319"></a><h2>src/interface/tens_rec/reconstruct3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reconstruct3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reconstruct3(numeval, cm0, cm1, cm2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Reconstructs all coefficients of a tensor integral of maximum rank 3,
+ including the coefficients in front of mu2 and mu2^2.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * cm0 -- coefficients of type coeff_type_3, representing the
+ numerator at mu2=0
+ * cm1 -- coefficients of type type(coeff_type_1), representing the
+ tensor in front of mu2 [optional]
+ * cm2 -- coefficients of type type(coeff_type_1), representing the
+ tensor in front of mu2^2 [optional]
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+ only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+ is at most linear in mu2.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2freconstruct4"></a>
+<a name="robo320"></a><h2>src/interface/tens_rec/reconstruct4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reconstruct4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reconstruct4(numeval, cm0, cm1, cm2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Reconstructs all coefficients of a tensor integral of maximum rank 4,
+ including the coefficients in front of mu2 and mu2^2.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * cm0 -- coefficients of type coeff_type_4, representing the
+ numerator at mu2=0
+ * cm1 -- coefficients of type type(coeff_type_2), representing the
+ tensor in front of mu2 [optional]
+ * cm2 -- coefficients of type type(coeff_type_2), representing the
+ tensor in front of mu2^2 [optional]
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+ only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+ is at most linear in mu2.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2freconstruct5"></a>
+<a name="robo321"></a><h2>src/interface/tens_rec/reconstruct5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reconstruct5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reconstruct5(numeval, cm0, cm1, cm2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Reconstructs all coefficients of a tensor integral of maximum rank 5,
+ including the coefficients in front of mu2 and mu2^2.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * cm0 -- coefficients of type coeff_type_5, representing the
+ numerator at mu2=0
+ * cm1 -- coefficients of type type(coeff_type_3), representing the
+ tensor in front of mu2 [optional]
+ * cm2 -- coefficients of type type(coeff_type_3), representing the
+ tensor in front of mu2^2 [optional]
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+ only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+ is at most linear in mu2.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2freconstruct6"></a>
+<a name="robo322"></a><h2>src/interface/tens_rec/reconstruct6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine reconstruct6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call reconstruct6(numeval, cm0, cm1, cm2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Reconstructs all coefficients of a tensor integral of maximum rank 6,
+ including the coefficients in front of mu2 and mu2^2.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * cm0 -- coefficients of type coeff_type_6, representing the
+ numerator at mu2=0
+ * cm1 -- coefficients of type type(coeff_type_4), representing the
+ tensor in front of mu2 [optional]
+ * cm2 -- coefficients of type type(coeff_type_4), representing the
+ tensor in front of mu2^2 [optional]
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> Writes results to cm0, cm1 and cm2 (if present). If cm1 and cm2 are omitted
+ only N(q,0) is evaluated. If cm2 is omitted it is assumed that the numerator
+ is at most linear in mu2.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve1"></a>
+<a name="robo323"></a><h2>src/interface/tens_rec/solve1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve1(numeval, mu2, coeffs, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Determines the tensor coefficients of a numerator for a fixed value
+ of mu^2 with maximum rank 1
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- function representing the numerator of the problem
+ * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+ * coeffs -- a record of type coeff_type_1 used to store the result
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve15f1"></a>
+<a name="robo324"></a><h2>src/interface/tens_rec/solve1_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve1_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve1_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q1_1.
+ The matrix mat1_1 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_1 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve2"></a>
+<a name="robo325"></a><h2>src/interface/tens_rec/solve2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve2(numeval, mu2, coeffs, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Determines the tensor coefficients of a numerator for a fixed value
+ of mu^2 with maximum rank 2
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- function representing the numerator of the problem
+ * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+ * coeffs -- a record of type coeff_type_2 used to store the result
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve25f1"></a>
+<a name="robo326"></a><h2>src/interface/tens_rec/solve2_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve2_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve2_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q2_1.
+ The matrix mat2_1 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_2 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve25f2"></a>
+<a name="robo327"></a><h2>src/interface/tens_rec/solve2_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve2_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve2_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q2_2.
+ The matrix mat2_2 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_2 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve3"></a>
+<a name="robo328"></a><h2>src/interface/tens_rec/solve3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve3(numeval, mu2, coeffs, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Determines the tensor coefficients of a numerator for a fixed value
+ of mu^2 with maximum rank 3
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- function representing the numerator of the problem
+ * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+ * coeffs -- a record of type coeff_type_3 used to store the result
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve35f1"></a>
+<a name="robo329"></a><h2>src/interface/tens_rec/solve3_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve3_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve3_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q3_1.
+ The matrix mat3_1 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_3 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve35f2"></a>
+<a name="robo330"></a><h2>src/interface/tens_rec/solve3_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve3_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve3_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q3_2.
+ The matrix mat3_2 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_3 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve35f3"></a>
+<a name="robo331"></a><h2>src/interface/tens_rec/solve3_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve3_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve3_3(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q3_3.
+ The matrix mat3_3 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_3 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve4"></a>
+<a name="robo332"></a><h2>src/interface/tens_rec/solve4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve4(numeval, mu2, coeffs, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Determines the tensor coefficients of a numerator for a fixed value
+ of mu^2 with maximum rank 4
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- function representing the numerator of the problem
+ * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+ * coeffs -- a record of type coeff_type_4 used to store the result
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve45f1"></a>
+<a name="robo333"></a><h2>src/interface/tens_rec/solve4_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve4_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve4_1(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q4_1.
+ The matrix mat4_1 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_4 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve45f2"></a>
+<a name="robo334"></a><h2>src/interface/tens_rec/solve4_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve4_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve4_2(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q4_2.
+ The matrix mat4_2 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_4 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve45f3"></a>
+<a name="robo335"></a><h2>src/interface/tens_rec/solve4_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve4_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve4_3(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q4_3.
+ The matrix mat4_3 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_4 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve45f4"></a>
+<a name="robo336"></a><h2>src/interface/tens_rec/solve4_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve4_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve4_4(numeval, indices, mu2, coeffs, idx, coeffs2)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q4_4.
+ The matrix mat4_4 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_4 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve5"></a>
+<a name="robo337"></a><h2>src/interface/tens_rec/solve5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve5(numeval, mu2, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Determines the tensor coefficients of a numerator for a fixed value
+ of mu^2 with maximum rank 5
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- function representing the numerator of the problem
+ * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+ * coeffs -- a record of type coeff_type_5 used to store the result
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve55f1"></a>
+<a name="robo338"></a><h2>src/interface/tens_rec/solve5_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve5_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve5_1(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q5_1.
+ The matrix mat5_1 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_5 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve55f2"></a>
+<a name="robo339"></a><h2>src/interface/tens_rec/solve5_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve5_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve5_2(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q5_2.
+ The matrix mat5_2 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_5 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve55f3"></a>
+<a name="robo340"></a><h2>src/interface/tens_rec/solve5_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve5_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve5_3(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q5_3.
+ The matrix mat5_3 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_5 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve55f4"></a>
+<a name="robo341"></a><h2>src/interface/tens_rec/solve5_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve5_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve5_4(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q5_4.
+ The matrix mat5_4 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_5 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve6"></a>
+<a name="robo342"></a><h2>src/interface/tens_rec/solve6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve6(numeval, mu2, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Determines the tensor coefficients of a numerator for a fixed value
+ of mu^2 with maximum rank 6
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- function representing the numerator of the problem
+ * mu2 -- fixed value of mu^2 for which the numerator is evaluated
+ * coeffs -- a record of type coeff_type_6 used to store the result
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve65f1"></a>
+<a name="robo343"></a><h2>src/interface/tens_rec/solve6_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve6_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve6_1(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q6_1.
+ The matrix mat6_1 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_6 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve65f2"></a>
+<a name="robo344"></a><h2>src/interface/tens_rec/solve6_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve6_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve6_2(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q6_2.
+ The matrix mat6_2 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_6 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve65f3"></a>
+<a name="robo345"></a><h2>src/interface/tens_rec/solve6_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve6_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve6_3(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q6_3.
+ The matrix mat6_3 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_6 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2fsolve65f4"></a>
+<a name="robo346"></a><h2>src/interface/tens_rec/solve6_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Subroutine solve6_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> call solve6_4(numeval, indices, mu2, coeffs, idx)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This subroutine solves a system generated by substituting the
+ non-zero components of q in the numerator function numeval(q,mu2)
+ for the values given in the array q6_4.
+ The matrix mat6_4 is the inverse matrix of the left hand side
+ of the original system.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- a function representing the numerator function
+ N(q, mu2) where q(0:3) is a real vector,
+ mu2 is a real number and the result of numeval is complex
+ * indices -- array of integers indicating the non-zero entries of q
+ * mu2 -- fixed value for mu2 passed to numeval
+ * coeffs -- coefficients of type coeff_type_6 to be solved for
+ * idx -- label indicating which entries in coeffs the given set
+ of indices corresponds to
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> No return value
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval1"></a>
+<a name="robo347"></a><h2>src/interface/tens_rec/tenseval1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval1(Q, coeffs, max_k)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_1
+ * max_k -- optional integer argument limiting the the reconstruction
+ to a subset of terms with no more than max_k components of q
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval15f1"></a>
+<a name="robo348"></a><h2>src/interface/tens_rec/tenseval1_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval1_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval1_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval2"></a>
+<a name="robo349"></a><h2>src/interface/tens_rec/tenseval2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval2(Q, coeffs, max_k)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_2
+ * max_k -- optional integer argument limiting the the reconstruction
+ to a subset of terms with no more than max_k components of q
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval25f1"></a>
+<a name="robo350"></a><h2>src/interface/tens_rec/tenseval2_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval2_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval2_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(2) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval25f2"></a>
+<a name="robo351"></a><h2>src/interface/tens_rec/tenseval2_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval2_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval2_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval3"></a>
+<a name="robo352"></a><h2>src/interface/tens_rec/tenseval3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval3(Q, coeffs, max_k)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_3
+ * max_k -- optional integer argument limiting the the reconstruction
+ to a subset of terms with no more than max_k components of q
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval35f1"></a>
+<a name="robo353"></a><h2>src/interface/tens_rec/tenseval3_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval3_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval3_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(3) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval35f2"></a>
+<a name="robo354"></a><h2>src/interface/tens_rec/tenseval3_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval3_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval3_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(3) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval35f3"></a>
+<a name="robo355"></a><h2>src/interface/tens_rec/tenseval3_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval3_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval3_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval4"></a>
+<a name="robo356"></a><h2>src/interface/tens_rec/tenseval4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval4(Q, coeffs, max_k)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_4
+ * max_k -- optional integer argument limiting the the reconstruction
+ to a subset of terms with no more than max_k components of q
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval45f1"></a>
+<a name="robo357"></a><h2>src/interface/tens_rec/tenseval4_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval4_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval4_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(4) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval45f2"></a>
+<a name="robo358"></a><h2>src/interface/tens_rec/tenseval4_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval4_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval4_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(6) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval45f3"></a>
+<a name="robo359"></a><h2>src/interface/tens_rec/tenseval4_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval4_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval4_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(4) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval45f4"></a>
+<a name="robo360"></a><h2>src/interface/tens_rec/tenseval4_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval4_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval4_4(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 4 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(4): the set of non-zero indices.
+ * coeffs -- an array of dimension(1) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 4 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval5"></a>
+<a name="robo361"></a><h2>src/interface/tens_rec/tenseval5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval5(Q, coeffs, max_k)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_5
+ * max_k -- optional integer argument limiting the the reconstruction
+ to a subset of terms with no more than max_k components of q
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval55f1"></a>
+<a name="robo362"></a><h2>src/interface/tens_rec/tenseval5_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval5_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval5_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(5) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval55f2"></a>
+<a name="robo363"></a><h2>src/interface/tens_rec/tenseval5_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval5_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval5_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(10) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval55f3"></a>
+<a name="robo364"></a><h2>src/interface/tens_rec/tenseval5_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval5_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval5_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(10) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval55f4"></a>
+<a name="robo365"></a><h2>src/interface/tens_rec/tenseval5_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval5_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval5_4(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 4 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(4): the set of non-zero indices.
+ * coeffs -- an array of dimension(5) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 4 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval6"></a>
+<a name="robo366"></a><h2>src/interface/tens_rec/tenseval6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval6(Q, coeffs, max_k)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes N(Q) from a set of tensor coefficients
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * coeffs -- a record of type coeff_type_6
+ * max_k -- optional integer argument limiting the the reconstruction
+ to a subset of terms with no more than max_k components of q
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) as reconstructed from the coefficients
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval65f1"></a>
+<a name="robo367"></a><h2>src/interface/tens_rec/tenseval6_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval6_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval6_1(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 1 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(1): the set of non-zero indices.
+ * coeffs -- an array of dimension(6) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 1 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval65f2"></a>
+<a name="robo368"></a><h2>src/interface/tens_rec/tenseval6_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval6_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval6_2(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 2 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(2): the set of non-zero indices.
+ * coeffs -- an array of dimension(15) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 2 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval65f3"></a>
+<a name="robo369"></a><h2>src/interface/tens_rec/tenseval6_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval6_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval6_3(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 3 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(3): the set of non-zero indices.
+ * coeffs -- an array of dimension(20) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 3 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5frec2ftenseval65f4"></a>
+<a name="robo370"></a><h2>src/interface/tens_rec/tenseval6_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function tenseval6_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> result = tenseval6_4(Q, indices, coeffs)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Recomputes the part of N(Q) from the coefficients where Q has exactly
+ 4 non-zero entries identified by the array indices.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * Q -- a real vector of dimension(0:3)
+ * indices -- array of dimension(4): the set of non-zero indices.
+ * coeffs -- an array of dimension(15) holding the coefficients.
+ as defined in the corresponding derived type.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The value of the part of N(q) coming from the terms where
+ exactly the 4 entries of q specified in indices are non-zero.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/tens_rec.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/tensor_integrals_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/tensor_integrals_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/tensor_integrals_f90.html (revision 119)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/tensor_integrals.f90</title>
+<!-- Source: ./../src/interface/tensor_integrals.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2ftensor5fintegrals"></a>
+<a name="robo43"></a><h2>src/interface/tensor_integrals [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module tensor_integrals
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use tensor_integrals
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module provides an interface which allows to compute
+ tensor integrals rather than form factors.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> This module exports the functions:
+ * init_smat -- initialize the s_smat from vectors and masses
+ * ti1 -- tensor tadpoles
+ * ti2 -- tensor bubbles
+ * ti3 -- tensor triangles
+ * ti4 -- tensor boxes
+ * ti5 -- tensor pentagons
+ * ti6 -- tensor hexagons
+</pre>
+<p class="item_name">USES</p>
+<pre> precision_golem
+ form_factor_type
+ form_factor_1p
+ form_factor_2p
+ form_factor_3p
+ form_factor_4p
+ form_factor_5p
+ form_factor_6p
+ cache
+ matrice_s
+ spinor
+ array
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/tensor_integrals.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:15
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/gb0_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/gb0_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/gb0_f90.html (revision 119)
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/gb0.f90</title>
+<!-- Source: ./../src/interface/gb0.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2fgb0"></a>
+<a name="robo231"></a><h2>src/interface/gb0 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gb0
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gb0(s1,m1,m2,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function corresponds to the scalar b0 function.
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real (type ki), p1^2
+ * m1 -- a real (type ki), mass^2 of propagator 2
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_2p (src/form_factor/<a href="../form_factor/form_factor_2p_f90.html#robo_top_of_doc">form_factor_2p.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2fgb0i"></a>
+<a name="robo232"></a><h2>src/interface/gb0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gb0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gb0i(idt,s1,m1,m2,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function corresponds to the LoopTools b0i function.
+ The first argument is a character of length &lt;= 4
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length &lt;= 4, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * m1 -- a real (type ki), mass of propagator 2
+ * m2 -- a real (type ki), mass of propagator 1
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_2p (src/form_factor/<a href="../form_factor/form_factor_2p_f90.html#robo_top_of_doc">form_factor_2p.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * tool_lt_to_golem, only : extract (src/interface/<a href="./tool_lt_to_golem_f90.html#robo_top_of_doc">tool_lt_to_golem.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/gb0.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/gc0_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/gc0_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/gc0_f90.html (revision 119)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/gc0.f90</title>
+<!-- Source: ./../src/interface/gc0.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2fgc0"></a>
+<a name="robo233"></a><h2>src/interface/gc0 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gc0
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gc0(s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function corresponds to the scalar C0 function.
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * m1 -- a real (type ki), mass^2 of propagator 3
+ * m2 -- a real (type ki), mass^2 of propagator 1
+ * m3 -- a real (type ki), mass^2 of propagator 2
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the pole coefficient
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_3p (src/form_factor/<a href="../form_factor/form_factor_3p_f90.html#robo_top_of_doc">form_factor_3p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2fgc0i"></a>
+<a name="robo234"></a><h2>src/interface/gc0i [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function gc0i
+</pre>
+<p class="item_name">USAGE</p>
+<pre> complex = gc0i(idt,s1,s2,s3,m1,m2,m3,mu2,eps_flag)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function corresponds to the LoopTools C0i function.
+ The first argument is a character of length &lt;= 5
+ There are two arguments more which are the renormalisation
+ scale squared and a flag which selects the coefficient of
+ the Laurent series in epsilon
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * idt -- a character of length &lt;= 5, the type of form factors
+ * s1 -- a real (type ki), p1^2
+ * s2 -- a real (type ki), p2^2
+ * s3 -- a real (type ki), p3^2
+ * m1 -- a real (type ki), mass of propagator 3
+ * m2 -- a real (type ki), mass of propagator 1
+ * m3 -- a real (type ki), mass of propagator 2
+ * mu2 -- a real (type ki), renormalisation scale squared
+ * eps_flag -- an integer, a flag to select the coefficient in front the power of epsilon
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> It returns a complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2 (eps_flag=-2),
+ the real part, imaginary part of the 1/epsilon term (eps_flag=-1) and the real part,
+ imaginary part of the constant term (eps_flag=0).
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s, only: set_ref, s_mat, allocation_s, deallocation_s, init_invs (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * form_factor_type, only: form_factor (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_3p (src/form_factor/<a href="../form_factor/form_factor_3p_f90.html#robo_top_of_doc">form_factor_3p.f90</a>)
+ * cache, only: allocate_cache, clear_cache (src/module/<a href="../module/cache_f90.html#robo_top_of_doc">cache.f90</a>)
+ * constante, only : b_null (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+ * tool_lt_to_golem, only : extract (src/interface/<a href="./tool_lt_to_golem_f90.html#robo_top_of_doc">tool_lt_to_golem.f90</a>)
+ * sortie_erreur, only : tab_erreur_par,catch_exception (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/gc0.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/interface/tens_comb_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/interface/tens_comb_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/interface/tens_comb_f90.html (revision 119)
@@ -0,0 +1,1227 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/interface/tens_comb.f90</title>
+<!-- Source: ./../src/interface/tens_comb.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2finterface2ftens5fcomb"></a>
+<a name="robo41"></a><h2>src/interface/tens_comb [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module tens_comb
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use tens_comb
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the routines necessary for the contraction
+ of the tensor coefficients as reconstructed by the module tens_rec
+ with the according tensor integrals.
+
+ Please, note that this module is generated by a script and should not
+ be modified manually. In order to make changes to this module rerun
+ the Python script
+
+ tool/tens_rec/tens.py
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision_golem (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * matrice_s (src/kinematics/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * form_factor_2p (src/form_factor/<a href="../form_factor/form_factor_2p_f90.html#robo_top_of_doc">form_factor_2p.f90</a>)
+ * form_factor_3p (src/form_factor/<a href="../form_factor/form_factor_3p_f90.html#robo_top_of_doc">form_factor_3p.f90</a>)
+ * form_factor_4p (src/form_factor/<a href="../form_factor/form_factor_4p_f90.html#robo_top_of_doc">form_factor_4p.f90</a>)
+ * form_factor_5p (src/form_factor/<a href="../form_factor/form_factor_5p_f90.html#robo_top_of_doc">form_factor_5p.f90</a>)
+ * form_factor_6p (src/form_factor/<a href="../form_factor/form_factor_6p_f90.html#robo_top_of_doc">form_factor_6p.f90</a>)
+ * tens_rec (src/interface/<a href="./tens_rec_f90.html#robo_top_of_doc">tens_rec.f90</a>)
+</pre>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract25f1"></a>
+<a name="robo241"></a><h2>src/interface/tens_comb/contract2_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract2_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract2_1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 2-point rank 1 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract25f2"></a>
+<a name="robo242"></a><h2>src/interface/tens_comb/contract2_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract2_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract2_2(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 2-point rank 2 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract25f2s1"></a>
+<a name="robo243"></a><h2>src/interface/tens_comb/contract2_2s1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract2_2s1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract2_2s1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 2-point rank 2 tensor integral
+ with (mu^2)^1 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(complex(ki))
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract35f1"></a>
+<a name="robo244"></a><h2>src/interface/tens_comb/contract3_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract3_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract3_1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 3-point rank 1 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract35f2"></a>
+<a name="robo245"></a><h2>src/interface/tens_comb/contract3_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract3_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract3_2(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 3-point rank 2 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract35f2s1"></a>
+<a name="robo246"></a><h2>src/interface/tens_comb/contract3_2s1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract3_2s1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract3_2s1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 3-point rank 2 tensor integral
+ with (mu^2)^1 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(complex(ki))
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract35f3"></a>
+<a name="robo247"></a><h2>src/interface/tens_comb/contract3_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract3_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract3_3(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 3-point rank 3 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_3)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract35f3s1"></a>
+<a name="robo248"></a><h2>src/interface/tens_comb/contract3_3s1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract3_3s1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract3_3s1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 3-point rank 3 tensor integral
+ with (mu^2)^1 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f1"></a>
+<a name="robo249"></a><h2>src/interface/tens_comb/contract4_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 1 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f2"></a>
+<a name="robo250"></a><h2>src/interface/tens_comb/contract4_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_2(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 2 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f2s1"></a>
+<a name="robo251"></a><h2>src/interface/tens_comb/contract4_2s1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_2s1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_2s1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 2 tensor integral
+ with (mu^2)^1 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(complex(ki))
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f3"></a>
+<a name="robo252"></a><h2>src/interface/tens_comb/contract4_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_3(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 3 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_3)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f3s1"></a>
+<a name="robo253"></a><h2>src/interface/tens_comb/contract4_3s1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_3s1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_3s1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 3 tensor integral
+ with (mu^2)^1 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f4"></a>
+<a name="robo254"></a><h2>src/interface/tens_comb/contract4_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_4(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 4 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_4)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f4s1"></a>
+<a name="robo255"></a><h2>src/interface/tens_comb/contract4_4s1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_4s1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_4s1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 4 tensor integral
+ with (mu^2)^1 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract45f4s2"></a>
+<a name="robo256"></a><h2>src/interface/tens_comb/contract4_4s2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract4_4s2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract4_4s2(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 4-point rank 4 tensor integral
+ with (mu^2)^2 in the numerator with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract55f1"></a>
+<a name="robo257"></a><h2>src/interface/tens_comb/contract5_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract5_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract5_1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 5-point rank 1 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract55f2"></a>
+<a name="robo258"></a><h2>src/interface/tens_comb/contract5_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract5_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract5_2(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 5-point rank 2 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract55f3"></a>
+<a name="robo259"></a><h2>src/interface/tens_comb/contract5_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract5_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract5_3(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 5-point rank 3 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_3)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract55f4"></a>
+<a name="robo260"></a><h2>src/interface/tens_comb/contract5_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract5_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract5_4(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 5-point rank 4 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_4)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract55f5"></a>
+<a name="robo261"></a><h2>src/interface/tens_comb/contract5_5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract5_5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract5_5(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 5-point rank 5 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_5)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract65f1"></a>
+<a name="robo262"></a><h2>src/interface/tens_comb/contract6_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract6_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract6_1(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 6-point rank 1 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract65f2"></a>
+<a name="robo263"></a><h2>src/interface/tens_comb/contract6_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract6_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract6_2(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 6-point rank 2 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract65f3"></a>
+<a name="robo264"></a><h2>src/interface/tens_comb/contract6_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract6_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract6_3(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 6-point rank 3 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_3)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract65f4"></a>
+<a name="robo265"></a><h2>src/interface/tens_comb/contract6_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract6_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract6_4(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 6-point rank 4 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_4)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract65f5"></a>
+<a name="robo266"></a><h2>src/interface/tens_comb/contract6_5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract6_5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract6_5(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 6-point rank 5 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_5)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract65f6"></a>
+<a name="robo267"></a><h2>src/interface/tens_comb/contract6_6 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract6_6
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = contract6_6(coeffs, momenta, b_set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the 6-point rank 6 tensor integral
+ with its coefficients.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_6)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer number (bit-set)
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of contracting the tensor integral with its coefficient.
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fa5ftensor5f1"></a>
+<a name="robo268"></a><h2>src/interface/tens_comb/contract_a_tensor_1 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_a_tensor_1
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_a_tensor_1(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an A-type tensor
+ of rank 1 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_1)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fa5ftensor5f2"></a>
+<a name="robo269"></a><h2>src/interface/tens_comb/contract_a_tensor_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_a_tensor_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_a_tensor_2(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an A-type tensor
+ of rank 2 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fa5ftensor5f3"></a>
+<a name="robo270"></a><h2>src/interface/tens_comb/contract_a_tensor_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_a_tensor_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_a_tensor_3(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an A-type tensor
+ of rank 3 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_3)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fa5ftensor5f4"></a>
+<a name="robo271"></a><h2>src/interface/tens_comb/contract_a_tensor_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_a_tensor_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_a_tensor_4(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an A-type tensor
+ of rank 4 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_4)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fa5ftensor5f5"></a>
+<a name="robo272"></a><h2>src/interface/tens_comb/contract_a_tensor_5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_a_tensor_5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_a_tensor_5(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an A-type tensor
+ of rank 5 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_5)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fb5ftensor5f2"></a>
+<a name="robo273"></a><h2>src/interface/tens_comb/contract_b_tensor_2 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_b_tensor_2
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_b_tensor_2(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an B-type tensor
+ of rank 2 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_2)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fb5ftensor5f3"></a>
+<a name="robo274"></a><h2>src/interface/tens_comb/contract_b_tensor_3 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_b_tensor_3
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_b_tensor_3(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an B-type tensor
+ of rank 3 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_3)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fb5ftensor5f4"></a>
+<a name="robo275"></a><h2>src/interface/tens_comb/contract_b_tensor_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_b_tensor_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_b_tensor_4(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an B-type tensor
+ of rank 4 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_4)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fb5ftensor5f5"></a>
+<a name="robo276"></a><h2>src/interface/tens_comb/contract_b_tensor_5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_b_tensor_5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_b_tensor_5(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an B-type tensor
+ of rank 5 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_5)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fc5ftensor5f4"></a>
+<a name="robo277"></a><h2>src/interface/tens_comb/contract_c_tensor_4 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_c_tensor_4
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_c_tensor_4(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an C-type tensor
+ of rank 4 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_4)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fcontract5fc5ftensor5f5"></a>
+<a name="robo278"></a><h2>src/interface/tens_comb/contract_c_tensor_5 [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function contract_c_tensor_5
+</pre>
+<p class="item_name">USAGE</p>
+<pre> ans = contract_c_tensor_5(coeffs, momenta)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Contracts the a set of coefficients with an C-type tensor
+ of rank 5 constructed from a given set of momenta.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * coeffs -- coefficients of type(coeff_type_5)
+ * momenta -- real array of dimension(:,3) containing the
+ momenta r_i of the loop propagators
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result of the contraction which is a complex number
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fevaluate5fb"></a>
+<a name="robo279"></a><h2>src/interface/tens_comb/evaluate_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function evaluate_b
+
+ Accessible through interface evaluate
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = evaluate(numeval, momenta, b_set, rank)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Evaluates a diagram by first reconstructing its tensor coefficients
+ and then contracting with the tensor integrals.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * momenta -- real array of dimension(:,0:3) containing the
+ momenta r_i of the loop propagators
+ * b_set -- the set of pinched propagators as integer (bit-set)
+ * rank -- optional integer, specifying the maximum rank of the diagram
+ If omitted, rank is assumed to be the equal to the number of
+ loop propagators.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Value of the diagram as a type(form_factor)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2finterface2ftens5fcomb2fevaluate5fs"></a>
+<a name="robo280"></a><h2>src/interface/tens_comb/evaluate_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function evaluate_s
+
+ Accessible through interface evaluate
+</pre>
+<p class="item_name">USAGE</p>
+<pre> amp = evaluate(numeval, momenta, set, rank)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> Evaluates a diagram by first reconstructing its tensor coefficients
+ and then contracting with the tensor integrals.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * numeval -- the numerator function
+ * momenta -- real array of dimension(:,0:3) containing the
+ momenta r_i of the loop propagators
+ * set -- the set of pinched propagators as integer array
+ * rank -- optional integer, specifying the maximum rank of the diagram
+ If omitted, rank is assumed to be the equal to the number of
+ loop propagators.
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> Value of the diagram as a type(form_factor)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> None
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/interface/tens_comb.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_1p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_1p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_1p_f90.html (revision 119)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/form_factor/form_factor_1p.f90</title>
+<!-- Source: ./../src/form_factor/form_factor_1p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f1p"></a>
+<a name="robo0"></a><h2>src/form_factor/form_factor_1p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_1p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_1p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the form factor for tadpoles.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports the functions:
+ * a10 -- a function to compute A^{1,0}
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * generic_function_1p (src/integrals/one_point/<a href="../integrals/one_point/generic_function_1p_f90.html#robo_top_of_doc">generic_function_1p.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * constante (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f1p2fa105fb"></a>
+<a name="robo65"></a><h2>src/form_factor/form_factor_1p/a10_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a10_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a10_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{1,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f1p2fa105fs"></a>
+<a name="robo66"></a><h2>src/form_factor/form_factor_1p/a10_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a10_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a10_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{1,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/form_factor/form_factor_1p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_2p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_2p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_2p_f90.html (revision 119)
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/form_factor/form_factor_2p.f90</title>
+<!-- Source: ./../src/form_factor/form_factor_2p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p"></a>
+<a name="robo1"></a><h2>src/form_factor/form_factor_2p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_2p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_2p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the different form factors for two point amplitudes.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports four functions:
+ * a20 -- a function to compute A^{2,0}
+ * a21 -- a function to compute A^{2,1}
+ * a22 -- a function to compute A^{2,2}
+ * b22 -- a function to compute B^{2,2}
+
+ Note that a2xx and b2xx are generic functions which can be called either with a
+ set of integers or with an integer whose bits represents the set
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * generic_function_2p (src/integrals/two_point/<a href="../integrals/two_point/generic_function_2p_f90.html#robo_top_of_doc">generic_function_2p.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * constante (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fa205fb"></a>
+<a name="robo67"></a><h2>src/form_factor/form_factor_2p/a20_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a20_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a20_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{2,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fa205fs"></a>
+<a name="robo68"></a><h2>src/form_factor/form_factor_2p/a20_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a20_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a20_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{2,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fa215fb"></a>
+<a name="robo69"></a><h2>src/form_factor/form_factor_2p/a21_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a21_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a21_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{2,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fa215fs"></a>
+<a name="robo70"></a><h2>src/form_factor/form_factor_2p/a21_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a21_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a21_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{2,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fa225fb"></a>
+<a name="robo71"></a><h2>src/form_factor/form_factor_2p/a22_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a22_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a22_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{2,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fa225fs"></a>
+<a name="robo72"></a><h2>src/form_factor/form_factor_2p/a22_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a22_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a22_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{2,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fb225fb"></a>
+<a name="robo73"></a><h2>src/form_factor/form_factor_2p/b22_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b22_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b22_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{2,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f2p2fb225fs"></a>
+<a name="robo74"></a><h2>src/form_factor/form_factor_2p/b22_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b22_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b22_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{2,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/form_factor/form_factor_2p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_3p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_3p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_3p_f90.html (revision 119)
@@ -0,0 +1,474 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/form_factor/form_factor_3p.f90</title>
+<!-- Source: ./../src/form_factor/form_factor_3p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p"></a>
+<a name="robo2"></a><h2>src/form_factor/form_factor_3p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_3p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_3p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the different form factors for three point amplitudes.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports six functions:
+ * a30 -- a function to compute A^{3,0}
+ * a31 -- a function to compute A^{3,1}
+ * a32 -- a function to compute A^{3,2}
+ * a33 -- a function to compute A^{3,3}
+ * b32 -- a function to compute B^{3,2}
+ * b33 -- a function to compute B^{3,3}
+
+ Note that a3xx and b3xx are generic functions which can be called either with a
+ set of integers or with an integer whose bits represents the set
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../integrals/three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * constante (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa305fb"></a>
+<a name="robo75"></a><h2>src/form_factor/form_factor_3p/a30_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a30_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a30_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa305fs"></a>
+<a name="robo76"></a><h2>src/form_factor/form_factor_3p/a30_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a30_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a30_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa315fb"></a>
+<a name="robo77"></a><h2>src/form_factor/form_factor_3p/a31_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a31_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a31_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa315fs"></a>
+<a name="robo78"></a><h2>src/form_factor/form_factor_3p/a31_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a31_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a31_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa325fb"></a>
+<a name="robo79"></a><h2>src/form_factor/form_factor_3p/a32_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a32_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a32_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa325fs"></a>
+<a name="robo80"></a><h2>src/form_factor/form_factor_3p/a32_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a32_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a32_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa335fb"></a>
+<a name="robo81"></a><h2>src/form_factor/form_factor_3p/a33_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a33_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a33_b(l1,l2,l3,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fa335fs"></a>
+<a name="robo82"></a><h2>src/form_factor/form_factor_3p/a33_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a33_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a33_s(l1,l2,l3,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{3,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fb325fb"></a>
+<a name="robo83"></a><h2>src/form_factor/form_factor_3p/b32_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b32_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b32_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{3,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fb325fs"></a>
+<a name="robo84"></a><h2>src/form_factor/form_factor_3p/b32_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b32_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b32_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{3,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fb335fb"></a>
+<a name="robo85"></a><h2>src/form_factor/form_factor_3p/b33_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b33_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b33_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{3,3}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f3p2fb335fs"></a>
+<a name="robo86"></a><h2>src/form_factor/form_factor_3p/b33_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b33_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b33_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{3,3}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/form_factor/form_factor_3p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_4p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_4p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_4p_f90.html (revision 119)
@@ -0,0 +1,692 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/form_factor/form_factor_4p.f90</title>
+<!-- Source: ./../src/form_factor/form_factor_4p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p"></a>
+<a name="robo3"></a><h2>src/form_factor/form_factor_4p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_4p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_4p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the different form factors for four point amplitudes.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports nine functions:
+ * a40 -- a function to compute A^{4,0}
+ * a41 -- a function to compute A^{4,1}
+ * a42 -- a function to compute A^{4,2}
+ * a43 -- a function to compute A^{4,3}
+ * a44 -- a function to compute A^{4,4}
+ * b42 -- a function to compute B^{4,2}
+ * b43 -- a function to compute B^{4,3}
+ * b44 -- a function to compute B^{4,4}
+ * c44 -- a function to compute C^{4,4}
+
+ Note that a4xx, b4xx and c4xx are generic functions which can be called either with a
+ set of integers or with an integer whose bits represents the set
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * generic_function_4p (src/integrals/four_point/<a href="../integrals/four_point/generic_function_4p_f90.html#robo_top_of_doc">generic_function_4p.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../integrals/three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * constante (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa405fb"></a>
+<a name="robo87"></a><h2>src/form_factor/form_factor_4p/a40_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a40_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a40_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa405fs"></a>
+<a name="robo88"></a><h2>src/form_factor/form_factor_4p/a40_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a40_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a40_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa415fb"></a>
+<a name="robo89"></a><h2>src/form_factor/form_factor_4p/a41_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a41_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a41_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa415fs"></a>
+<a name="robo90"></a><h2>src/form_factor/form_factor_4p/a41_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a41_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a41_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa425fb"></a>
+<a name="robo91"></a><h2>src/form_factor/form_factor_4p/a42_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a42_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a42_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa425fs"></a>
+<a name="robo92"></a><h2>src/form_factor/form_factor_4p/a42_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a42_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a42_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa435fb"></a>
+<a name="robo93"></a><h2>src/form_factor/form_factor_4p/a43_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a43_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a43_b(l1,l2,l3,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa435fs"></a>
+<a name="robo94"></a><h2>src/form_factor/form_factor_4p/a43_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a43_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a43_s(l1,l2,l3,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa445fb"></a>
+<a name="robo95"></a><h2>src/form_factor/form_factor_4p/a44_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a44_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a44_b(l1,l2,l3,l4,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,4}(l1,l2,l3,l4).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fa445fs"></a>
+<a name="robo96"></a><h2>src/form_factor/form_factor_4p/a44_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a44_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a44_s(l1,l2,l3,l4,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{4,4}(l1,l2,l3,l4).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fb425fb"></a>
+<a name="robo97"></a><h2>src/form_factor/form_factor_4p/b42_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b42_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b42_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{4,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fb425fs"></a>
+<a name="robo98"></a><h2>src/form_factor/form_factor_4p/b42_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b42_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b42_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{4,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fb435fb"></a>
+<a name="robo99"></a><h2>src/form_factor/form_factor_4p/b43_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b43_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b43_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{4,3}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fb435fs"></a>
+<a name="robo100"></a><h2>src/form_factor/form_factor_4p/b43_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b43_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b43_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{4,3}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fb445fb"></a>
+<a name="robo101"></a><h2>src/form_factor/form_factor_4p/b44_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b44_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b44_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{4,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fb445fs"></a>
+<a name="robo102"></a><h2>src/form_factor/form_factor_4p/b44_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b44_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b44_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{4,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fc445fb"></a>
+<a name="robo103"></a><h2>src/form_factor/form_factor_4p/c44_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c44_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = c44_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor C^{4,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f4p2fc445fs"></a>
+<a name="robo104"></a><h2>src/form_factor/form_factor_4p/c44_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c44_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = c44_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor C^{4,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/form_factor/form_factor_4p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_5p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_5p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_5p_f90.html (revision 119)
@@ -0,0 +1,920 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/form_factor/form_factor_5p.f90</title>
+<!-- Source: ./../src/form_factor/form_factor_5p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p"></a>
+<a name="robo4"></a><h2>src/form_factor/form_factor_5p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_5p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_5p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the different form factors for five point amplitudes.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports twelve functions:
+ * a50 -- a function to compute A^{5,0}
+ * a51 -- a function to compute A^{5,1}
+ * a52 -- a function to compute A^{5,2}
+ * a53 -- a function to compute A^{5,3}
+ * a54 -- a function to compute A^{5,4}
+ * a55 -- a function to compute A^{5,5}
+ * b52 -- a function to compute B^{5,2}
+ * b53 -- a function to compute B^{5,3}
+ * b54 -- a function to compute B^{5,4}
+ * b55 -- a function to compute B^{5,5}
+ * c54 -- a function to compute C^{5,4}
+ * c55 -- a function to compute C^{5,5}
+
+ Note that a5xx, b5xx and c5xx are generic functions which can be called either with a
+ set of integers or with an integer whose bits represents the set
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * generic_function_4p (src/integrals/four_point/<a href="../integrals/four_point/generic_function_4p_f90.html#robo_top_of_doc">generic_function_4p.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../integrals/three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * sortie_erreur (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * multiply_div (src/module/<a href="../module/multiply_div_f90.html#robo_top_of_doc">multiply_div.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa505fb"></a>
+<a name="robo105"></a><h2>src/form_factor/form_factor_5p/a50_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a50_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a50_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa505fs"></a>
+<a name="robo106"></a><h2>src/form_factor/form_factor_5p/a50_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a50_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a50_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa515fb"></a>
+<a name="robo107"></a><h2>src/form_factor/form_factor_5p/a51_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a51_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a51_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa515fs"></a>
+<a name="robo108"></a><h2>src/form_factor/form_factor_5p/a51_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a51_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a51_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa525fb"></a>
+<a name="robo109"></a><h2>src/form_factor/form_factor_5p/a52_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a52_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a52_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa525fs"></a>
+<a name="robo110"></a><h2>src/form_factor/form_factor_5p/a52_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a52_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a52_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa535fb"></a>
+<a name="robo111"></a><h2>src/form_factor/form_factor_5p/a53_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a53_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a53_b(l1,l2,l3,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa535fs"></a>
+<a name="robo112"></a><h2>src/form_factor/form_factor_5p/a53_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a53_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a53_s(l1,l2,l3,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa545fb"></a>
+<a name="robo113"></a><h2>src/form_factor/form_factor_5p/a54_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a54_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a54_b(l1,l2,l3,l4,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,4}(l1,l2,l3,l4).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa545fs"></a>
+<a name="robo114"></a><h2>src/form_factor/form_factor_5p/a54_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a54_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a54_s(l1,l2,l3,l4,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,4}(l1,l2,l3,l4).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa555fb"></a>
+<a name="robo115"></a><h2>src/form_factor/form_factor_5p/a55_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a55_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a55_b(l1,l2,l3,l4,l5,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,5}(l1,l2,l3,l4,l5).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l5 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa555fs"></a>
+<a name="robo116"></a><h2>src/form_factor/form_factor_5p/a55_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a55_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a55_s(l1,l2,l3,l4,l5,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{5,5}(l1,l2,l3,l4,l5).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l5 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb525fb"></a>
+<a name="robo123"></a><h2>src/form_factor/form_factor_5p/b52_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b52_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b52_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb525fs"></a>
+<a name="robo124"></a><h2>src/form_factor/form_factor_5p/b52_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b52_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b52_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,2}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb535fb"></a>
+<a name="robo125"></a><h2>src/form_factor/form_factor_5p/b53_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b53_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b53_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,3}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb535fs"></a>
+<a name="robo126"></a><h2>src/form_factor/form_factor_5p/b53_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b53_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b53_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,3}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb545fb"></a>
+<a name="robo127"></a><h2>src/form_factor/form_factor_5p/b54_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b54_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b54_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb545fs"></a>
+<a name="robo128"></a><h2>src/form_factor/form_factor_5p/b54_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b54_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b54_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb555fb"></a>
+<a name="robo129"></a><h2>src/form_factor/form_factor_5p/b55_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b55_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b55_b(l1,l2.l3,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,5}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fb555fs"></a>
+<a name="robo130"></a><h2>src/form_factor/form_factor_5p/b55_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function b55_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = b55_s(l1,l2.l3,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor B^{5,5}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fc545fb"></a>
+<a name="robo131"></a><h2>src/form_factor/form_factor_5p/c54_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c54_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = c54_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor C^{5,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fc545fs"></a>
+<a name="robo132"></a><h2>src/form_factor/form_factor_5p/c54_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c54_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = c54_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor C^{5,4}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fc555fb"></a>
+<a name="robo133"></a><h2>src/form_factor/form_factor_5p/c55_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c55_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = c55_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor C^{5,5}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fc555fs"></a>
+<a name="robo134"></a><h2>src/form_factor/form_factor_5p/c55_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function c55_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = c55_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor C^{5,5}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/form_factor/form_factor_5p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_6p_f90.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_6p_f90.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/form_factor/form_factor_6p_f90.html (revision 119)
@@ -0,0 +1,597 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="../robodoc.css" type="text/css" />
+<title>./../src/form_factor/form_factor_6p.f90</title>
+<!-- Source: ./../src/form_factor/form_factor_6p.f90 -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="navigation">
+<a class="menuitem" href="../toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="../robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="../masterindex.html#top">Index</a>
+<a class="menuitem" href="../robo_generics.html#top">Generics</a>
+<a class="menuitem" href="../robo_functions.html#top">Functions</a>
+<a class="menuitem" href="../robo_modules.html#top">Modules</a>
+<a class="menuitem" href="../robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p"></a>
+<a name="robo5"></a><h2>src/form_factor/form_factor_6p [ Modules ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_modules.html#robo_top_of_doc">Modules</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Module form_factor_6p
+</pre>
+<p class="item_name">USAGE</p>
+<pre> use form_factor_6p
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This module contains the different form factors for six point amplitudes.
+</pre>
+<p class="item_name">OUTPUT</p>
+<pre> It exports seven functions:
+ * a60 -- a function to compute A^{6,0}
+ * a61 -- a function to compute A^{6,1}
+ * a62 -- a function to compute A^{6,2}
+ * a63 -- a function to compute A^{6,3}
+ * a64 -- a function to compute A^{6,4}
+ * a65 -- a function to compute A^{6,5}
+ * a66 -- a function to compute A^{6,6}
+
+ Note that a6xx are generic functions which can be called either with a
+ set of integers or with an integer whose bits represents the set
+</pre>
+<p class="item_name">USES</p>
+<pre> * precision (src/module/<a href="../module/precision_golem_f90.html#robo_top_of_doc">precision_golem.f90</a>)
+ * generic_function_4p (src/integrals/four_point/<a href="../integrals/four_point/generic_function_4p_f90.html#robo_top_of_doc">generic_function_4p.f90</a>)
+ * generic_function_3p (src/integrals/three_point/<a href="../integrals/three_point/generic_function_3p_f90.html#robo_top_of_doc">generic_function_3p.f90</a>)
+ * form_factor_5p (src/form_factor/<a href="./form_factor_5p_f90.html#robo_top_of_doc">form_factor_5p.f90</a>)
+ * array (src/module/<a href="../module/array_f90.html#robo_top_of_doc">array.f90</a>)
+ * matrice_s (src/kinematic/<a href="../kinematic/matrice_s_f90.html#robo_top_of_doc">matrice_s.f90</a>)
+ * sortie_erreur (src/module/<a href="../module/sortie_erreur_f90.html#robo_top_of_doc">sortie_erreur.f90</a>)
+ * form_factor_type (src/module/<a href="../module/form_factor_type_f90.html#robo_top_of_doc">form_factor_type.f90</a>)
+ * constante (src/module/<a href="../module/constante_f90.html#robo_top_of_doc">constante.f90</a>)
+</pre>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa615fb"></a>
+<a name="robo117"></a><h2>src/form_factor/form_factor_5p/a61_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a61_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a61_b(l1,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa615fs"></a>
+<a name="robo118"></a><h2>src/form_factor/form_factor_5p/a61_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a61_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a61_s(l1,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,1}(l_1).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa625fb"></a>
+<a name="robo119"></a><h2>src/form_factor/form_factor_5p/a62_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a62_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a62_b(l1,l2,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa625fs"></a>
+<a name="robo120"></a><h2>src/form_factor/form_factor_5p/a62_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a62_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a62_s(l1,l2,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,2}(l1,l2).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa635fb"></a>
+<a name="robo121"></a><h2>src/form_factor/form_factor_5p/a63_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a63_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a63_b(l1,l2,l3,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f5p2fa635fs"></a>
+<a name="robo122"></a><h2>src/form_factor/form_factor_5p/a63_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a63_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a63_s(l1,l2,l3,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,3}(l1,l2,l3).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa605fb"></a>
+<a name="robo135"></a><h2>src/form_factor/form_factor_6p/a60_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a60_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a60_b(b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa605fs"></a>
+<a name="robo136"></a><h2>src/form_factor/form_factor_6p/a60_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a60_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a60_s(set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,0}.
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa645fb"></a>
+<a name="robo137"></a><h2>src/form_factor/form_factor_6p/a64_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a64_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a64_b(l1,l2,l3,l4,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,4}(l1,l2,l3,l4).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa645fs"></a>
+<a name="robo138"></a><h2>src/form_factor/form_factor_6p/a64_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a64_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a64_s(l1,l2,l3,l4,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,4}(l1,l2,l3,l4).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa655fb"></a>
+<a name="robo139"></a><h2>src/form_factor/form_factor_6p/a65_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a65_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a65_b(l1,l2,l3,l4,l5,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,5}(l1,l2,l3,l4,l5).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l5 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables b_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa655fs"></a>
+<a name="robo140"></a><h2>src/form_factor/form_factor_6p/a65_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a65_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a65_s(l1,l2,l3,l4,l5,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,5}(l1,l2,l3,l4,l5).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l5 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa665fb"></a>
+<a name="robo141"></a><h2>src/form_factor/form_factor_6p/a66_b [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a66_b
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a66_b(l1,l2,l3,l4,l5,l6,b_pin)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,6}(l1,l2,l3,l4,l5,l6).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l5 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l6 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * b_pin -- an integer whose bits represent an array of integers of rank 1 corresponding
+ to the label of the propagators pinched (removed from the original set
+ which is in the global variable b_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect, it uses the value of the global variables set_ref
+ and s_mat_p
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+<hr />
+<a name="src2fform5ffactor2fform5ffactor5f6p2fa665fs"></a>
+<a name="robo142"></a><h2>src/form_factor/form_factor_6p/a66_s [ Functions ]</h2>
+
+<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="../robo_functions.html#robo_top_of_doc">Functions</a> ]</p>
+<p class="item_name">NAME</p>
+<pre> Function a66_s
+</pre>
+<p class="item_name">USAGE</p>
+<pre> type(form_factor) = a66_s(l1,l2,l3,l4,l5,l6,set)
+</pre>
+<p class="item_name">DESCRIPTION</p>
+<pre> This function defines the form factor A^{6,6}(l1,l2,l3,l4,l5,l6).
+</pre>
+<p class="item_name">INPUTS</p>
+<pre> * l1 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l2 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l3 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l4 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l5 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * l6 -- an integer corresponding to a label in the set of the three
+ remaining propagators
+ * set -- an array of integers of rank 1 corresponding to the label
+ of the propagators pinched (removed from the original set
+ which is in the global variable set_ref)
+</pre>
+<p class="item_name">SIDE EFFECTS</p>
+<pre> No side effect
+</pre>
+<p class="item_name">RETURN VALUE</p>
+<pre> The result returned is of the type form_factor
+ It returns an array of three complex (type ki) corresponding
+ to the real part, imaginary part of the coefficient in front 1/epsilon^2,
+ the real part, imaginary part of the 1/epsilon term and the real part,
+ imaginary part of the constant term.
+</pre>
+<p class="item_name">EXAMPLE</p>
+
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/form_factor/form_factor_6p.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/html/robo_generics.html
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/html/robo_generics.html (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/html/robo_generics.html (revision 119)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
+<link rel="stylesheet" href="./robodoc.css" type="text/css" />
+<title>Generics</title>
+<!-- Source: ./../src/ -->
+<!-- Generated with ROBODoc Version 4.99.38 (May 2 2009) -->
+</head>
+<body>
+<div id="logo">
+<a name="robo_top_of_doc"></a>
+</div> <!-- logo -->
+<div id="extra">
+</div> <!-- extra -->
+<div id="navigation">
+<a class="menuitem" href="./toc_index.html#top">Table of Contents</a>
+<a class="menuitem" href="./robo_sourcefiles.html#top">Sourcefiles</a>
+<a class="menuitem" href="./masterindex.html#top">Index</a>
+<a class="menuitem" href="#top">Generics</a>
+<a class="menuitem" href="./robo_functions.html#top">Functions</a>
+<a class="menuitem" href="./robo_modules.html#top">Modules</a>
+<a class="menuitem" href="./robo_types.html#top">Types</a>
+</div> <!-- navigation -->
+<div id="content">
+<h1>Generics</h1>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+<h2><a name="M"></a>M</h2><a href="./module/form_factor_type_f90.html#robo390" class="indexitem" >module/form_factor_type/assignment</a>
+<a href="./module/form_factor_type_f90.html#robo391" class="indexitem" >module/form_factor_type/division</a>
+<a href="./module/form_factor_type_f90.html#robo395" class="indexitem" >module/form_factor_type/multiplication</a>
+<a href="./module/form_factor_type_f90.html#robo396" class="indexitem" >module/form_factor_type/subtraction</a>
+<a href="./module/form_factor_type_f90.html#robo397" class="indexitem" >module/form_factor_type/sum</a>
+<h2><a href="#A">A</a> - <a href="#B">B</a> - <a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#H">H</a> - <a href="#I">I</a> - <a href="#J">J</a> - <a href="#K">K</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#O">O</a> - <a href="#P">P</a> - <a href="#Q">Q</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#X">X</a> - <a href="#Y">Y</a> - <a href="#Z">Z</a> - <a href="#0">0</a> - <a href="#1">1</a> - <a href="#2">2</a> - <a href="#3">3</a> - <a href="#4">4</a> - <a href="#5">5</a> - <a href="#6">6</a> - <a href="#7">7</a> - <a href="#8">8</a> - <a href="#9">9</a></h2>
+</div> <!-- content -->
+<div id="footer">
+<p>Generated from ./../src/ with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.38 on Wed Nov 10 2010 16:58:16
+</p>
+</div> <!-- footer -->
+</body>
+</html>
Index: 95/branches/golem95_without_olo_cmake/doc/robodoc.rc
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc/robodoc.rc (revision 0)
+++ 95/branches/golem95_without_olo_cmake/doc/robodoc.rc (revision 119)
@@ -0,0 +1,62 @@
+# Example robodoc.rc
+#
+items:
+ NAME
+ USAGE
+ DESCRIPTION
+ OUTPUT
+ USES
+ INPUTS
+ SIDE EFFECTS
+ RETURN VALUE
+ EXAMPLE
+ AUTHOR
+ SYNOPSIS
+ NOTES
+ SOURCE
+ignore items:
+ AUTHOR
+item order:
+source items:
+ SYNOPSIS
+preformatted items:
+format items:
+options:
+ --src ../src
+ --doc ./html
+ --html
+ --multidoc
+ --index
+headertypes:
+ignore files:
+ Readme
+ .svn
+ *.bak
+ *~
+accept files:
+ *.f90
+ *.pl
+header markers:
+ !****
+ #****
+remark markers:
+ !
+ #
+end markers:
+ !****
+ #****
+header separate characters:
+ ,
+header ignore characters:
+ [
+remark begin markers:
+ /*
+remark end markers:
+ */
+source line comments:
+ //
+keywords:
+ if
+ do
+ while
+ for
Index: 95/branches/golem95_without_olo_cmake/doc
===================================================================
--- 95/branches/golem95_without_olo_cmake/doc (revision 118)
+++ 95/branches/golem95_without_olo_cmake/doc (revision 119)
Property changes on: 95/branches/golem95_without_olo_cmake/doc
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/INSTALL
===================================================================
--- 95/branches/golem95_without_olo_cmake/INSTALL (revision 0)
+++ 95/branches/golem95_without_olo_cmake/INSTALL (revision 119)
@@ -0,0 +1,365 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
Property changes on: 95/branches/golem95_without_olo_cmake/INSTALL
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/demos/demo_4point.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_4point.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_4point.f90 (revision 119)
@@ -0,0 +1,582 @@
+!
+! This program computes the n, n+2 and n+4 dimensional four-point functions
+! with or without Feynman parameters in the numerator,
+! from the four-point form factors. This program can be
+! used as a test to check this type of integrals.
+! 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
+ use matrice_s
+ use form_factor_type
+ use form_factor_4p
+ use form_factor_3p
+ use constante
+ use generic_function_4p
+ use function_4p1m
+ use function_4p2m_opp
+ use function_4p2m_adj
+ use function_4p3m
+ use function_4p4m
+ use parametre
+ !use parametre, only: mu2_scale_par
+ !"only" statements are recommended if you need to export only certain functions
+ !
+ implicit none
+ !
+ type(form_factor) :: res6,res6a
+ complex(ki), dimension(3) :: verif1
+ real(ki), dimension(6) :: verif2
+ real(ki) :: ti1,ti2
+ real(ki) :: p1sq,p2sq,p3sq,p4sq,m1sq,m2sq,m3sq,m4sq
+ real(ki) :: s_var,t_var
+ integer :: choix,choix_kinem
+ real(ki) :: mu2,mu02,lmu2
+ !
+ write (*,*) 'Choose from the following kinematics:'
+ write (*,*) '1) all external legs light-like, no internal masses'
+ write (*,*) '2) one external leg not light-like, no internal masses'
+ write (*,*) '3) two opposite external legs not light-like, no internal masses'
+ write (*,*) '4) two adjacent external legs not light-like, no internal masses'
+ write (*,*) '5) three external legs not light-like, no internal masses'
+ write (*,*) '6) four external legs not light-like, no internal masses'
+ write (*,*) '7) two external legs not light-like, internal masses, IR divergent'
+ !(example QL Box 8)
+ write (*,*) '8) three external legs not light-like, internal masses, IR divergent'
+ !(example QL Box 13)
+ read (*,*) choix_kinem
+ !
+ !
+ ! Opening of the error files
+ !
+ !open(unit=19,file='error_4point.txt',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='test4point.txt',status='unknown')
+ !
+ ! choose to calculate all or rational part only (default is set to 'tot')
+ ! rat_or_tot_par='rat'
+ !
+ ! These are the entries of the S matrix
+ ! They are related to the cuts of the following diagram
+ ! S(1,3) = (p1+p4)^2 = t_var
+ ! S(2,4) = (p1+p2)^2 = s_var
+ ! S(1,2) = p2^2 = p2sq
+ ! S(2,3) = p3^2 = p3sq
+ ! S(3,4) = p4^2 = p4sq
+ ! S(4,1) = p1^2 = p1sq
+ !
+ ! p1 p4
+ ! \ /
+ ! \ (4) /
+ ! |---<---|
+ ! | |
+ ! (1) | | (3)
+ ! | |
+ ! |--->---|
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ !
+ ! 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(4)
+ !
+ m1sq = zero
+ m2sq = zero
+ m3sq = zero
+ m4sq = zero
+ !
+ if (choix_kinem == 1) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 0.0_ki
+ p3sq = 0.0_ki
+ p4sq = 0.0_ki
+ !
+ else if (choix_kinem == 2) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 0.0_ki
+ p3sq = 0.0_ki
+ p4sq = 60.0_ki
+ !
+ else if (choix_kinem == 3) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 50.0_ki
+ p3sq = 0.0_ki
+ p4sq = 60.0_ki
+ !
+ else if (choix_kinem == 4) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 0.0_ki
+ p3sq = 50.0_ki
+ p4sq = 60.0_ki
+ !
+ else if (choix_kinem == 5) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 50.0_ki
+ p3sq = 80.0_ki
+ p4sq = 60.0_ki
+ !
+ else if (choix_kinem == 6) then
+ !
+ p1sq = 20.0_ki
+ p2sq = 50.0_ki
+ p3sq = 80.0_ki
+ p4sq = 60.0_ki
+ !
+ else if (choix_kinem == 7) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 0.0_ki
+ p3sq = -80.0_ki
+ p4sq = -60.0_ki
+ m1sq=0.0_ki
+ m2sq=0.0_ki
+ m3sq=20.0_ki
+ m4sq=0.0_ki
+ !
+ else if (choix_kinem == 8) then
+ !
+ p1sq = 0.0_ki
+ p2sq = 50.0_ki
+ p3sq = -80.0_ki
+ p4sq = -60.0_ki
+ m1sq=0.0_ki
+ m2sq=5.0_ki
+ m3sq=10.0_ki
+ m4sq=0.0_ki
+ !
+ end if
+ !
+ s_var = 200.0_ki
+ t_var = -123.0_ki
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = -2._ki*m1sq
+ s_mat(1,2) = p2sq-m1sq-m2sq
+ s_mat(1,3) = t_var-m1sq-m3sq
+ s_mat(1,4) = p1sq-m1sq-m4sq
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m2sq
+ s_mat(2,3) = p3sq-m2sq-m3sq
+ s_mat(2,4) = s_var-m2sq-m4sq
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m3sq
+ s_mat(3,4) = p4sq-m3sq-m4sq
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m4sq
+ !
+ ! 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 four-point function in n dimensions'
+ write (*,*) '1) four-point function in n dimensions with one Feynman parameter (z1)'
+ write (*,*) '2) four-point function in n dimensions with two Feynman parameters (z1*z4)'
+ write (*,*) '3) four-point function in n dimensions with three Feynman parameters (z1^2*z3)'
+ write (*,*) '4) four-point fctn. in n dimensions with four Feynman parameters (z1*z2*z3*z4)'
+ write (*,*) '5) scalar four-point function in n+2 dimensions'
+ write (*,*) '6) four-point function in n+2 dimensions with two Feynman parameters (z1*z2)'
+ write (*,*) '7) scalar four-point function in n+4 dimensions'
+ write (*,*) '8) the mu dependence'
+ read (*,*) choix
+ !
+ if (choix == 0) then
+ !
+ write (*,*) 'calculating n-dim scalar box with '
+ !
+ else if (choix == 1) then
+ !
+ write (*,*) 'calculating n-dim rank one (z1) 4-point fctn. with'
+ !
+ else if (choix == 2) then
+ !
+ write (*,*) 'calculating n-dim rank two (z1*z4) 4-point fctn. with'
+ !
+ else if (choix == 3) then
+ !
+ write (*,*) 'calculating n-dim rank three (z1^2*z3) 4-point fctn. with'
+ !
+ else if (choix == 4) then
+ !
+ write (*,*) 'calculating n-dim rank four (z1*z2*z3*z4) 4-point fctn. with'
+ !
+ else if (choix == 5) then
+ !
+ write (*,*) 'calculating (n+2)-dim scalar 4-point fctn. with'
+ !
+ else if (choix == 6) then
+ !
+ write (*,*) 'calculating (n+2)-dim rank two (z1*z2) 4-point fctn. with'
+ !
+ else if (choix == 7) then
+ !
+ write (*,*) 'calculating (n+4)-dim scalar 4-point function with'
+ !
+ else if (choix == 8) then
+ !
+ write (*,*) 'example of a test on the renormalisation scale mu dependence'
+ !
+ end if
+ !
+ if (choix_kinem == 1) then
+ !
+ write (*,*) 'no off-shell leg'
+ !
+ else if (choix_kinem == 2) then
+ !
+ write (*,*) 'one off-shell leg'
+ !
+ else if (choix_kinem == 3) then
+ !
+ write (*,*) 'two opposite off-shell legs'
+ !
+ else if (choix_kinem == 4) then
+ !
+ write (*,*) 'two adjacent off-shell legs'
+ !
+ else if (choix_kinem == 5) then
+ !
+ write (*,*) 'three off-shell legs'
+ !
+ else if (choix_kinem == 6) then
+ !
+ write (*,*) 'four off-shell legs'
+ !
+ else if (choix_kinem == 7) then
+ !
+ write (*,*) 'two off-shell legs and one internal mass'
+ !
+ else if (choix_kinem == 8) then
+ !
+ write (*,*) 'three off-shell legs and two internal masses'
+ !
+ end if
+ !
+ write (*,*) 'The result has been written to the file test4point.txt'
+ !
+ !
+ call cpu_time(ti1)
+ !
+ ! To change the value of mu^2 (in GeV) (set to 1. by default)
+ ! uncomment this line
+ !
+ !mu2_scale_par = 12._ki
+ mu02 = mu2_scale_par
+ !
+ if (choix == 0) then
+ !
+ ! Result for the scalar integral in n dimension
+ !
+ res6 = a40(s_null)
+ !
+ ! the labels 1,2,..,4 correspond to Feynman parameter z1,z2,...,z4
+ else if (choix == 1) then
+ !
+ ! Results for integrals in n dimension with one Feynman parameter
+ ! at the numerator: z1
+ !
+ res6 = - a41(1,s_null)
+ !
+ else if (choix == 2) then
+ !
+ ! Results for integrals in n dimension with two Feynman parameters
+ ! at the numerator: z1*z4
+ !
+ res6 = a42(1,4,s_null)
+ !
+ else if (choix == 3) then
+ !
+ ! Results for integrals in n dimension with three Feynman parameters
+ ! at the numerator: z1^2*z3
+ !
+ res6 = -a43(1,1,3,s_null)
+ !
+ else if (choix == 4) then
+ !
+ ! Results for integrals in n dimension with four Feynman parameters
+ ! at the numerator: z1*z2*z3*z4
+ !
+ res6 = a44(1,2,3,4,s_null)
+ !
+ else if (choix == 5) then
+ !
+ ! Results for integrals in n+2 dimension with no Feynman parameters
+ ! in the numerator:
+ ! There are two ways to compute a n+2 dimension four-point function,
+ ! either use the generic function f4p_np2 (in module generic_function_4p),
+ ! there are two arguments: the kinematics matrix and the set of the four unpinched
+ ! propagators, in addition there are optional arguments for the label of the Feynman
+ ! parameters
+ ! or use the dedicated function for the corresponding kinematics, the label of the Feynman
+ ! parameters is mandatory (if there is none put 0)
+ ! In the case of the dedicated function, the kinematics is fixed, for example, for
+ ! the one mass four-point function, the external legs are labelled as specified in
+ ! picture at the beginning and the massive leg is assumed to be p4. If it is not the case,
+ ! the user must do the crossing by hand. On the contrary, in the case of the generic function
+ ! the program performs automatically the crossing, the user just has to provide the S matrix.
+ ! Concerning the set of unpinched propagators, the S matrix defines the propagators because
+ ! S_{ij} = (q_i - q_j)^2 (where the qi are the momenta flowing through the propagator i).
+ ! It can happen that one wants to compute a four-point function related to a diagram having
+ ! N propagators (just by pinching N-4 propagators), in this case, the argument s_mat is the
+ ! complete S matrix (NxN) and set_ref is the set of unpinched propagators, IT MUST HAVE
+ ! RANK 1 AND SHAPE 4.
+ !
+ ! In the following the integrals f3p_x have to be called with argument
+ ! s_mat_p. This was defined with the call to preparesmatrix.
+ !
+ verif1 = czero
+ verif1(3) = f4p_np2(s_mat_p,b_ref,b_null)
+ res6 = verif1
+ !
+ verif2 = zero
+ if ( (choix_kinem == 1) .or. (choix_kinem == 2) ) then
+ !
+ verif2(3:6) = f4p1m("n+2",s_var,t_var,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 3) then
+ !
+ verif2(3:6) = f4p2m_opp("n+2",s_var,t_var,p2sq,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 4) then
+ !
+ verif2(3:6) = f4p2m_adj("n+2",s_var,t_var,p3sq,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 5) then
+ !
+ verif2(3:6) = f4p3m("n+2",s_var,t_var,p2sq,p3sq,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 6) then
+ !
+ verif2(3:6) = f4p4m("n+2",s_var,t_var,p1sq,p2sq,p3sq,p4sq,0,0,0,0)
+ !
+ end if
+ !
+ else if (choix == 6) then
+ !
+ ! Results for integrals in n+2 dimensions with two Feynman parameters
+ ! in the numerator: z1*z2
+ ! The same as the preceeding case. Note that in the case of the generic function
+ ! the labels of the Feynman parameters can be put in any order, instead in the dedicated
+ ! functions, they have to be ordered
+ !
+ verif1 = czero
+ verif1(3) = f4p_np2(s_mat_p,b_ref,b_null,2,1)
+ res6 = verif1
+ !
+ verif2 = zero
+ !
+ if ( (choix_kinem == 1) .or. (choix_kinem == 2) ) then
+ !
+ verif2(3:6) = f4p1m("n+2",s_var,t_var,p4sq,0,0,1,2)
+ !
+ else if (choix_kinem == 3) then
+ !
+ verif2(3:6) = f4p2m_opp("n+2",s_var,t_var,p2sq,p4sq,0,0,1,2)
+ !
+ else if (choix_kinem == 4) then
+ !
+ verif2(3:6) = f4p2m_adj("n+2",s_var,t_var,p3sq,p4sq,0,0,1,2)
+ !
+ else if (choix_kinem == 5) then
+ !
+ verif2(3:6) = f4p3m("n+2",s_var,t_var,p2sq,p3sq,p4sq,0,0,1,2)
+ !
+ else if (choix_kinem == 6) then
+ !
+ verif2(3:6) = f4p4m("n+2",s_var,t_var,p1sq,p2sq,p3sq,p4sq,0,0,1,2)
+ !
+ end if
+ !
+ else if (choix == 7) then
+ !
+ ! Results for integrals in n+4 dimension with zero Feynman parameters
+ ! at the numerator:
+ !
+ verif1 = czero
+ verif1(2:3) = f4p_np4(s_mat_p,b_ref,b_null)
+ res6 = verif1
+ !
+ verif2 = zero
+ !
+ if ( (choix_kinem == 1) .or. (choix_kinem == 2) ) then
+ !
+ verif2(3:6) = f4p1m("n+4",s_var,t_var,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 3) then
+ !
+ verif2(3:6) = f4p2m_opp("n+4",s_var,t_var,p2sq,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 4) then
+ !
+ verif2(3:6) = f4p2m_adj("n+4",s_var,t_var,p3sq,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 5) then
+ !
+ verif2(3:6) = f4p3m("n+4",s_var,t_var,p2sq,p3sq,p4sq,0,0,0,0)
+ !
+ else if (choix_kinem == 6) then
+ !
+ verif2(3:6) = f4p4m("n+4",s_var,t_var,p1sq,p2sq,p3sq,p4sq,0,0,0,0)
+ !
+ end if
+ !
+ else if (choix == 8) then
+ !
+ ! By default, mu2_scale_par = 1._ki
+ !
+ res6 = c44(s_null)+b33(2,(/3/))
+ !
+ ! note that 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 = c44(s_null) +b33(2,(/3/))
+ !
+ end if
+ !
+ call cpu_time(ti2)
+ !
+ ! The results are written to the file with unit 17
+ !
+ write (17,*) 'The kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p4'
+ write (17,*) ' \ / '
+ write (17,*) ' \ (4) / '
+ write (17,*) ' |----<----| '
+ write (17,*) ' | | '
+ write (17,*) ' (1) | |(3) '
+ write (17,*) ' | | '
+ write (17,*) ' |---->----| '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3'
+ write (17,*) ''
+ write (17,*) 'p1+p2+p3+p4 = 0'
+ write (17,*) ''
+ write (17,*) '(p1+p2)^2 =',s_var
+ write (17,*) '(p2+p3)^2 =',t_var
+ write (17,*) '(p1)^2 =',p1sq
+ write (17,*) '(p2)^2 =',p2sq
+ write (17,*) '(p3)^2 =',p3sq
+ write (17,*) '(p4)^2 =',p4sq
+ write (17,*) 'm1^2 =',m1sq
+ write (17,*) 'm2^2 =',m2sq
+ write (17,*) 'm3^2 =',m3sq
+ write (17,*) 'm4^2 =',m4sq
+ 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,'(" 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 (6,*) ''
+ 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 (17,*) ''
+ !
+ if ( ((choix == 5) .or. (choix == 6) .or. (choix == 7)) .and. (choix_kinem < 7) ) then
+ !
+ write (17,*) 'Check with dedicated function:'
+ write (17,'(" 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif2(1),verif2(2)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif2(3),verif2(4)
+ write (17,'("+ 1 * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif2(5),verif2(6)
+ !
+ !
+ write (6,*) 'Check with dedicated function:'
+ write (6,'(" 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif2(1),verif2(2)
+ write (6,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif2(3),verif2(4)
+ write (6,'("+ 1 * (",e16.10,1x,"+ I*",1x,e16.10,")")') verif2(5),verif2(6)
+ !
+ end if
+ if (choix == 8) 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,*) ''
+ end if
+ !
+ write (17,*) 'CPU time=',ti2-ti1
+ !
+ ! 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/table_of_results_3point_option1.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option1.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option1.txt (revision 119)
@@ -0,0 +1,73 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 1 when prompted to test 3-point functions with one off-shell leg and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+(scalar three-point function in n dimensions)
+
+1/epsilon^2 * (-.5000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.3465735903E+00 + I* 0.0000000000E+00)
++ (-.1201132535E+00 + I* 0.0000000000E+00)
+
+1
+(three-point function in n dimensions with one Feynman parameter)
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5000000000E+00 + I* 0.0000000000E+00)
++ (0.6534264097E+00 + I* 0.0000000000E+00)
+
+2
+(three-point function in n dimensions with two Feynman parameters)
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2500000000E+00 + I* 0.0000000000E+00)
++ (0.5767132049E+00 + I* 0.0000000000E+00)
+
+
+3
+(three-point function in n dimensions with three Feynman parameters)
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (0.2455865810E+00 + I* 0.0000000000E+00)
+
+
+4
+(scalar three-point function in n+2 dimensions)
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.1153426410E+01 + I* 0.0000000000E+00)
+
+
+5
+(three-point function in n+2 dimensions with one Feynman parameter)
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3289199144E+00 + I* 0.0000000000E+00)
+
+
+And 6, the checking of the mu independence
+
+1/epsilon^2 * (-.5000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.3465735903E+00 + I* 0.0000000000E+00)
++ (-.1201132535E+00 + I* 0.0000000000E+00)
+
+ The preceding result has been computed with mu^2= 1.0000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.0000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (-.5000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1416606672E+01 + I* 0.0000000000E+00)
++ (-.2006774463E+01 + I* 0.0000000000E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (-.5000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1416606672E+01 + I* 0.0000000000E+00)
++ (-.2006774463E+01 + I* 0.0000000000E+00)
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option2.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option2.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option2.txt (revision 119)
@@ -0,0 +1,86 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 2 when prompted to test 3-point functions with two off-shell legs and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2559656385E-01 + I* 0.4487989505E-01)
++ (-.1523668835E+00 + I* -.1033397773E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2559656385E-01 + I* 0.4487989505E-01)
++ (-.1523668835E+00 + I* -.1033397773E+00)
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2559656385E-01 + I* -.4487989505E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2559656385E-01 + I* -.4487989505E-01)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.3827098791E-02 + I* -.1923424074E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.3827098791E-02 + I* -.1923424074E-01)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.8532187949E-02 + I* -.1495996502E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.8532187949E-02 + I* -.1495996502E-01)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (0.4191894619E+00 + I* -.2243994753E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (0.4191894619E+00 + I* -.2243994753E+00)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (0.1952853762E+00 + I* -.7479982509E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (0.1952853762E+00 + I* -.7479982509E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2559656385E-01 + I* 0.4487989505E-01)
++ (-.1523668835E+00 + I* -.1033397773E+00)
+
+ The preceding result has been computed with mu^2= 1.0000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.0000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2559656385E-01 + I* 0.4487989505E-01)
++ (-.6210417115E-01 + I* 0.5492291294E-01)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2559656385E-01 + I* 0.4487989505E-01)
++ (-.6210417115E-01 + I* 0.5492291294E-01)
+
Index: 95/branches/golem95_without_olo_cmake/demos/demo_6point.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_6point.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_6point.f90 (revision 119)
@@ -0,0 +1,362 @@
+!
+! This program computes form factors for the six-point functions and related
+! (by pinches) diagrams with less external legs.
+! 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
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type
+ use form_factor_3p ! export all
+ use form_factor_4p ! export all
+ use form_factor_5p ! export all
+ use form_factor_6p ! export all
+ use constante, only: s_null
+ use spinor, only: scalar ! to get the function scalar
+ use parametre, only: mu2_scale_par
+ !
+ implicit none
+ !
+ type(form_factor) :: res6
+ real(ki) :: t1,t2
+ real(ki), dimension(4) :: p1,p2,p3,p4,p5,p6
+ real(ki), dimension(4) :: p12,p23,p34,p45,p56,p61,p123,p234,p345,p123456
+ integer :: choix
+ !
+ ! Opening of the error file
+ !
+ open(unit=19,file='error_6point.txt',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='test6point.txt',status='unknown')
+ !
+ !
+ ! This is the entries of the S matrix
+ ! defined as S(i,j) = (q_i - q_j)^2 where the q's are
+ ! the momentum flowing in the propagators
+ ! It is related to the cuts of the following diagram
+ ! All the momenta are incoming : p1+p2+p3+p4+p5+p6 = 0
+ !
+ ! p6 p5
+ ! \ /
+ ! \ (5) /
+ ! /---<---\ (4)
+ ! (6) / \
+ ! p1 ____/ \____ p4
+ ! \ /
+ ! (1) \ / (3)
+ ! \--->---/
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ ! S(1,3) = (p2+p3)^2
+ ! S(1,4) = (p2+p3+p4)^2
+ ! S(1,5) = (p1+p6)^2
+ ! S(2,4) = (p3+p4)^2
+ ! S(2,5) = (p3+p4+p5)^2
+ ! S(2,6) = (p1+p2)^2
+ ! S(3,5) = (p4+p5)^2
+ ! S(3,6) = (p4+p5+p6)^2
+ ! S(4,6) = (p5+p6)^2
+ ! S(1,2) = p2^2
+ ! S(2,3) = p3^2
+ ! S(3,4) = p4^2
+ ! S(4,5) = p5^2
+ ! S(5,6) = p6^2
+ ! S(1,6) = p1^2
+ !
+ ! we define a set of four momenta which obey the different constraints
+ p1 = (/ 0.5_ki , 0.0_ki , 0.0_ki , 0.5_ki /)
+ p2 = (/ 0.5_ki , 0.0_ki , 0.0_ki , -0.5_ki /)
+ p3= (/ -0.185986759664737864811227397267961_ki, 4.452834165071030414484400000000003E-0002_ki,&
+ &-4.312345594415791655285000000000000E-0002_ki, 1.112066130492704585375100000000000E-0002_ki/)
+ p4= (/ -0.326011971996721328093116000000000_ki, -8.549197530383799426001400000000000E-0002_ki,&
+ & -9.126117670433854522915600000000000E-0002_ki, 0.244992501253361860680258000000000_ki /)
+ p5= (/ -0.233498949364477610783116773003482_ki, -0.116776431857305545980452000000000_ki,&
+ & 0.191553925634582344894596000000000_ki, -6.474656663462434458278200000000000E-0002_ki /)
+ p6= (/ -0.254502318974063196312539829728557_ki, 0.157740065510433236095622000000000_ki,&
+ & -5.716929298608588311259000000000000E-0002_ki, -0.191366595923664561951227000000000_ki /)
+! p3 = -(/ 0.19178191094778038_ki , 0.12741179719516801_ki , 0.08262476614744381_ki , 0.11713105190921771_ki /)
+! p4 = -(/ 0.33662712284553753_ki , -0.06648281097623857_ki , -0.3189378514746887_ki , -0.08471424069583446_ki /)
+! p5 = -(/ 0.21604814388379073_ki , -0.20363139428835617_ki , 0.044157623555325_ki , 0.0571065672034082_ki /)
+! p6 = -(/ 0.2555428223228916_ki , 0.1427024080694266_ki , 0.19215546177191994_ki , -0.08952337841679145_ki /)
+ !
+ p12 = p1 + p2
+ p23 = p2 + p3
+ p234 = p2+p3+p4
+ p61 = p1 + p6
+ p34 = p3 + p4
+ p345 = p34 + p5
+ p45 = p4 + p5
+ p123 = p12 + p3
+ p56 = p5 + p6
+ !
+ ! 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(6)
+ !
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.0_ki
+ s_mat(1,2) = scalar(p2,p2)
+ s_mat(1,3) = scalar(p23,p23)
+ s_mat(1,4) = scalar(p234,p234)
+ s_mat(1,5) = scalar(p61,p61)
+ s_mat(1,6) = scalar(p1,p1)
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.0_ki
+ s_mat(2,3) = scalar(p3,p3)
+ s_mat(2,4) = scalar(p34,p34)
+ s_mat(2,5) = scalar(p345,p345)
+ s_mat(2,6) = scalar(p12,p12)
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.0_ki
+ s_mat(3,4) = scalar(p4,p4)
+ s_mat(3,5) = scalar(p45,p45)
+ s_mat(3,6) = scalar(p123,p123)
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.0_ki
+ s_mat(4,5) = scalar(p5,p5)
+ s_mat(4,6) = scalar(p56,p56)
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = 0.0_ki
+ s_mat(5,6) = scalar(p6,p6)
+ !
+ s_mat(6,1) = s_mat(1,6)
+ s_mat(6,2) = s_mat(2,6)
+ s_mat(6,3) = s_mat(3,6)
+ s_mat(6,4) = s_mat(4,6)
+ s_mat(6,5) = s_mat(5,6)
+ s_mat(6,6) = 0.0_ki
+ !
+ ! 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 has to compute:'
+ write (*,*) '0) form factor for six-point function, rank 0'
+ write (*,*) '1) form factor for six-point function, rank 4 (z1^2*z2*z3) '
+ write (*,*) '2) form factor for diagram where propagator 3 is pinched, rank 0'
+ write (*,*) '3) form factor for diagram where props. 2,5 are pinched, rank 0'
+ write (*,*) '4) form factor for diagram where props. 2,4,6 are pinched, rank 0'
+ read (*,*) choix
+ write (*,*) 'The result has been written to the file test6point.txt'
+ !
+ !
+ call cpu_time(t1)
+ !
+ !
+ ! To change the value of mu^2 (in GeV) (set to 1. by default)
+ ! uncomment this line
+ !
+ !mu2_scale_par = 12._ki
+ !
+ write (17,*) 'The kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p6 p5 '
+ write (17,*) ' \ / '
+ write (17,*) ' \ (5) / '
+ write (17,*) ' /---<---\ '
+ write (17,*) ' (6) / \ (4) '
+ write (17,*) ' p1 ____/ \____ p4 '
+ write (17,*) ' \ / '
+ write (17,*) ' (1) \ / (3) '
+ write (17,*) ' \--->---/ '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3 '
+ write (17,*) ''
+ write (17,*) ' S(1,3) = (p2+p3)^2=',s_mat(1,3)
+ write (17,*) ' S(1,4) = (p2+p3+p4)^2=',s_mat(1,4)
+ write (17,*) ' S(1,5) = (p1+p6)^2=',s_mat(1,5)
+ write (17,*) ' S(2,4) = (p3+p4)^2=',s_mat(2,4)
+ write (17,*) ' S(2,5) = (p3+p4+p5)^2=',s_mat(2,5)
+ write (17,*) ' S(2,6) = (p1+p2)^2=',s_mat(2,6)
+ write (17,*) ' S(3,5) = (p4+p5)^2=',s_mat(3,5)
+ write (17,*) ' S(3,6) = (p4+p5+p6)^2=',s_mat(3,6)
+ write (17,*) ' S(4,6) = (p5+p6)^2=',s_mat(4,6)
+ write (17,*) ' S(1,2) = p2^2=',s_mat(1,2)
+ write (17,*) ' S(2,3) = p3^2=',s_mat(2,3)
+ write (17,*) ' S(3,4) = p4^2=',s_mat(3,4)
+ write (17,*) ' S(4,5) = p5^2=',s_mat(4,5)
+ write (17,*) ' S(5,6) = p6^2=',s_mat(5,6)
+ write (17,*) ' S(1,6) = p1^2=',s_mat(6,1)
+ write (17,*) '(mu)^2 =',mu2_scale_par
+ write (17,*) ''
+ !
+ if (choix == 0) then
+ !
+ ! form factor for six-point function, rank 0
+ !
+ res6 = a60(s_null)
+ !
+ else if (choix == 1) then
+ !
+ ! form factor for six-point function, rank 4
+ !
+ res6 = a64(1,1,2,3,s_null)
+ !
+ else if (choix == 2) then
+ !
+ ! form factor for pinched diagram, rank 0
+ ! the propagator 3 is pinched
+ !
+ !
+ ! p1 p6
+ ! \ /
+ ! \ (6) /
+ ! |---<---\ (5)
+ ! | \
+ ! | \____ p5
+ ! (1)| /
+ ! | / (4)
+ ! |--->---/
+ ! / (2) \
+ ! / \
+ ! p2 p3+p4
+ !
+ !
+ write (17,*) 'Since the propagator 3 is pinched'
+ write (17,*) 'the reduced kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p6 '
+ write (17,*) ' \ / '
+ write (17,*) ' \ (6) / '
+ write (17,*) ' |---<---\ (5) '
+ write (17,*) ' | \ '
+ write (17,*) ' | \____ p5'
+ write (17,*) '(1) | / '
+ write (17,*) ' | / (4) '
+ write (17,*) ' |--->---/ '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3+p4 '
+ !
+ !
+ res6 = a50((/3/))
+ !
+ else if (choix == 3) then
+ !
+ ! form factor for pinched diagram, rank 0
+ ! the propagators 2 and 5 are pinched
+ !
+ !
+ ! p1 p5+p6
+ ! \ /
+ ! \ (6) /
+ ! |---<---|
+ ! | |
+ ! (1)| |(4)
+ ! | |
+ ! |--->---|
+ ! / (3) \
+ ! / \
+ ! p2+p3 p4
+ !
+ write (17,*) 'Since the propagators 2 and 5 are pinched'
+ write (17,*) 'the reduced kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p5+p6'
+ write (17,*) ' \ / '
+ write (17,*) ' \ (6) / '
+ write (17,*) ' |---<-----| '
+ write (17,*) ' | | '
+ write (17,*) ' (1) | | (4) '
+ write (17,*) ' | | '
+ write (17,*) ' |--->-----| '
+ write (17,*) ' / (3) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2+p3 p4 '
+ write (17,*) ''
+ !
+ !
+ res6 = a40((/2,5/))
+ !
+ else if (choix == 4) then
+ !
+ ! form factor for pinched diagram, rank 0
+ ! the propagator 2, 4 and 6 are pinched
+ !
+ ! |
+ ! | p1+p6
+ ! |
+ ! /\
+ ! / \
+ ! (1) / \ (5)
+ ! / \
+ ! /--->----\
+ ! / (3) \
+ ! / \
+ ! p2+p3 p4+p5
+ !
+ write (17,*) 'Since the propagators 2, 4 and 6 are pinched'
+ write (17,*) 'the reduced kinematics is:'
+ write (17,*) ''
+ write (17,*) ' | '
+ write (17,*) ' | p1+p6 '
+ write (17,*) ' | '
+ write (17,*) ' /\ '
+ write (17,*) ' / \ '
+ write (17,*) ' (1) / \ (5) '
+ write (17,*) ' / \ '
+ write (17,*) ' /--->----\ '
+ write (17,*) ' / (3) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2+p3 p4+p5 '
+ write (17,*) ''
+ !
+ !
+ res6 = a30((/2,4,6/))
+ !
+ end if
+ !
+ call cpu_time(t2)
+ !
+ write (17,*) ''
+ write (17,*) 'normalisation:'
+ 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,'(" 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 (17,*) 'CPU time=',t2-t1
+ !
+ !
+ ! 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/table_of_results_3point_option3.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option3.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option3.txt (revision 119)
@@ -0,0 +1,92 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 3 when prompted to test 3-point functions with three off-shell legs and no internal masses (a finite triangle)
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6570147692E-01 + I* -.5559947951E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6570147692E-01 + I* -.5559947951E-01)
+
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2252806044E-01 + I* -.2617993878E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2252806044E-01 + I* -.2617993878E-01)
+
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.4930459933E-02 + I* -.8569735914E-02)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.4930459933E-02 + I* -.8569735914E-02)
+
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.8719841754E-02 + I* -.1236274887E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.8719841754E-02 + I* -.1236274887E-01)
+
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (0.9205008753E+00 + I* -.9040466952E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (0.9205008753E+00 + I* -.9040466952E-01)
+
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (0.2763668639E+00 + I* -.4363323130E-01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (0.2763668639E+00 + I* -.4363323130E-01)
+
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6570147692E-01 + I* -.5559947951E-01)
+
+ The preceding result has been computed with mu^2= 1.0000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.0000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6570147692E-01 + I* -.5559947951E-01)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6570147692E-01 + I* -.5559947951E-01)
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option4.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option4.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option4.txt (revision 119)
@@ -0,0 +1,92 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 4 when prompted to test 3-point functions with two off-shell legs and one internal mass (which is QCDLoop triangle 3)
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9219333263E-02 + I* 0.0000000000E+00)
++ (-.3950502111E-01 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9219333263E-02 + I* 0.0000000000E+00)
++ (-.3950502111E-01 + I* 0.0000000000E+00)
+
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5053407248E-02 + I* 0.0000000000E+00)
++ (-.1734222527E-01 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5053407248E-02 + I* 0.0000000000E+00)
++ (-.1734222527E-01 + I* 0.0000000000E+00)
+
+
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2208685406E-02 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2208685406E-02 + I* 0.0000000000E+00)
+
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2730442132E-02 + I* 0.0000000000E+00)
++ (-.7129432221E-02 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2730442132E-02 + I* 0.0000000000E+00)
++ (-.7129432221E-02 + I* 0.0000000000E+00)
+
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (0.1419810811E+01 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (0.1419810811E+01 + I* 0.0000000000E+00)
+
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (0.4210574368E+00 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (0.4210574368E+00 + I* 0.0000000000E+00)
+
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9219333263E-02 + I* 0.0000000000E+00)
++ (-.3950502111E-01 + I* 0.0000000000E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9219333263E-02 + I* 0.0000000000E+00)
++ (-.6994328232E-02 + I* 0.0000000000E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9219333263E-02 + I* 0.0000000000E+00)
++ (-.6994328232E-02 + I* 0.0000000000E+00)
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option5.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option5.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option5.txt (revision 119)
@@ -0,0 +1,94 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 5 when prompted to test 3-point functions with one off-shell leg and one on-shell massive leg (one internal mass, corresponding to QCDLoop triangle 4)
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.2500000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5578588783E-01 + I* 0.1570796327E+01)
++ (-.3357808035E+01 + I* 0.8790424241E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.2500000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5578588783E-01 + I* 0.1570796327E+01)
++ (-.3357808035E+01 + I* 0.8790424241E+00)
+
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.9806730997E+00 + I* -.2692793703E+01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.9806730997E+00 + I* -.2692793703E+01)
+
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.2467904429E-01 + I* -.1602853395E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.2467904429E-01 + I* -.1602853395E+00)
+
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.1566829569E+00 + I* -.7144146559E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.1566829569E+00 + I* -.7144146559E+00)
+
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.8261797198E+00 + I* -.4487989505E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.8261797198E+00 + I* -.4487989505E+00)
+
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3700516548E+00 + I* -.2564565432E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3700516548E+00 + I* -.2564565432E+00)
+
+
+6
+
+1/epsilon^2 * (0.2500000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5578588783E-01 + I* 0.1570796327E+01)
++ (-.3357808035E+01 + I* 0.8790424241E+00)
+
+ The preceding result has been computed with mu^2= 1.0000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.0000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.2500000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9373760190E+00 + I* 0.1570796327E+01)
++ (-.1606684564E+01 + I* 0.6418236583E+01)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.2500000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9373760190E+00 + I* 0.1570796327E+01)
++ (-.1606684564E+01 + I* 0.6418236583E+01)
+
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option6.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option6.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option6.txt (revision 119)
@@ -0,0 +1,92 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 6 when prompted to test 3-point functions with two on-shell massive legs (one internal mass, corresponding to QCDLoop triangle 5)
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.3609437912E+00 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.3609437912E+00 + I* 0.0000000000E+00)
+
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.1609437912E+00 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.1609437912E+00 + I* 0.0000000000E+00)
+
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5000000000E-01 + I* 0.0000000000E+00)
++ (0.6952810438E-01 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5000000000E-01 + I* 0.0000000000E+00)
++ (0.6952810438E-01 + I* 0.0000000000E+00)
+
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (-.5722875423E-02 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (-.5722875423E-02 + I* 0.0000000000E+00)
+
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.6952810438E+00 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.6952810438E+00 + I* 0.0000000000E+00)
+
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.1762047924E+00 + I* 0.0000000000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.1762047924E+00 + I* 0.0000000000E+00)
+
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.3609437912E+00 + I* 0.0000000000E+00)
+
+ The preceding result has been computed with mu^2= 1.0000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.0000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.8307738782E-02 + I* 0.0000000000E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1000000000E+00 + I* 0.0000000000E+00)
++ (0.8307738782E-02 + I* 0.0000000000E+00)
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option7.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option7.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_3point_option7.txt (revision 119)
@@ -0,0 +1,93 @@
+Triangles
+
+After a successful make in the demos directory, run ./demo_3point for the three-point functions, and give 7 when prompted to test 3-point functions with one off-shell leg and two on-shell massive legs (two internal masses, corresponding to QCDLoop triangle 6)
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.9491292000E+00 + I* -.3587970428E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.9491292000E+00 + I* -.3587970428E+00)
+
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.1126941704E+01 + I* 0.4456824000E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.1126941704E+01 + I* 0.4456824000E+00)
+
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.2279825281E-01 + I* -.1528510941E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.2279825281E-01 + I* -.1528510941E+00)
+
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.1275118790E+01 + I* 0.1116081936E+01)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.1275118790E+01 + I* 0.1116081936E+01)
+
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.5016584189E+00 + I* -.4907324601E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.5000000000E+00 + I* 0.0000000000E+00)
++ (-.5016584189E+00 + I* -.4907324601E+00)
+
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.2783305841E+00 + I* -.1635774867E+00)
+ Check with dedicated function:
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1666666667E+00 + I* 0.0000000000E+00)
++ (-.2783305841E+00 + I* -.1635774867E+00)
+
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.9491292000E+00 + I* -.3587970428E+00)
+
+ The preceding result has been computed with mu^2= 1.0000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.0000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.1262644697E+01 + I* 0.1059645232E+01)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.8890625184E-01 + I* 0.4022397214E+00)
++ (-.1262644697E+01 + I* 0.1059645232E+01)
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/SusyLandau.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/SusyLandau.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/SusyLandau.f90 (revision 119)
@@ -0,0 +1,136 @@
+! computes the Susy gg to Hbb example to scan Landau singularity
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type
+ use form_factor_4p
+ use parametre
+ use constante
+ !
+ implicit none
+ !
+ type(form_factor) :: res6
+ real(ki) :: ti1,ti2
+ real(ki) :: p1sq,p2sq,p3sq,p4sq
+ real(ki) :: s_var,t_var,s2,s2min,s2max,s,sqrts,s1
+ integer :: Nsteps,istep
+ real(ki) :: mu02,Gamsquark,Gammaxi
+ complex(ki) :: m1sq,m2sq,m3sq,m4sq
+ real(ki) :: msquark,mxi,mH
+ !
+ ! width:
+ Gamsquark=3.5_ki
+ Gammaxi=1.5_ki
+ !Gamsquark=0._ki
+ !Gammaxi=0._ki
+ !
+ msquark=800._ki
+ mxi=200._ki
+ !
+ mH=450._ki
+ !
+ sqrts = 1700._ki
+ s=sqrts**2
+ s1 = 2.0_ki * (msquark*msquark + mxi*mxi)
+ !
+ !s2min = mH**2*s/s1+1000._ki
+ !s2max = mH**2+s-s1
+ s2min = 900._ki**2
+ s2max=1200._ki**2
+ Nsteps = 200
+ !
+ !
+ open(unit=19,file='errorLandau.txt',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ !open(unit=16,file='SusyLandau.dat',status='unknown')
+ open(unit=16,file='SusyLandauC.dat',status='unknown')
+ open(unit=17,file='SusyLandau.txt',status='unknown')
+ !
+ t_var = s1
+ !
+ p1sq = s
+ p2sq = 0.0_ki
+ p3sq = mH**2
+ p4sq = 0.0_ki
+ ! m1sq=msquark**2
+ m1sq=cmplx(msquark**2,-msquark*Gamsquark,ki)
+ m2sq=cmplx(mxi**2,-mxi*Gammaxi,ki)
+ ! m2sq=mxi**2
+ m3sq=m2sq
+ m4sq=m1sq
+ !
+ call cpu_time(ti1)
+ !
+ call initgolem95(4)
+ !
+ do istep = 0, Nsteps
+ !
+ s2 = s2min + istep * (s2max - s2min) / real(Nsteps, ki)
+ s_var = s2
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = -2._ki*m1sq
+ s_mat(1,2) = p2sq-m1sq-m2sq
+ s_mat(1,3) = t_var-m1sq-m3sq
+ s_mat(1,4) = p1sq-m1sq-m4sq
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = -2._ki*m2sq
+ s_mat(2,3) = p3sq-m2sq-m3sq
+ s_mat(2,4) = s_var-m2sq-m4sq
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = -2._ki*m3sq
+ s_mat(3,4) = p4sq-m3sq-m4sq
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = -2._ki*m4sq
+ !
+ !
+ call preparesmatrix()
+ !
+ ! To change the value of mu^2 (in GeV) (set to 1. by default)
+ ! uncomment this line
+ !
+ !mu2_scale_par = 12._ki
+ mu02 = mu2_scale_par
+ !
+ ! Result for the scalar box integral in n dimension
+ !
+ res6 = a40(s_null)
+ !
+ !
+ write (16,'(F16.10,6(1x,F26.16))') sqrt(s2), real(res6%c,ki),aimag(res6%c), &
+ & real(res6%b,ki),aimag(res6%b), &
+ & real(res6%a,ki),aimag(res6%a)
+ ! The results are written to the file with unit 17
+ !
+ write (17,*) ''
+ 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,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(res6%c,ki),aimag(res6%c)
+ !
+ write (6,'("(",e16.10,1x,"+ I*",1x,e16.10,")")"') real(res6%c,ki),aimag(res6%c)
+ write (17,*) ''
+ !
+ !
+ end do ! end loop over s2
+ !
+ call cpu_time(ti2)
+ !
+ write (17,*) 'CPU time=',ti2-ti1
+ !
+ close(16)
+ close(17)
+ close(19)
+ !
+ call exitgolem95()
+ !
+end program main
Index: 95/branches/golem95_without_olo_cmake/demos/demo_cmplx_masses.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_cmplx_masses.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_cmplx_masses.f90 (revision 119)
@@ -0,0 +1,1029 @@
+!
+! computes form factors with complex masses
+!
+!
+program main
+ !
+ use precision_golem ! to get the type ki (for real and complex)
+ use matrice_s
+ use form_factor_type, only: form_factor, operator(-), operator(*), operator(+), assignment(=)
+ use form_factor_3p ! module containing the three-point form factors (export all)
+ use form_factor_1p
+ use form_factor_2p
+ use form_factor_6p
+ use form_factor_5p
+ use form_factor_4p
+ use spinor, only: scalar
+ use parametre
+ !
+ implicit none
+ !
+ type(form_factor) :: res
+ !
+ complex(ki), dimension(6) :: mass_int_sq
+ real(ki) :: t1, t2, s_in
+ real(ki) :: a1, a2, a3, m1, m2, m3
+ complex(ki) :: a1c, a2c, a3c, cz, m1c, m2c,m3c
+ real(ki), dimension(4) :: p1,p2,p3,p4,p5,p6
+ real(ki), dimension(4) :: p12,p23,p34,p45,p56,p61,p123,p234,p345
+ !
+ integer :: b_pin, i, i1, i2, i3, i4, i5 ,i6
+ real(ki), dimension(:), allocatable :: set_s, set_m1, set_m2, set_m3, set_arg1, set_arg2, set_arg3
+ complex(ki), dimension(:), allocatable :: set_m1c, set_m2c, set_m3c, set_arg1c, set_arg2c, set_arg3c
+ logical :: six_test, at, cc
+ !
+ character(len=*), parameter :: formatff = '(a12,": ","(",2ES22.15") , (",2ES22.15") , (",2ES22.15,")")'
+ character(len=*), parameter :: formatff5 = '(a3,"-",5i0," : ","(",2ES22.15") , (",2ES22.15") , (",2ES22.15,")")'
+ character(len=*), parameter :: formatff6 = '(a3,"-",6i0," : ","(",2ES22.15") , (",2ES22.15") , (",2ES22.15,")")'
+ !
+! if_print_warn_par = .true.
+ !
+ call cpu_time(t1)
+ !
+!!! if only real masses are given, the program will either run 6pt-form factors (six_test) or mainly ff1 to ff5.
+!!! results are written to test_ff6_r.txt or test_ff_r.txt or test_ff_r_at.txt
+!!! at triggers 'all triangles' which calculates also triangles that cannot have complex entries.
+!!!
+!!! if masses have an imaginary part, the program writes to test_ff(6)_c.txt.
+ !
+ six_test = .true.
+ cc = .true.
+ at = .false.
+ !
+!!! 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. It includes associated pointers
+!!! to s_mat_r (case rmass and cmass) and s_mat_c (cmass only)
+!!! includes call to allocation_s and initializes the caching system
+ !
+ call initgolem95(6)
+ !
+ p1 = (/ 0.5_ki , 0._ki , 0._ki , 0.5_ki /)
+ p2 = (/ 0.5_ki , 0._ki , 0._ki , -0.5_ki /)
+ p3 = -(/ 0.19178191094778038_ki , 0.12741179719516801_ki , 0.08262476614744381_ki , 0.11713105190921771_ki /)
+ p4 = -(/ 0.33662712284553753_ki , -0.06648281097623857_ki , -0.3189378514746887_ki , -0.08471424069583446_ki /)
+ p5 = -(/ 0.21604814388379073_ki , -0.20363139428835617_ki , 0.044157623555325_ki , 0.0571065672034082_ki /)
+ p6 = -(/ 0.2555428223228916_ki , 0.1427024080694266_ki , 0.19215546177191994_ki , -0.08952337841679145_ki /)
+ !
+ ! p3 = -(/ 0.24721209116616516_ki, 0.11438327254920486_ki, 0.06268384608884053_ki, 0.10558040234674371_ki /)
+ ! p4 = -(/ 0.07213339280895899_ki, 0.06871472648494759_ki, -0.0017424243541284828_ki, 0.021228339189685863_ki /)
+ ! p5 = -(/ 0.1418614527530244_ki, 0.1103700408743443_ki, 0.0107542809493891_ki, 0.0884729975521105_ki /)
+ ! p6 = -(/ 0.5387930632718515_ki, -0.29346803990849674_ki, -0.07169570268410115_ki, -0.21528173908854006_ki /)
+ !
+ p12 = p1 + p2
+ p23 = p2 + p3
+ p234 = p2+p3+p4
+ p61 = p1 + p6
+ p34 = p3 + p4
+ p345 = p34 + p5
+ p45 = p4 + p5
+ p123 = p12 + p3
+ p56 = p5 + p6
+ !
+ !
+!!! Definition of the S matrix
+!!! Fill out only s_mat or s_mat_c
+ !
+ !
+ s_mat(1,1) = 0._ki
+ s_mat(1,2) = scalar(p2,p2)
+ ! s_mat(1,2) = scalar(p12,p12)
+ s_mat(1,3) = scalar(p23,p23)
+ s_mat(1,4) = scalar(p234,p234)
+ s_mat(1,5) = scalar(p61,p61)
+ s_mat(1,6) = scalar(p1,p1)
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0._ki
+ s_mat(2,3) = scalar(p3,p3)
+ s_mat(2,4) = scalar(p34,p34)
+ s_mat(2,5) = scalar(p345,p345)
+ s_mat(2,6) = scalar(p12,p12)
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0._ki
+ s_mat(3,4) = scalar(p4,p4)
+ s_mat(3,5) = scalar(p45,p45)
+ s_mat(3,6) = scalar(p123,p123)
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0._ki
+ s_mat(4,5) = scalar(p5,p5)
+ s_mat(4,6) = scalar(p56,p56)
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = 0._ki
+ s_mat(5,6) = scalar(p6,p6)
+ !
+ s_mat(6,1) = s_mat(1,6)
+ s_mat(6,2) = s_mat(2,6)
+ s_mat(6,3) = s_mat(3,6)
+ s_mat(6,4) = s_mat(4,6)
+ s_mat(6,5) = s_mat(5,6)
+ s_mat(6,6) = 0._ki
+ !
+ !
+ ! Definition of internal masses.
+ !
+ mass_int_sq(1) = cmplx(.037_ki,.0_ki,ki)
+ mass_int_sq(2) = cmplx(.0_ki,.0_ki,ki)
+ mass_int_sq(3) = cmplx(.015_ki,.0_ki,ki)
+ mass_int_sq(4) = cmplx(.05_ki,.0_ki,ki)
+ mass_int_sq(5) = cmplx(.0_ki,.0_ki,ki)
+ mass_int_sq(6) = cmplx(.072_ki,.0_ki,ki)
+ !
+ if (cc) then
+ !
+ mass_int_sq(6) = cmplx(.072_ki,-.0000000001_ki,ki)
+! mass_int_sq(3) = cmplx(.015_ki,-.004101_ki,ki)
+! mass_int_sq(1) = cmplx(.037_ki,-.0180000000001_ki,ki)
+ !
+ end if
+ !
+! mass_int_sq(:) = cmplx(0._ki,0._ki,ki)
+ !
+ ! Finalize entries in s matrix.
+ !
+ do i=1,6
+ !
+ s_mat(i,:) = s_mat(i,:) - mass_int_sq(:) - mass_int_sq(i)
+ !
+ end do
+ !
+!!! This call fills in s_mat_r.
+!!! It also assigns the bit integers in s_mat_p, which describe the positions
+!!! of complex mass entries and zero mass entries. It includes call to init_invs
+ !
+ call preparesmatrix()
+ !
+ call cpu_time(t2)
+ !
+ write (*,*) 'time for set-up: ', t2-t1
+ !
+ write (*,*) '*********************************'
+ write (*,*) 'form factors'
+ !
+ if (six_test) then
+ !
+ if (cc) then
+ !
+ open(unit=17,file='test_ff6_c.txt',status='unknown')
+ !
+ else
+ !
+ open(unit=17,file='test_ff6_r.txt',status='unknown')
+ !
+ end if
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '6pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '6pt - function'
+ !
+ call cpu_time(t1)
+ !
+ i1=0
+ i2=0
+ i3=0
+ i4=0
+ i5=0
+ i6=0
+ i=0
+ !
+ b_pin = 0
+ !
+ res = a60(b_pin)
+ !
+ write (17,formatff6) 'a60',0,0,0,0,0,0, res
+ !
+ do while (i1 .lt. 6)
+ !
+ i1 = i1 + 1
+ if (i1 .eq. i) i1 = i1 + 1
+ write(*,*)'i1',i1
+ res = a61(i1,b_pin)
+ write (17,formatff6) 'a61',0,0,0,0,0,i1, res
+
+ i2 = i1 - 1
+
+ do while (i2 .lt. 6)
+
+ i2 = i2 + 1
+ if (i2 .eq. i) i2 = i2 + 1
+ !write(*,*)'i2',i2
+ res = a62(i1,i2,b_pin)
+ write (17,formatff6) 'a62',0,0,0,0,i1,i2, res
+
+ i3 = i2 - 1
+
+ do while (i3 .lt. 6)
+
+ i3 = i3 + 1
+ if (i3 .eq. i) i3 = i3 + 1
+ ! write(*,*)'i3',i3
+ res = a63(i1,i2,i3,b_pin)
+ write (17,formatff6) 'a63',0,0,0,i1,i2,i3, res
+
+ i4 = i3 - 1
+
+ do while (i4 .lt. 6)
+
+ i4 = i4 + 1
+ if (i4 .eq. i) i4 = i4 + 1
+ ! write(*,*)'i4',i4
+ res = a64(i1,i2,i3,i4,b_pin)
+ write (17,formatff6) 'a64',0,0,i1,i2,i3,i4, res
+ i5 = i4 - 1
+
+ do while (i5 .lt. 6)
+ i5 = i5 + 1
+ if (i5 .eq. i) i5 = i5 + 1
+ ! write(*,*)'i5',i5
+ res = a65(i1,i2,i3,i4,i5,b_pin)
+ write (17,formatff6) 'a65',0,i1,i2,i3,i4,i5, res
+ i6 = i5 - 1
+ do while (i6 .lt. 6)
+ i6 = i6 + 1
+ if (i6 .eq. i) i6 = i6 + 1
+ ! write(*,*)'i5',i5
+ res = a66(i1,i2,i3,i4,i5,i6,b_pin)
+ write (17,formatff6) 'a66',i1,i2,i3,i4,i5,i6, res
+
+ end do
+
+ end do
+
+ end do
+
+ end do
+
+ end do
+
+ end do
+ !
+ call cpu_time(t2)
+ !
+ write(*,*) "time-6pt-gfortran ", t2-t1
+ write(17,*) "time-6pt-gfortran ", t2-t1
+ !
+ else
+ !
+ if (.not. cc) then
+ !
+ if (at) then
+ !
+ open(unit=17,file='test_ff_r_at.txt',status='unknown')
+ !
+ else
+ !
+ open(unit=17,file='test_ff_r.txt',status='unknown')
+ !
+ end if
+ !
+ else
+ !
+ open(unit=17,file='test_ff_c.txt',status='unknown')
+ !
+ end if
+ !
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '6pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '6pt - function'
+ !
+ ! just a few 6pts
+ !
+ b_pin = 0
+ !
+ res = a60(b_pin)
+ write (17,formatff) 'a60', res
+ !
+ res = a61(2,b_pin)
+ write (17,formatff) 'a61-2', res
+ !
+ res = a62(2,3,b_pin)
+ write (17,formatff) 'a62-23', res
+ !
+ res = a63(2,3,5,b_pin)
+ write (17,formatff) 'a63-235', res
+ !
+ res = a64(1,1,2,3,b_pin)
+ write (17,formatff) 'a64-1123 ', res
+ !
+ res = a65(1,3,4,5,6,b_pin)
+ write (17,formatff) 'a65-13456', res
+ !
+ res = a66(1,2,3,4,5,6,b_pin)
+ write (17,formatff) 'a66-123456', res
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '5pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '5pt - function'
+ !
+ !
+ b_pin = 32
+ !
+ i = 5
+ i1 = 0
+ i2 = 0
+ i3 = 0
+ i4 = 0
+ i5 = 0
+ !
+ res = a50(b_pin)
+ write (17,formatff5) 'a50',0,0,0,0,0, res
+ res = b52(b_pin)
+ write (17,formatff5) 'b52',0,0,0,0,0, res
+ res = c54(b_pin)
+ write (17,formatff5) 'c54',0,0,0,0,0, res
+ !
+ do while (i1 .lt. 6)
+ !
+ i1 = i1 + 1
+ if (i1 .eq. i) i1 = i1 + 1
+ !write(*,*)'i1',i1
+ res = a51(i1,b_pin)
+ write (17,formatff5) 'a51',0,0,0,0,i1, res
+ res = b53(i1,b_pin)
+ write (17,formatff5) 'b53',0,0,0,0,i1, res
+ res = c55(i1,b_pin)
+ write (17,formatff5) 'c55',0,0,0,0,i1, res
+
+ i2 = i1 - 1
+
+ do while (i2 .lt. 6)
+
+ i2 = i2 + 1
+ if (i2 .eq. i) i2 = i2 + 1
+ !write(*,*)'i2',i2
+ res = a52(i1,i2,b_pin)
+ write (17,formatff5) 'a52',0,0,0,i1,i2, res
+ res = b54(i1,i2,b_pin)
+ write (17,formatff5) 'b54',0,0,0,i1,i2, res
+ i3 = i2 - 1
+
+ do while (i3 .lt. 6)
+
+ i3 = i3 + 1
+ if (i3 .eq. i) i3 = i3 + 1
+ ! write(*,*)'i3',i3
+ res = a53(i1,i2,i3,b_pin)
+ write (17,formatff5) 'a53',0,0,i1,i2,i3, res
+ res = b55(i1,i2,i3,b_pin)
+ write (17,formatff5) 'b55', 0,0,i1,i2,i3, res
+ i4 = i3 - 1
+
+ do while (i4 .lt. 6)
+
+ i4 = i4 + 1
+ if (i4 .eq. i) i4 = i4 + 1
+ ! write(*,*)'i4',i4
+ res = a54(i1,i2,i3,i4,b_pin)
+ write (17,formatff5) 'a54',0,i1,i2,i3,i4, res
+ i5 = i4 - 1
+
+ do while (i5 .lt. 6)
+ i5 = i5 + 1
+ if (i5 .eq. i) i5 = i5 + 1
+ ! write(*,*)'i5',i5
+ res = a55(i1,i2,i3,i4,i5,b_pin)
+ write (17,formatff5) 'a55',i1,i2,i3,i4,i5, res
+
+ end do
+
+ end do
+
+ end do
+
+ end do
+
+ end do
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '1pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '1pt - function'
+ !
+ res = a10(62)
+ write (17,formatff) 'a10(62)',res
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '2pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '2pt - function'
+ !
+ b_pin = 120
+ cz = cmplx(0._ki,0._ki,ki)
+ m1c = mass_int_sq(6)
+ m2c = mass_int_sq(3)
+ !
+ ! We change the values of the s matrix frequently now.
+ ! Each time preparesmatrix should be called and
+ ! the cache should be reset.
+ !
+ s_mat(1,1) = -2._ki*m1c
+ s_mat(2,2) = -2._ki*m2c
+ !
+ !call ffini
+ ! write (*,*)'lt b0:', B0i(1,real(.234,ki_avh),real(m1,ki_avh),real(m2,ki_avh))
+ !
+ !
+ allocate(set_s(8))
+ set_s = (/ -2.45*m1, 0._ki, (sqrt(m1)-sqrt(m2))**2, m1, m2, 1.0003_ki*m1, &
+ & (sqrt(m1)+sqrt(m2))**2, 3.12_ki*(sqrt(m1)+sqrt(m2))**2 /)
+ !
+ do i=1,8
+ !
+ s_in = set_s(i)
+ s_mat(1,2) = cmplx(s_in,0._ki,ki)-m1c-m2c
+ s_mat(2,1) = s_mat(1,2)
+ !
+ ! We still use a submatrix of the six-dimensional s_matrix....
+ !
+ call preparesmatrix()
+ !
+ !res = a20(b_pin)
+ !temp0 = cmplx(B0i(1,real(s_in,ki_avh),real(m1,ki_avh),real(m2,ki_avh)),kind=ki)
+ !write (17,formatff) 'a20',res
+ !write (*,*) i,' : ', (res%c-temp0)/abs(temp0)
+ !
+ res = a20(b_pin)
+ write (17,formatff) 'a20',res
+ res = a21(1,b_pin)
+ write (17,formatff) 'a21-1',res
+ res = a21(2,b_pin)
+ write (17,formatff) 'a21-2',res
+ res = a22(1,1,b_pin)
+ write (17,formatff) 'a22-11',res
+ res = a22(1,2,b_pin)
+ write (17,formatff) 'a22-12',res
+ res = a22(2,2,b_pin)
+ write (17,formatff) 'a22',res
+
+ res = b22(b_pin)
+ write (17,formatff) 'b22',res
+
+ write (17,*) '******'
+
+ end do
+ !
+ deallocate(set_s)
+ !
+ m2 = 0._ki
+ m2c = cz
+ !
+ s_mat(2,2) = cz
+ !
+ allocate(set_s(5))
+ set_s = (/ -2.45_ki*m1, 0._ki,.672_ki*m1, m1, 1.2003_ki*m1 /)
+ !
+ do i=1,5
+ !
+ s_in = set_s(i)
+ !
+ s_mat(1,2) = cmplx(s_in,0._ki,ki)-m1c-m2c
+ s_mat(2,1) = s_mat(1,2)
+ !
+ call preparesmatrix()
+ !
+ res = a20(b_pin)
+ write (17,formatff) 'a20',res
+ res = a21(1,b_pin)
+ write (17,formatff) 'a21-1',res
+ res = a21(2,b_pin)
+ write (17,formatff) 'a21-2',res
+ res = a22(1,1,b_pin)
+ write (17,formatff) 'a22-11',res
+ res = a22(1,2,b_pin)
+ write (17,formatff) 'a22-12',res
+ res = a22(2,2,b_pin)
+ write (17,formatff) 'a22',res
+ !
+ res = b22(b_pin)
+ write (17,formatff) 'b22',res
+ !
+ write (17,*) '******'
+ !
+ end do
+ !
+ deallocate(set_s)
+ m1 = 0._ki
+ m1c = cz
+ !
+ s_mat(1,1) = cz
+ !
+ allocate(set_s(2))
+ set_s = (/ -.175_ki,.175_ki /)
+ !
+ do i=1,2
+ !
+ s_in = set_s(i)
+ !
+ s_mat(1,2) = cmplx(s_in,0._ki,ki)-m1c-m2c
+ s_mat(2,1) = s_mat(1,2)
+ !
+ call preparesmatrix()
+ !
+ res = a20(b_pin)
+ write (17,formatff) 'a20',res
+ res = a21(1,b_pin)
+ write (17,formatff) 'a21-1',res
+ res = a21(2,b_pin)
+ write (17,formatff) 'a21-2',res
+ res = a22(1,1,b_pin)
+ write (17,formatff) 'a22-11',res
+ res = a22(1,2,b_pin)
+ write (17,formatff) 'a22-12',res
+ res = a22(2,2,b_pin)
+ write (17,formatff) 'a22',res
+ !
+ res = b22(b_pin)
+ write (17,formatff) 'b22',res
+ !
+ write (17,*) '******'
+ !
+ end do
+ !
+ deallocate(set_s)
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '3pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '3pt - function'
+ !
+ b_pin = 112
+ !
+ allocate(set_arg1(17))
+ allocate(set_arg2(17))
+ allocate(set_arg3(17))
+ allocate(set_m1(17))
+ allocate(set_m2(17))
+ allocate(set_m3(17))
+ allocate(set_arg1c(5))
+ allocate(set_arg2c(5))
+ allocate(set_arg3c(5))
+ allocate(set_m1c(5))
+ allocate(set_m2c(5))
+ allocate(set_m3c(5))
+ !
+ m1c = cmplx(real(mass_int_sq(1),ki),0._ki,ki)
+ m2c = cmplx(real(mass_int_sq(3),ki),0._ki,ki)
+ m3c = mass_int_sq(6)
+ !
+ m1 = real(m1c,ki)
+ m2 = real(m2c,ki)
+ m3 = real(m3c,ki)
+ !
+ a1c = cmplx(.238751_ki,0._ki,ki)! - m1c - m2c
+ a2c = cmplx(1.23062_ki,0._ki,ki)! - m2c - m3c
+ a3c = cmplx(.1930573_ki,0._ki,ki)! - m1c - m3c
+ !
+ a1 = real(a1c,ki)
+ a2 = real(a2c,ki)
+ a3 = real(a3c,ki)
+ !
+ !
+ if (at) then
+
+ set_m1 = (/ 0._ki,0._ki,0._ki,0._ki,m1,0._ki,m1,0._ki,0._ki,0._ki,0._ki,m1,m1,0._ki,0._ki,0._ki,m1 /)
+ set_m2 = (/ m2,0._ki,m2,0._ki,0._ki,m2,m2,0._ki,m2,0._ki,m2,m2,m2,0._ki,m2,m2,m2 /)
+ set_m3 = (/ 0._ki,0._ki,0._ki,m3,m3,m3,m3,0._ki,0._ki,m3,m3,0._ki,m3,0._ki,0._ki,m3,m3 /)
+ set_arg1 = (/ 0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,a1,a1,a1,a1 /)
+ set_arg2 = (/ 0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,0._ki,a2,a2,a2,a2,a2,a2,a2,a2,a2,a2 /)
+ set_arg3 = (/ 0._ki,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3,a3 /)
+ !
+ do i=1,17
+ !
+ s_mat(1,1) = -2._ki*set_m1(i)
+ s_mat(2,2) = -2._ki*set_m2(i)
+ s_mat(3,3) = -2._ki*set_m3(i)
+ !
+ s_mat(1,3) = set_arg3(i)
+ s_mat(2,3) = set_arg2(i)
+ s_mat(1,2) = set_arg1(i)
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(3,2) = s_mat(2,3)
+ !
+ call preparesmatrix()
+ !
+ res = a30(b_pin)
+ write (17,formatff) 'a30', res
+ res = a31(1,b_pin)
+ write (17,formatff) 'a31-1', res
+ res = a31(2,b_pin)
+ write (17,formatff) 'a31-2', res
+ res = a31(3,b_pin)
+ write (17,formatff) 'a31-3', res
+ res = a32(1,1,b_pin)
+ write (17,formatff) 'a32-11', res
+ res = a32(1,2,b_pin)
+ write (17,formatff) 'a32-12', res
+ res = a32(1,3,b_pin)
+ write (17,formatff) 'a32-13', res
+ res = a32(2,2,b_pin)
+ write (17,formatff) 'a32-22', res
+ res = a32(2,3,b_pin)
+ write (17,formatff) 'a32-23', res
+ res = a32(3,3,b_pin)
+ write (17,formatff) 'a32-33', res
+ res = a33(1,1,1,b_pin)
+ write (17,formatff) 'a33-111', res
+ res = a33(1,1,2,b_pin)
+ write (17,formatff) 'a33-112', res
+ res = a33(1,1,3,b_pin)
+ write (17,formatff) 'a33-113', res
+ res = a33(1,2,2,b_pin)
+ write (17,formatff) 'a33-122', res
+ res = a33(1,2,3,b_pin)
+ write (17,formatff) 'a33-123', res
+ res = a33(1,3,3,b_pin)
+ write (17,formatff) 'a33-133', res
+ res = a33(2,2,2,b_pin)
+ write (17,formatff) 'a33-222', res
+ res = a33(2,2,3,b_pin)
+ write (17,formatff) 'a33-223', res
+ res = a33(2,3,3,b_pin)
+ write (17,formatff) 'a33-233', res
+ res = a33(3,3,3,b_pin)
+ write (17,formatff) 'a33-333', res
+ res = b32(b_pin)
+ write (17,formatff) 'b32', res
+ res = b33(1,b_pin)
+ write (17,formatff) 'b33-1', res
+ res = b33(2,b_pin)
+ write (17,formatff) 'b33-2', res
+ res = b33(3,b_pin)
+ write (17,formatff) 'b33-3', res
+ !
+ end do
+ !
+ else
+ !
+ cz = cmplx(0._ki,0._ki,ki)
+ set_m1c = (/ cz,cz,m1c,cz,m1c /)
+ set_m2c = (/ cz,m2c,m2c,m2c,m2c /)
+ set_m3c = m3c
+ set_arg1c = (/ cz,cz,cz,a1c,a1c /)
+ set_arg2c = a2c
+ set_arg3c = a3c
+
+ do i=1,5
+ !
+ s_mat(1,1) = -2._ki*set_m1c(i)
+ s_mat(2,2) = -2._ki*set_m2c(i)
+ s_mat(3,3) = -2._ki*set_m3c(i)
+
+ s_mat(1,3) = set_arg3c(i)-set_m1c(i)-set_m3c(i)
+ s_mat(2,3) = set_arg2c(i)-set_m2c(i)-set_m3c(i)
+ if (set_arg1c(i) == cz) then
+ s_mat(1,2) = cz
+ else
+ s_mat(1,2) = set_arg1c(i)-set_m1c(i)-set_m2c(i)
+ end if
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(3,2) = s_mat(2,3)
+ !
+ !
+ call preparesmatrix()
+ !
+ res = a30(b_pin)
+ write (17,formatff) 'a30', res
+ res = a31(1,b_pin)
+ write (17,formatff) 'a31-1', res
+ res = a31(2,b_pin)
+ write (17,formatff) 'a31-2', res
+ res = a31(3,b_pin)
+ write (17,formatff) 'a31-3', res
+ res = a32(1,1,b_pin)
+ write (17,formatff) 'a32-11', res
+ res = a32(1,2,b_pin)
+ write (17,formatff) 'a32-12', res
+ res = a32(1,3,b_pin)
+ write (17,formatff) 'a32-13', res
+ res = a32(2,2,b_pin)
+ write (17,formatff) 'a32-22', res
+ res = a32(2,3,b_pin)
+ write (17,formatff) 'a32-23', res
+ res = a32(3,3,b_pin)
+ write (17,formatff) 'a32-33', res
+ res = a33(1,1,1,b_pin)
+ write (17,formatff) 'a33-111', res
+ res = a33(1,1,2,b_pin)
+ write (17,formatff) 'a33-112', res
+ res = a33(1,1,3,b_pin)
+ write (17,formatff) 'a33-113', res
+ res = a33(1,2,2,b_pin)
+ write (17,formatff) 'a33-122', res
+ res = a33(1,2,3,b_pin)
+ write (17,formatff) 'a33-123', res
+ res = a33(1,3,3,b_pin)
+ write (17,formatff) 'a33-133', res
+ res = a33(2,2,2,b_pin)
+ write (17,formatff) 'a33-222', res
+ res = a33(2,2,3,b_pin)
+ write (17,formatff) 'a33-223', res
+ res = a33(2,3,3,b_pin)
+ write (17,formatff) 'a33-233', res
+ res = a33(3,3,3,b_pin)
+ write (17,formatff) 'a33-333', res
+ res = b32(b_pin)
+ write (17,formatff) 'b32', res
+ res = b33(1,b_pin)
+ write (17,formatff) 'b33-1', res
+ res = b33(2,b_pin)
+ write (17,formatff) 'b33-2', res
+ res = b33(3,b_pin)
+ write (17,formatff) 'b33-3', res
+
+ end do
+
+ end if
+
+ deallocate(set_arg1)
+ deallocate(set_arg2)
+ deallocate(set_arg3)
+ deallocate(set_m1)
+ deallocate(set_m2)
+ deallocate(set_m3)
+ deallocate(set_arg1c)
+ deallocate(set_arg2c)
+ deallocate(set_arg3c)
+ deallocate(set_m1c)
+ deallocate(set_m2c)
+ deallocate(set_m3c)
+ !
+ call exitgolem95()
+ !
+ !
+ write (*,*) '*********************************'
+ write (*,*) ' '
+ write (*,*) '4pt - function'
+ write (17,*) '*********************************'
+ write (17,*) ' '
+ write (17,*) '4pt - function'
+ !
+ b_pin = 0
+ !
+ ! we set up a new s matrix
+ !
+ call initgolem95(4)
+ !
+!!! We scan over QCDLoop Boxes 8,10,12,13 and one finite box
+ !
+ allocate(set_arg1(6))
+ allocate(set_arg2(6))
+ allocate(set_m1(6))
+ !
+ m1c = mass_int_sq(1)
+ m3c = mass_int_sq(6)
+ !
+ m1 = real(m1c,ki)
+ m3 = real(m3c,ki)
+ !
+ a1c = cmplx(.238751_ki,0._ki,ki)! - m1c - m2c
+ a2c = cmplx(1.23062_ki,0._ki,ki)! - m2c - m3c
+ !
+ a1 = real(a1c,ki)
+ a2 = real(a2c,ki)
+ !
+ s_mat(1,1) = cz
+ s_mat(1,3) = cmplx(.1329563_ki,0._ki,ki)
+ s_mat(1,4) = cmplx(.573522_ki,0._ki,ki) - m3c
+ s_mat(2,2) = cz
+ s_mat(2,4) = cmplx(.1493572_ki,0._ki,ki) - m3c
+ s_mat(3,4) = cmplx(1.96387_ki,0._ki,ki) - m3c
+ s_mat(4,4) = -2._ki*m3c
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ !
+ set_arg1 = (/ 0._ki,a1,0._ki,a1,a1,a1 /)
+ set_arg2 = (/ 0._ki,0._ki,0._ki,0._ki,a2,a2 /)
+ set_m1 = (/ 0._ki,0._ki,m1,m1,m1,0._ki /)
+ !
+ do i=1,6 !!!QCDLoop Boxes + finite
+ !
+ s_mat(3,3) = cmplx(-2._ki*set_m1(i),0._ki,ki)
+ s_mat(2,3) = cmplx(set_arg1(i),0._ki,ki)
+ s_mat(1,2) = cmplx(set_arg2(i),0._ki,ki)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(2,1) = s_mat(1,2)
+ !
+ if (i == 6 ) then
+ s_mat(4,4) = 0._ki
+ s_mat = cmplx(real(s_mat,ki),0._ki,ki)
+ end if
+ !
+ call preparesmatrix()
+ !
+ write (17,*) 'i: ', i
+ !
+ res = a40(b_pin)
+ write (17,formatff) 'a40', res
+ res = a41(1,b_pin)
+ write (17,formatff) 'a41-1', res
+ res = a41(2,b_pin)
+ write (17,formatff) 'a41-2', res
+ res = a41(3,b_pin)
+ write (17,formatff) 'a41-3', res
+ res = a41(4,b_pin)
+ write (17,formatff) 'a41-4', res
+ res = a42(1,1,b_pin)
+ write (17,formatff) 'a42-11', res
+ res = a42(1,2,b_pin)
+ write (17,formatff) 'a42-12', res
+ res = a42(1,3,b_pin)
+ write (17,formatff) 'a42-13', res
+ res = a42(1,4,b_pin)
+ write (17,formatff) 'a42-14', res
+ res = a42(2,2,b_pin)
+ write (17,formatff) 'a42-22', res
+ res = a42(2,3,b_pin)
+ write (17,formatff) 'a42-23', res
+ res = a42(2,4,b_pin)
+ write (17,formatff) 'a42-24', res
+ res = a42(3,3,b_pin)
+ write (17,formatff) 'a42-33', res
+ res = a42(3,4,b_pin)
+ write (17,formatff) 'a42-34', res
+ res = a42(4,4,b_pin)
+ write (17,formatff) 'a42-44', res
+ res = a43(1,1,1,b_pin)
+ write (17,formatff) 'a43-111', res
+ res = a43(1,1,2,b_pin)
+ write (17,formatff) 'a43-112', res
+ res = a43(1,1,3,b_pin)
+ write (17,formatff) 'a43-113', res
+ res = a43(1,1,4,b_pin)
+ write (17,formatff) 'a43-114', res
+ res = a43(1,2,2,b_pin)
+ write (17,formatff) 'a43-122', res
+ res = a43(1,2,3,b_pin)
+ write (17,formatff) 'a43-123', res
+ res = a43(1,2,4,b_pin)
+ write (17,formatff) 'a43-124', res
+ res = a43(1,3,3,b_pin)
+ write (17,formatff) 'a43-133', res
+ res = a43(1,3,4,b_pin)
+ write (17,formatff) 'a43-134', res
+ res = a43(1,4,4,b_pin)
+ write (17,formatff) 'a43-144', res
+ res = a43(2,2,2,b_pin)
+ write (17,formatff) 'a43-222', res
+ res = a43(2,2,3,b_pin)
+ write (17,formatff) 'a43-223', res
+ res = a43(2,2,4,b_pin)
+ write (17,formatff) 'a43-224', res
+ res = a43(2,3,3,b_pin)
+ write (17,formatff) 'a43-233', res
+ res = a43(2,3,4,b_pin)
+ write (17,formatff) 'a43-234', res
+ res = a43(2,4,4,b_pin)
+ write (17,formatff) 'a43-244', res
+ res = a43(3,3,3,b_pin)
+ write (17,formatff) 'a43-333', res
+ res = a43(3,3,4,b_pin)
+ write (17,formatff) 'a43-334', res
+ res = a43(3,4,4,b_pin)
+ write (17,formatff) 'a43-344', res
+ res = a43(4,4,4,b_pin)
+ write (17,formatff) 'a43-444', res
+
+ res = a44(1,1,1,1,b_pin)
+ write (17,formatff) 'a44-1111', res
+ res = a44(1,1,1,2,b_pin)
+ write (17,formatff) 'a44-1112', res
+ res = a44(1,1,1,3,b_pin)
+ write (17,formatff) 'a44-1113', res
+ res = a44(1,1,1,4,b_pin)
+ write (17,formatff) 'a44-1114', res
+ res = a44(1,1,2,2,b_pin)
+ write (17,formatff) 'a44-1122', res
+ res = a44(1,1,2,3,b_pin)
+ write (17,formatff) 'a44-1123', res
+ res = a44(1,1,2,4,b_pin)
+ write (17,formatff) 'a44-1124', res
+ res = a44(1,1,3,3,b_pin)
+ write (17,formatff) 'a44-1133', res
+ res = a44(1,1,3,4,b_pin)
+ write (17,formatff) 'a44-1134', res
+ res = a44(1,1,4,4,b_pin)
+ write (17,formatff) 'a44-1144', res
+ res = a44(1,2,2,2,b_pin)
+ write (17,formatff) 'a44-1222', res
+ res = a44(1,2,2,3,b_pin)
+ write (17,formatff) 'a44-1223', res
+ res = a44(1,2,2,4,b_pin)
+ write (17,formatff) 'a44-1224', res
+ res = a44(1,2,3,3,b_pin)
+ write (17,formatff) 'a44-1233', res
+ res = a44(1,2,3,4,b_pin)
+ write (17,formatff) 'a44-1234', res
+ res = a44(1,2,4,4,b_pin)
+ write (17,formatff) 'a44-1244', res
+ res = a44(1,3,3,3,b_pin)
+ write (17,formatff) 'a44-1333', res
+ res = a44(1,3,3,4,b_pin)
+ write (17,formatff) 'a44-1334', res
+ res = a44(1,3,4,4,b_pin)
+ write (17,formatff) 'a44-1344', res
+ res = a44(1,4,4,4,b_pin)
+ write (17,formatff) 'a44-1444', res
+
+ res = a44(2,2,2,2,b_pin)
+ write (17,formatff) 'a44-2222', res
+ res = a44(2,2,2,3,b_pin)
+ write (17,formatff) 'a44-2223', res
+ res = a44(2,2,2,4,b_pin)
+ write (17,formatff) 'a44-2224', res
+ res = a44(2,2,3,3,b_pin)
+ write (17,formatff) 'a44-2233', res
+ res = a44(2,2,3,4,b_pin)
+ write (17,formatff) 'a44-2234', res
+ res = a44(2,2,4,4,b_pin)
+ write (17,formatff) 'a44-2244', res
+ res = a44(2,3,3,3,b_pin)
+ write (17,formatff) 'a44-2333', res
+ res = a44(2,3,3,4,b_pin)
+ write (17,formatff) 'a44-2334', res
+ res = a44(2,3,4,4,b_pin)
+ write (17,formatff) 'a44-2344', res
+ res = a44(2,4,4,4,b_pin)
+ write (17,formatff) 'a44-2444', res
+
+ res = a44(3,3,3,3,b_pin)
+ write (17,formatff) 'a44-3333', res
+ res = a44(3,3,3,4,b_pin)
+ write (17,formatff) 'a44-3334', res
+ res = a44(3,3,4,4,b_pin)
+ write (17,formatff) 'a44-3344', res
+ res = a44(3,4,4,4,b_pin)
+ write (17,formatff) 'a44-3444', res
+
+ res = a44(4,4,4,4,b_pin)
+ write (17,formatff) 'a44-4444', res
+
+ res = b42(b_pin)
+ write (17,formatff) 'b42', res
+ res = b43(1,b_pin)
+ write (17,formatff) 'b43-1', res
+ res = b43(2,b_pin)
+ write (17,formatff) 'b43-2', res
+ res = b43(3,b_pin)
+ write (17,formatff) 'b43-3', res
+ res = b43(4,b_pin)
+ write (17,formatff) 'b43-4', res
+ res = b44(1,1,b_pin)
+ write (17,formatff) 'b44-11', res
+ res = b44(1,2,b_pin)
+ write (17,formatff) 'b44-12', res
+ res = b44(1,3,b_pin)
+ write (17,formatff) 'b44-13', res
+ res = b44(1,4,b_pin)
+ write (17,formatff) 'b44-14', res
+ res = b44(2,2,b_pin)
+ write (17,formatff) 'b44-22', res
+ res = b44(2,3,b_pin)
+ write (17,formatff) 'b44-23', res
+ res = b44(2,4,b_pin)
+ write (17,formatff) 'b44-24', res
+ res = b44(3,3,b_pin)
+ write (17,formatff) 'b44-33', res
+ res = b44(3,4,b_pin)
+ write (17,formatff) 'b44-34', res
+
+ res = c44(b_pin)
+ write (17,formatff) 'c44', res
+
+ end do
+ !
+ close(17)
+ !
+ end if
+ !
+ call exitgolem95()
+ !
+end program main
Index: 95/branches/golem95_without_olo_cmake/demos/demo_tens_rec.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_tens_rec.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_tens_rec.f90 (revision 119)
@@ -0,0 +1,130 @@
+! this program illustrates the use of the function "evaluate"
+! for a given numerator, "evaluate" combines the coefficients
+! C_{i,alpha} in eq.(15) with the corresponding tensor integrals
+!
+! In the example below, the "amplitude" is given by a six-point integral
+! where the numerator consists of three propagators which are also present
+! in the denominator.
+! The scalar three-point function resulting from the direct cancellation of
+! these propagators is compared to the result obtained by expanding
+! the numerator into contracted loop and external momenta, leading to
+! rank 6 hexagons if no propagators are cancelled,
+! rank 4 pentagons if one propagator is cancelled (3 possibilities to cancel 1 prop.),
+! rank 2 boxes if two propagators are cancelled (3 possibilities to cancel 2 props.).
+!
+! the numerator is defined in the module reduction_module in demo_tens_mod.f90
+!
+program reduction_test
+ use precision_golem
+ use tens_rec
+ use tens_comb
+ use form_factor_type, only: form_factor, assignment(=)
+ use reduction_module
+ use array, only: packb, punion, pminus
+ use matrice_s, only: b_ref
+ use parametre
+ implicit none
+
+ integer :: prop1, prop2, prop3, prop4, prop5, prop6
+ integer, dimension(6) :: prop_set
+ integer :: b_prop_set_3, b_prop_set_4, b_prop_set_5, b_prop_set_6
+ integer :: i, case4, case5
+
+ type(form_factor) :: res3
+ type(form_factor), dimension(3) :: res4
+ type(form_factor), dimension(3) :: res5
+ type(form_factor) :: res6
+
+ if_print_warn_par = .true.
+
+ call init_kinematics()
+
+ do prop1 = 1, 4
+ prop_set(1) = prop1
+ do prop2 = prop1 + 1, 5
+ prop_set(2) = prop2
+ do prop3 = prop2 + 1, 6
+ prop_set(3) = prop3
+ pinched(:) = .false.
+ b_prop_set_3 = packb(prop_set(1:3))
+!
+ res3 = evaluate(numerator, rvecs, pminus(b_ref, b_prop_set_3), 0)
+
+ case4 = 1
+ case5 = 1
+ do prop4 = 1, 6
+ if((prop1.eq.prop4).or.(prop2.eq.prop4).or.(prop3.eq.prop4)) &
+ & cycle
+
+ prop_set(4) = prop4
+ b_prop_set_4 = packb(prop_set(1:4))
+ pinched(prop4) = .true.
+!
+ res4(case4) = evaluate(numerator, rvecs, &
+ & pminus(b_ref, b_prop_set_4), 2)
+ case4 = case4 + 1
+
+ do prop5 = 1, 6
+ if((prop1.eq.prop5).or.(prop2.eq.prop5).or.&
+ & (prop3.eq.prop5).or.(prop4.ge.prop5)) cycle
+
+ prop_set(5) = prop5
+ b_prop_set_5 = packb(prop_set(1:5))
+ pinched(prop5) = .true.
+!
+ res5(case5) = evaluate(numerator, rvecs, &
+ & pminus(b_ref, b_prop_set_5), 4)
+ case5 = case5 + 1
+ do prop6 = 1, 6
+ if((prop1.eq.prop6).or.(prop2.eq.prop6).or.&
+ & (prop3.eq.prop6).or.(prop4.ge.prop6).or.&
+ & (prop5.ge.prop6)) cycle!
+
+ prop_set(6) = prop6
+ b_prop_set_6 = packb(prop_set(1:6))
+ pinched(prop6) = .true.
+!
+ res6 = evaluate(numerator, rvecs, &
+ & pminus(b_ref, b_prop_set_6), 6)
+ pinched(prop6) = .false.
+ end do
+ pinched(prop5) = .false.
+ end do
+ pinched(prop4) = .false.
+ end do
+
+ write(*,'(A11,1x,I1,I1,I1)'), "Propagators", prop1, prop2, prop3
+ write(*,'(A11)'), "Double Pole"
+ write(*,'(A10,F24.16,1x,F24.16)'), "tri", res3%a
+ do i = 1,3
+ write(*,'(A9,I1,F24.16,1x,F24.16)'), "box", i, res4(i)%a
+ end do
+ do i = 1,3
+ write(*,'(A9,I1,F24.16,1x,F24.16)'), "pentagon", i, res5(i)%a
+ end do
+ write(*,'(A10,F24.16,1x,F24.16)'), "hexagon", res6%a
+
+ write(*,'(A11)'), "Single Pole"
+ write(*,'(A10,F24.16,1x,F24.16)'), "tri", res3%b
+ do i = 1,3
+ write(*,'(A9,I1,F24.16,1x,F24.16)'), "box", i, res4(i)%b
+ end do
+ do i = 1,3
+ write(*,'(A9,I1,F24.16,1x,F24.16)'), "pentagon", i, res5(i)%b
+ end do
+ write(*,'(A10,F24.16,1x,F24.16)'), "hexagon", res6%b
+
+ write(*,'(A11)'), "Finite Part"
+ write(*,'(A10,F24.16,1x,F24.16)'), "tri", res3%c
+ do i = 1,3
+ write(*,'(A9,I1,F24.16,1x,F24.16)'), "box", i, res4(i)%c
+ end do
+ do i = 1,3
+ write(*,'(A9,I1,F24.16,1x,F24.16)'), "pentagon", i, res5(i)%c
+ end do
+ write(*,'(A10,F24.16,1x,F24.16)'), "hexagon", res6%c
+ end do
+ end do
+ end do
+ call done_kinematics()
+end program reduction_test
Index: 95/branches/golem95_without_olo_cmake/demos/demo_LT.f
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_LT.f (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_LT.f (revision 119)
@@ -0,0 +1,123 @@
+! this program demonstrates how to call Golem form factors
+! using the same syntax as for the call of
+! LoopTools integrals, to facilitate comparisons
+! In addition, the last argument iep has been added
+! to indicate the order of the Laurent expansion in epsilon,
+! in the spirit of QCDLoop (iep = -2,-1,0)
+!
+! For the divergent integrals, a global prefactor
+! Gamma(1-eps)^2/Gamma(1-2*eps)*Gamma(1+eps)*(4*pi)^eps
+! has been extracted
+!
+!
+ program main
+ implicit none
+ real*8 s12,s23,s1,s2,s3,s4,m1,m2,m3,m4,mu2
+ real*8 s34,s45,s51,s5,m5
+ real*8 s56,s61,s234,s345,s123,s6,m6
+ integer iep
+ complex*16 result
+ complex*16 gb0i,gc0i,gd0i,ge0i,gf0i
+ integer nlegs
+ character*6 labels,fname
+ parameter (labels = '123456')
+c
+ nlegs = 4
+c
+ iep = 0
+c
+ mu2 = 1.d0
+c
+ open(unit=17,file='result_demoLT.txt',status='unknown')
+c
+ if (nlegs .eq. 6) then
+ s12 = 100.d0
+ s23 = -2.d0
+ s34 = 6.d0
+ s45 = 7.d0
+ s56 = 4.d0
+ s61 = -9.d0
+ s123 = -8.d0
+ s234 = 11.d0
+ s345 = 13.d0
+ s1 = 0.d0
+ s2 = 0.d0
+ s3 = 0.d0
+ s4 = 0.d0
+ s5 = 0.d0
+ s6 = 0.d0
+ m1 = 0.d0
+ m2 = 0.d0
+ m3 = 0.d0
+ m4 = 0.d0
+ m5 = 0.d0
+ m6 = 0.d0
+ result = gf0i('ff0',s1,s2,s3,s4,s5,s6,s12,s23,s34,s45,s56,
+ # s61,s123,s234,s345,m1,m2,m3,m4,m5,m6,mu2,iep)
+ write(*,*) 'F0i :',result
+ write(17,*) 'F0i =',result
+ elseif (nlegs .eq. 5) then
+ s12 = 100.d0
+ s23 = -2.d0
+ s34 = 6.d0
+ s45 = 7.d0
+ s51 = -4.d0
+ s1 = 0.d0
+ s2 = 0.d0
+ s3 = 0.d0
+ s4 = 0.d0
+ s5 = 0.d0
+ m1 = 0.d0
+ m2 = 0.d0
+ m3 = 0.d0
+ m4 = 0.d0
+ m5 = 0.d0
+ result = ge0i('ee0',s1,s2,s3,s4,s5,s12,s23,s34,s45,s51,
+ # m1,m2,m3,m4,m5,mu2,iep)
+ write(*,*) 'E0i :',result
+ write(17,*) 'E0i =',result
+ elseif (nlegs .eq. 4) then
+ s12 = 100.d0
+ s23 = -2.d0
+ s1 = 3.d0
+ s2 = 4.d0
+ s3 = 5.d0
+ s4 = 6.d0
+ m1 = 0.d0
+ m2 = 0.d0
+ m3 = 0.d0
+ m4 = 0.d0
+ result = gd0i('dd0',s1,s2,s3,s4,s12,s23,m1,m2,m3,m4,mu2,iep)
+ write(*,*) 'D0i :',result
+ write(17,*) 'D0i =',result
+ elseif (nlegs .eq. 3) then
+ s1 = 3.d0
+ s2 = 4.d0
+ s3 = 5.d0
+ m1 = 0.d0
+ m2 = 0.d0
+ m3 = 0.d0
+ result = gc0i('cc0',s1,s2,s3,m1,m2,m3,mu2,iep)
+ write(*,*) 'C0i :',result
+ write(17,*) 'C0i =',result
+ elseif (nlegs .eq. 2) then
+ s1 = 3.d0
+ m1 = 0.d0
+ m2 = 0.d0
+ result = gb0i('bb0',s1,m1,m2,mu2,iep)
+ write(*,*) 'B0i :',result
+ write(17,*) 'B0i =',result
+ endif
+c
+ fname=labels(nlegs:nlegs)//'point'
+c
+ if (iep.eq.0) then
+ write(17,*)' = golem result for finite part of ', fname
+ elseif (iep.eq.-1) then
+ write(17,*)' = golem result for 1/eps part of ' , fname
+ elseif (iep.eq.-2) then
+ write(17,*)' = golem result for 1/eps^2 part of ' , fname
+ endif
+ write(6,*) 'The result has been written to result_demoLT.txt'
+c
+ end
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_5point.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_5point.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_5point.txt (revision 119)
@@ -0,0 +1,37 @@
+Pentagons
+
+After a successful make in the demos directory, run ./demo_5point for the five-point functions. Then the results for each argument (written in test5point.txt) should be:
+
+0
+
+ 1/epsilon^2 * (-.5509259259E-01 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9528225363E-03 + I* -.2079850692E+00)
++ 1 * (0.2799057352E+00 + I* -.3634141963E-03)
+
+
+1
+
+ 1/epsilon^2 * (0.6424901763E-19 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4753972416E-18 + I* 0.3663417497E-18)
++ 1 * (0.1846345267E-02 + I* -.2145014813E-02)
+
+
+2
+
+ 1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1 * (-.8615520644E-04 + I* 0.1230709464E-03)
+
+
+3
+
+ 1/epsilon^2 * (-.3333333333E-01 + I* 0.0000000000E+00)
++ 1/epsilon * (0.7675283643E-01 + I* 0.8124740030E-17)
++ 1 * (-.7634815817E-01 + I* 0.5349353423E-01)
+
+
+4
+
+ 1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1549925400E+00 + I* 0.0000000000E+00)
++ 1 * (0.2635801107E+00 + I* -.4869234252E+00)
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_LT.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_LT.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_LT.txt (revision 119)
@@ -0,0 +1,5 @@
+
+After a successful make in the demos directory, running ./demo_LT should give:
+
+ D0i = (-2.858462627559066E-004,-6.728836349780323E-002)
+ = golem result for finite part of 4point
Index: 95/branches/golem95_without_olo_cmake/demos/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/Makefile.am (revision 119)
@@ -0,0 +1,41 @@
+EXTRA_PROGRAMS= demo_3point demo_4photon demo_4point demo_5point \
+ demo_6point demo_a55_dets_sing demo_detg demo_LT demo_cmplx_masses \
+ SusyLandau
+
+if COMPILE_TENSREC
+EXTRA_PROGRAMS+=demo_tens_rec
+demo_tens_rec_SOURCES=demo_tens_rec.f90 demo_tens_mod.f90
+demo_tens_rec_LDADD=${link_to_golem95}
+endif
+
+LIBAVHOLO=${libdir}/libavh_olo.a
+link_to_golem95=${libdir}/lib@GENERIC_LIBRARY_NAME@.a ${LIBAVHOLO}
+AM_FCFLAGS=-I${pkgincludedir}
+
+demo_3point_SOURCES=demo_3point.f90
+demo_4photon_SOURCES=demo_4photon.f90
+demo_4point_SOURCES=demo_4point.f90
+demo_5point_SOURCES=demo_5point.f90
+demo_6point_SOURCES=demo_6point.f90
+demo_a55_dets_sing_SOURCES=demo_a55_dets_sing.f90
+demo_detg_SOURCES=demo_detg.f90
+demo_LT_SOURCES=demo_LT.f
+demo_cmplx_masses_SOURCES=demo_cmplx_masses.f90
+SusyLandau_SOURCES=SusyLandau.f90
+
+demo_3point_LDADD=${link_to_golem95}
+demo_4photon_LDADD=${link_to_golem95}
+demo_4point_LDADD=${link_to_golem95}
+demo_5point_LDADD=${link_to_golem95}
+demo_6point_LDADD=${link_to_golem95}
+demo_a55_dets_sing_LDADD=${link_to_golem95}
+demo_detg_LDADD=${link_to_golem95}
+demo_LT_LDADD=${link_to_golem95}
+demo_cmplx_masses_LDADD=${link_to_golem95}
+SusyLandau_LDADD=${link_to_golem95}
+
+all-local: ${EXTRA_PROGRAMS}
+
+demo_tens_rec.o: demo_tens_mod.o
+demo_tens_rec.lo: demo_tens_mod.lo
+demo_tens_rec.obj: demo_tens_mod.obj
Index: 95/branches/golem95_without_olo_cmake/demos/demo_tens_mod.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_tens_mod.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_tens_mod.f90 (revision 119)
@@ -0,0 +1,198 @@
+module reduction_module
+ use precision_golem, only: ki
+ use matrice_s
+
+ implicit none
+
+ private
+
+ real(ki), dimension(6), parameter :: s6 = &
+ & (/0.0_ki, .0_ki, 6._ki, 0._ki, 0.0_ki, 0.0_ki/)
+ ! loop propagator masses
+ complex(ki), dimension(6), parameter :: msq6 = (/ &
+ & (0.0_ki, 0.0_ki), &
+ & (.96_ki, -0.0234678_ki), &
+ & (100.230_ki, 0.0_ki), &
+! & (8.0230698238746_ki, 0.0_ki), &
+ & (8.0234343_ki, -20.03452_ki), &
+ & (1.54987724_ki, -0.030000001_ki), &
+ & (0.0_ki, 0.0_ki) &
+ & /)
+! complex(ki), dimension(6), parameter :: msq6 = (/ &
+! & (0.0_ki, 0.0_ki), &
+! & (.0_ki, 0.0_ki), &
+! & (.0_ki, 0.0_ki), &
+! & (.0_ki, 0.0_ki), &
+! & (0.0_ki, 0.0_ki), &
+! & (0.0_ki, 0.0_ki) &
+! & /)
+
+ real(ki), dimension(6, 0:3), public :: rvecs
+ real(ki), dimension(6, 0:3) :: vecs
+ complex(ki), dimension(6,6) :: inv_c, aai
+ real(ki) :: error6
+ logical, dimension(1:6), public :: pinched
+
+ public :: init_kinematics, done_kinematics, numerator,sdot
+
+ interface sdot
+ module procedure sdot_rr
+ module procedure sdot_rc
+ module procedure sdot_cr
+ module procedure sdot_cc
+ end interface
+
+contains
+
+ subroutine init_kinematics()
+ implicit none
+
+ integer :: i,j,k
+
+ real(ki), parameter :: phi = 0.75_ki * 3.141596_ki
+ real(ki), parameter :: chi = 0.25_ki * 3.141596_ki
+ real(ki) :: E12, E1, E2, E3, E4, E5, E6, x
+
+ ! E12 + E1 + E2 = 0
+ ! E1^2 - x^2 = s1
+ ! E2^2 - x^2 = s2
+ ! E1^2 + E2^2 + 2*E1*E2 = E12^2
+ ! s1 + x^2 + s2 + x^2 + 2*E1*E2 = E12^2
+ ! 2*x^2 = E12^2 - s1 - s2 - 2*E1*(-E1-E12)
+ ! 2*x^2 = E12^2 - s1 - s2 + 2*E1^2 + 2*E1*E12
+ ! 0 = s1 + 0.5 * (E12^2 - s1 - s2) + E1*E12
+ ! E1 = - 1/(2*E12) * (E12^2 + s1 - s2)
+
+
+ E3 = -sqrt(1.0_ki+s6(3))
+ E4 = -sqrt(1.0_ki+s6(4))
+ E5 = -sqrt(1.0_ki+s6(5))
+
+ vecs(3,:) = (/E3, 0.0_ki, 0.8_ki, 0.6_ki/)
+ vecs(4,:) = (/E4, 0.6_ki, 0.0_ki, -0.8_ki/)
+ vecs(5,:) = (/E5, sin(chi)*sin(phi), cos(chi)*sin(phi), -cos(phi)/)
+ vecs(6,1:3) = -vecs(5,1:3)-vecs(4,1:3)-vecs(3,1:3)
+
+
+ x = vecs(6,1)**2 + vecs(6,2)**2 + vecs(6,3)**2
+ E6 = -sqrt(x+s6(6))
+ vecs(6,0) = E6
+ E12 = +E3+E4+E5+E6
+
+ E1 = 0.5_ki * ((s6(2) - s6(1))/E12 - E12)
+ E2 = - E12 - E1
+ x = sqrt(0.5_ki) * sqrt(E12*E12 - s6(1) - s6(2) - 2.0_ki * E1 * E2)
+
+ vecs(1,:) = (/E1, 0.0_ki, 0.0_ki, x/)
+ vecs(2,:) = (/E2, 0.0_ki, 0.0_ki, -x/)
+
+ !print*, "k1.k1", sdot(vecs(1,:), vecs(1,:))
+ !print*, "k2.k2", sdot(vecs(2,:), vecs(2,:))
+ !print*, "k3.k3", sdot(vecs(3,:), vecs(3,:))
+ !print*, "k4.k4", sdot(vecs(4,:), vecs(4,:))
+ !print*, "k5.k5", sdot(vecs(5,:), vecs(5,:))
+ !print*, "k6.k6", sdot(vecs(6,:), vecs(6,:))
+
+ rvecs(1,:) = vecs(1,:)
+ do i = 2, 6
+ rvecs(i,:) = rvecs(i-1,:) + vecs(i,:)
+ end do
+
+ call initgolem95(6)
+
+ do i = 1, 6
+
+ do j = 1, 6
+ s_mat(i,j) = &!
+ & sdot(rvecs(j,:)-rvecs(i,:),rvecs(j,:)-rvecs(i,:)) &
+ & - msq6(i) - msq6(j)
+
+ if (abs(s_mat(i,j)) .lt. 1.0E-14) then
+ s_mat(i,j) = 0.0_ki
+ end if
+ end do
+ end do
+ !
+ call preparesmatrix
+ !
+ end subroutine init_kinematics
+
+ subroutine done_kinematics()
+ implicit none
+ call exitgolem95()
+ end subroutine done_kinematics
+
+ function numerator(Q, mu2) result(ans)
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: Q
+ real(ki), intent(in) :: mu2
+ complex(ki) :: ans
+ integer :: i
+
+ ans = 1.0_ki
+
+ do i = 1, 6
+ if (pinched(i)) ans = ans * &
+ & (sdot(Q(:)+rvecs(i,:),Q(:)+rvecs(i,:)) - msq6(i) - mu2)
+ end do
+ end function numerator
+
+ pure function sdot_rr(v,w) result(r)
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: v
+ real(ki), dimension(0:3), intent(in) :: w
+ real(ki) :: r
+
+ r = v(0)*w(0) - v(1)*w(1) - v(2)*w(2) - v(3)*w(3)
+ end function sdot_rr
+
+ pure function sdot_cc(v,w) result(r)
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: v
+ complex(ki), dimension(0:3), intent(in) :: w
+ complex(ki) :: r
+
+ r = v(0)*w(0) - v(1)*w(1) - v(2)*w(2) - v(3)*w(3)
+ end function sdot_cc
+
+ pure function sdot_rc(v,w) result(r)
+ implicit none
+ real(ki), dimension(0:3), intent(in) :: v
+ complex(ki), dimension(0:3), intent(in) :: w
+ complex(ki) :: r
+
+ r = v(0)*w(0) - v(1)*w(1) - v(2)*w(2) - v(3)*w(3)
+ end function sdot_rc
+
+ pure function sdot_cr(v,w) result(r)
+ implicit none
+ complex(ki), dimension(0:3), intent(in) :: v
+ real(ki), dimension(0:3), intent(in) :: w
+ complex(ki) :: r
+
+ r = v(0)*w(0) - v(1)*w(1) - v(2)*w(2) - v(3)*w(3)
+ end function sdot_cr
+
+
+ subroutine rnd_c0(arr)
+ implicit none
+ complex(ki), intent(out) :: arr
+ real(ki) :: re, im
+
+ call random_number(re)
+ call random_number(im)
+ arr = re + (0,1) * im
+ end subroutine rnd_c0
+
+ subroutine rnd_c_arr(arr, sz)
+ implicit none
+ complex(ki), dimension(:,:), intent(out) :: arr
+ integer, dimension(2), intent(in) :: sz
+ real(ki),dimension(sz(1),sz(2)) :: re, im
+
+ call random_number(re)
+ call random_number(im)
+ arr = re + (0,1) * im
+ end subroutine rnd_c_arr
+
+end module reduction_module
Index: 95/branches/golem95_without_olo_cmake/demos/demo_a55_dets_sing.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_a55_dets_sing.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_a55_dets_sing.txt (revision 119)
@@ -0,0 +1,100 @@
+ n theta pt detG Re(A55) Im(A55)
+ 1 0.15550884D+01 0.44993591D+00 0.40488465D+00 -0.32645975D+08 -0.16105414D+08
+ 2 0.15393804D+01 0.44976938D+00 0.40458500D+00 -0.32668985D+08 -0.16116780D+08
+ 3 0.15236724D+01 0.44949188D+00 0.40408590D+00 -0.32708189D+08 -0.16136130D+08
+ 4 0.15079645D+01 0.44910347D+00 0.40338786D+00 -0.32763665D+08 -0.16163504D+08
+ 5 0.14922565D+01 0.44860425D+00 0.40249156D+00 -0.32835523D+08 -0.16198955D+08
+ 6 0.14765485D+01 0.44799435D+00 0.40139788D+00 -0.32923907D+08 -0.16242554D+08
+ 7 0.14608406D+01 0.44727391D+00 0.40010790D+00 -0.33028993D+08 -0.16294388D+08
+ 8 0.14451326D+01 0.44644311D+00 0.39862290D+00 -0.33150992D+08 -0.16354563D+08
+ 9 0.14294247D+01 0.44550216D+00 0.39694435D+00 -0.33290152D+08 -0.16423198D+08
+ 10 0.14137167D+01 0.44445129D+00 0.39507389D+00 -0.33446753D+08 -0.16500433D+08
+ 11 0.13980087D+01 0.44329075D+00 0.39301338D+00 -0.33621118D+08 -0.16586426D+08
+ 12 0.13823008D+01 0.44202084D+00 0.39076485D+00 -0.33813604D+08 -0.16681354D+08
+ 13 0.13665928D+01 0.44064187D+00 0.38833052D+00 -0.34024612D+08 -0.16785415D+08
+ 14 0.13508848D+01 0.43915418D+00 0.38571278D+00 -0.34254583D+08 -0.16898825D+08
+ 15 0.13351769D+01 0.43755813D+00 0.38291423D+00 -0.34504005D+08 -0.17021825D+08
+ 16 0.13194689D+01 0.43585412D+00 0.37993763D+00 -0.34773409D+08 -0.17154678D+08
+ 17 0.13037610D+01 0.43404257D+00 0.37678591D+00 -0.35063378D+08 -0.17297669D+08
+ 18 0.12880530D+01 0.43212393D+00 0.37346218D+00 -0.35374546D+08 -0.17451112D+08
+ 19 0.12723450D+01 0.43009866D+00 0.36996972D+00 -0.35707601D+08 -0.17615346D+08
+ 20 0.12566371D+01 0.42796728D+00 0.36631199D+00 -0.36063291D+08 -0.17790738D+08
+ 21 0.12409291D+01 0.42573030D+00 0.36249258D+00 -0.36442423D+08 -0.17977688D+08
+ 22 0.12252211D+01 0.42338828D+00 0.35851527D+00 -0.36845872D+08 -0.18176626D+08
+ 23 0.12095132D+01 0.42094180D+00 0.35438399D+00 -0.37274584D+08 -0.18388019D+08
+ 24 0.11938052D+01 0.41839145D+00 0.35010281D+00 -0.37729579D+08 -0.18612368D+08
+ 25 0.11780972D+01 0.41573787D+00 0.34567595D+00 -0.38211959D+08 -0.18850218D+08
+ 26 0.11623893D+01 0.41298171D+00 0.34110779D+00 -0.38722912D+08 -0.19102153D+08
+ 27 0.11466813D+01 0.41012366D+00 0.33640284D+00 -0.39263720D+08 -0.19368804D+08
+ 28 0.11309734D+01 0.40716442D+00 0.33156573D+00 -0.39835764D+08 -0.19650854D+08
+ 29 0.11152654D+01 0.40410471D+00 0.32660124D+00 -0.40440538D+08 -0.19949037D+08
+ 30 0.10995574D+01 0.40094530D+00 0.32151426D+00 -0.41079649D+08 -0.20264146D+08
+ 31 0.10838495D+01 0.39768696D+00 0.31630983D+00 -0.41754834D+08 -0.20597036D+08
+ 32 0.10681415D+01 0.39433049D+00 0.31099308D+00 -0.42467969D+08 -0.20948631D+08
+ 33 0.10524335D+01 0.39087674D+00 0.30556925D+00 -0.43221078D+08 -0.21319930D+08
+ 34 0.10367256D+01 0.38732653D+00 0.30004369D+00 -0.44016351D+08 -0.21712010D+08
+ 35 0.10210176D+01 0.38368077D+00 0.29442186D+00 -0.44856156D+08 -0.22126039D+08
+ 36 0.10053096D+01 0.37994033D+00 0.28870931D+00 -0.45743056D+08 -0.22563279D+08
+ 37 0.98960169D+00 0.37610615D+00 0.28291167D+00 -0.46679826D+08 -0.23025097D+08
+ 38 0.97389372D+00 0.37217917D+00 0.27703467D+00 -0.47669478D+08 -0.23512977D+08
+ 39 0.95818576D+00 0.36816036D+00 0.27108410D+00 -0.48715279D+08 -0.24028527D+08
+ 40 0.94247780D+00 0.36405071D+00 0.26506584D+00 -0.49820776D+08 -0.24573497D+08
+ 41 0.92676983D+00 0.35985124D+00 0.25898583D+00 -0.50989831D+08 -0.25149788D+08
+ 42 0.91106187D+00 0.35556298D+00 0.25285007D+00 -0.52226646D+08 -0.25759469D+08
+ 43 0.89535391D+00 0.35118699D+00 0.24666461D+00 -0.53535804D+08 -0.26404798D+08
+ 44 0.87964594D+00 0.34672435D+00 0.24043556D+00 -0.54922306D+08 -0.27088239D+08
+ 45 0.86393798D+00 0.34217617D+00 0.23416906D+00 -0.56391619D+08 -0.27812484D+08
+ 46 0.84823002D+00 0.33754355D+00 0.22787130D+00 -0.57949730D+08 -0.28580481D+08
+ 47 0.83252205D+00 0.33282765D+00 0.22154849D+00 -0.59603198D+08 -0.29395462D+08
+ 48 0.81681409D+00 0.32802963D+00 0.21520688D+00 -0.61359229D+08 -0.30260974D+08
+ 49 0.80110613D+00 0.32315068D+00 0.20885272D+00 -0.63225748D+08 -0.31180921D+08
+ 50 0.78539816D+00 0.31819199D+00 0.20249229D+00 -0.65211486D+08 -0.32159602D+08
+ 51 0.76969020D+00 0.31315479D+00 0.19613185D+00 -0.67326078D+08 -0.33201762D+08
+ 52 0.75398224D+00 0.30804033D+00 0.18977769D+00 -0.69580184D+08 -0.34312650D+08
+ 53 0.73827427D+00 0.30284986D+00 0.18343608D+00 -0.71985610D+08 -0.35498080D+08
+ 54 0.72256631D+00 0.29758467D+00 0.17711327D+00 -0.74555471D+08 -0.36764508D+08
+ 55 0.70685835D+00 0.29224605D+00 0.17081551D+00 -0.77304356D+08 -0.38119119D+08
+ 56 0.69115038D+00 0.28683533D+00 0.16454901D+00 -0.80248539D+08 -0.39569924D+08
+ 57 0.67544242D+00 0.28135384D+00 0.15831996D+00 -0.83406214D+08 -0.41125881D+08
+ 58 0.65973446D+00 0.27580292D+00 0.15213450D+00 -0.86797771D+08 -0.42797029D+08
+ 59 0.64402649D+00 0.27018395D+00 0.14599874D+00 -0.90446123D+08 -0.44594646D+08
+ 60 0.62831853D+00 0.26449833D+00 0.13991873D+00 -0.94377090D+08 -0.46531444D+08
+ 61 0.61261057D+00 0.25874743D+00 0.13390047D+00 -0.98619847D+08 -0.48621785D+08
+ 62 0.59690260D+00 0.25293270D+00 0.12794990D+00 -0.10320747D+09 -0.50881947D+08
+ 63 0.58119464D+00 0.24705556D+00 0.12207290D+00 -0.10817756D+09 -0.53330441D+08
+ 64 0.56548668D+00 0.24111746D+00 0.11627526D+00 -0.11357303D+09 -0.55988387D+08
+ 65 0.54977871D+00 0.23511988D+00 0.11056271D+00 -0.11944300D+09 -0.58879966D+08
+ 66 0.53407075D+00 0.22906427D+00 0.10494088D+00 -0.12584396D+09 -0.62032970D+08
+ 67 0.51836279D+00 0.22295215D+00 0.99415326D-01 -0.13284106D+09 -0.65479467D+08
+ 68 0.50265482D+00 0.21678502D+00 0.93991493D-01 -0.14050981D+09 -0.69256615D+08
+ 69 0.48694686D+00 0.21056441D+00 0.88674738D-01 -0.14893810D+09 -0.73407664D+08
+ 70 0.47123890D+00 0.20429183D+00 0.83470306D-01 -0.15822872D+09 -0.77983194D+08
+ 71 0.45553093D+00 0.19796886D+00 0.78383335D-01 -0.16850248D+09 -0.83042656D+08
+ 72 0.43982297D+00 0.19159703D+00 0.73418845D-01 -0.17990219D+09 -0.88656308D+08
+ 73 0.42411501D+00 0.18517793D+00 0.68581734D-01 -0.19259757D+09 -0.94907662D+08
+ 74 0.40840704D+00 0.17871315D+00 0.63876778D-01 -0.20679163D+09 -0.10189660D+09
+ 75 0.39269908D+00 0.17220426D+00 0.59308617D-01 -0.22272879D+09 -0.10974336D+09
+ 76 0.37699112D+00 0.16565289D+00 0.54881762D-01 -0.24070548D+09 -0.11859379D+09
+ 77 0.36128316D+00 0.15906065D+00 0.50600581D-01 -0.26108395D+09 -0.12862609D+09
+ 78 0.34557519D+00 0.15242916D+00 0.46469298D-01 -0.28431066D+09 -0.14005990D+09
+ 79 0.32986723D+00 0.14576006D+00 0.42491991D-01 -0.31094092D+09 -0.15316838D+09
+ 80 0.31415927D+00 0.13905500D+00 0.38672585D-01 -0.34167229D+09 -0.16829467D+09
+ 81 0.29845130D+00 0.13231563D+00 0.35014850D-01 -0.37739072D+09 -0.18587457D+09
+ 82 0.28274334D+00 0.12554361D+00 0.31522394D-01 -0.41923504D+09 -0.20646828D+09
+ 83 0.26703538D+00 0.11874061D+00 0.28198665D-01 -0.46868877D+09 -0.23080553D+09
+ 84 0.25132741D+00 0.11190832D+00 0.25046943D-01 -0.52771335D+09 -0.25985114D+09
+ 85 0.23561945D+00 0.10504841D+00 0.22070338D-01 -0.59894545D+09 -0.29490213D+09
+ 86 0.21991149D+00 0.98162589D-01 0.19271788D-01 -0.68599647D+09 -0.33773501D+09
+ 87 0.20420352D+00 0.91252545D-01 0.16654054D-01 -0.79391911D+09 -0.39083543D+09
+ 88 0.18849556D+00 0.84319985D-01 0.14219720D-01 -0.92995694D+09 -0.45776714D+09
+ 89 0.17278760D+00 0.77366621D-01 0.11971188D-01 -0.11047916D+10 -0.54378592D+09
+ 90 0.15707963D+00 0.70394168D-01 0.99106779D-02 -0.13347044D+10 -0.65690407D+09
+ 91 0.14137167D+00 0.63404347D-01 0.80402223D-02 -0.16455061D+10 -0.80982662D+09
+ 92 0.12566371D+00 0.56398881D-01 0.63616675D-02 -0.20801068D+10 -0.10236828D+10
+ 93 0.10995574D+00 0.49379499D-01 0.48766699D-02 -0.27141543D+10 -0.13357414D+10
+ 94 0.94247780D-01 0.42347934D-01 0.35866951D-02 -0.36913086D+10 -0.18168362D+10
+ 95 0.78539816D-01 0.35305921D-01 0.24930161D-02 -0.53123614D+10 -0.26154754D+10
+ 96 0.62831853D-01 0.28255196D-01 0.15967122D-02 -0.82976254D+10 -0.40881458D+10
+ 97 0.47123890D-01 0.21197499D-01 0.89866793D-03 -0.14750054D+11 -0.72806630D+10
+ 98 0.31415927D-01 0.14134572D-01 0.39957227D-03 -0.33193569D+11 -0.16484636D+11
+ 99 0.15707963D-01 0.70681582D-02 0.99917719D-04 -0.13253013D+12 -0.68282557D+11
Index: 95/branches/golem95_without_olo_cmake/demos/plotdetG_Im.gp
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/plotdetG_Im.gp (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/plotdetG_Im.gp (revision 119)
@@ -0,0 +1,15 @@
+#figure 'I4D6z122_Im.ps'
+set style data linespoints
+set xlabel "x"
+#set ylabel " "
+set logscale x
+#set title 'Im I_4^(n+2)(z1*z2^2)'
+#set xr [xmin:xmax]
+#set yr [ymin:ymax]
+plot \
+ "demo_detG.dat" using 1:3 title "Im I_4^(n+2)(z1*z2^2)"
+set terminal postscript color
+set output 'I4D6z122_Im.ps'
+replot
+set output
+set terminal x11
Index: 95/branches/golem95_without_olo_cmake/demos/demo_3point.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_3point.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_3point.f90 (revision 119)
@@ -0,0 +1,434 @@
+!
+! 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
+ !
+ 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
+ !
+ 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_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
+ !
+ ! 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_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
+ !
+ 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
+ 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
+ !
+ res6 = a30(s_null)
+ verif = f3p(s_mat_p,b_ref)
+ !
+ ! 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)
+ !
+ 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)
+ !
+ 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)
+ !
+ 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/plotdetG_Re.gp
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/plotdetG_Re.gp (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/plotdetG_Re.gp (revision 119)
@@ -0,0 +1,15 @@
+#figure 'I4D6z122_Re.ps'
+set style data linespoints
+set xlabel "x"
+#set ylabel " "
+set logscale x
+#set title 'Re I_4^(n+2)(z1*z2^2)'
+#set yr [-.003:-.0018]
+plot \
+"demo_detG.dat" using 1:2 title "Re I_4^(n+2)(z1*z2^2)"
+# "demo_detG.dat" using 1:3 title "Im I_4^(n+2)(z1*z2^2)"
+set terminal postscript color
+set output 'I4D6z122_Re.ps'
+replot
+set output
+set terminal x11
Index: 95/branches/golem95_without_olo_cmake/demos/demo_5point.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_5point.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_5point.f90 (revision 119)
@@ -0,0 +1,294 @@
+!
+! This program computes form factors for five-point functions and related
+! (by pinches) diagrams with less external legs.
+! 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
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type
+ use form_factor_3p ! export all
+ use form_factor_4p ! export all
+ use form_factor_5p ! export all
+ use constante, only: s_null
+ use parametre, only: mu2_scale_par
+ !
+ implicit none
+ !
+ type(form_factor) :: res6
+ real(ki) :: t1,t2
+ integer :: choix
+ !
+ ! Opening of the error files
+ !
+ open(unit=19,file='error_5point.txt',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='test5point.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+p4+p5 = 0
+ !
+ ! p1 p5
+ ! \ /
+ ! \ (5) /
+ ! |---<---\ (4)
+ ! | \
+ ! | \____ p4
+ ! (1) | /
+ ! | / (3)
+ ! |--->---/
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ ! S(1,3) = (p2+p3)^2
+ ! S(2,4) = (p3+p4)^2
+ ! S(2,5) = (p1+p2)^2
+ ! S(3,5) = (p4+p5)^2
+ ! S(1,4) = (p1+p5)^2
+ ! S(1,2) = p2^2
+ ! S(2,3) = p3^2
+ ! S(3,4) = p4^2
+ ! S(4,5) = p5^2
+ ! S(1,5) = 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(5)
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.0_ki
+ s_mat(1,2) = 0.0_ki
+ s_mat(1,3) = -3.0_ki
+ s_mat(1,4) = -4.0_ki
+ s_mat(1,5) = 0.0_ki
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.0_ki
+ s_mat(2,3) = 0.0_ki
+ s_mat(2,4) = 6.0_ki
+ s_mat(2,5) = 15.0_ki
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.0_ki
+ s_mat(3,4) = 0.0_ki
+ s_mat(3,5) = 2.0_ki
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.0_ki
+ s_mat(4,5) = 0.0_ki
+ !
+ s_mat(5,1) = s_mat(1,5)
+ s_mat(5,2) = s_mat(2,5)
+ s_mat(5,3) = s_mat(3,5)
+ s_mat(5,4) = s_mat(4,5)
+ s_mat(5,5) = 0.0_ki
+ !
+ ! 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) form factor for five-point function, rank 0'
+ write (*,*) '1) form factor for five-point function, rank 3 (z1*z2*z4)'
+ write (*,*) '2) form factor for five-point function, rank 5 (z1*z2*z3*z4*z5)'
+ write (*,*) '3) form factor for diagram with propagator 3 pinched, rank 0'
+ write (*,*) '4) form factor for diagram with propagators 1 and 4 pinched, rank 0'
+ read (*,*) choix
+!
+ if (choix == 0) then
+ !
+ write (*,*) 'calculating form factor for 5-point function rank 0'
+ !
+ else if (choix == 1) then
+ !
+ write (*,*) 'calculating form factor A_124 for 5-point function rank 3'
+ !
+ else if (choix == 2) then
+ !
+ write (*,*) 'calculating form factor A_12345 for 5-point function rank 5'
+ !
+ else if (choix == 3) then
+ !
+ write (*,*) 'calculating form factor for a box stemming from '
+ write (*,*) 'the pinch of propagator 3 of a 5-point funct., rank0'
+ !
+ else if (choix == 4) then
+ !
+ write (*,*) 'calculating form factor for a triangle stemming from '
+ write (*,*) 'the pinch of propagators 1 and 4 of a 5-point funct., rank 0'
+ !
+ end if
+ !
+ write (*,*) 'The result has been written to the file test5point.txt'
+ !
+ call cpu_time(t1)
+ !
+ ! To change the value of mu^2 (in GeV) (set to 1. by default)
+ ! uncomment this line
+ !
+ !mu2_scale_par = 12._ki
+ !
+ write (17,*) 'The kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p5 '
+ write (17,*) ' \ / '
+ write (17,*) ' \ (5) / '
+ write (17,*) ' |---<---\ (4) '
+ write (17,*) ' | \ '
+ write (17,*) ' | \____ p4'
+ write (17,*) ' (1)| / '
+ write (17,*) ' | / (3) '
+ write (17,*) ' |--->---/ '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3 '
+ write (17,*) ''
+ write (17,*) 'p1+p2+p3+p4+p5 = 0'
+ write (17,*) ''
+ write (17,*) ' S(1,3) = (p2+p3)^2=',s_mat(1,3)
+ write (17,*) ' S(2,4) = (p3+p4)^2=',s_mat(2,4)
+ write (17,*) ' S(2,5) = (p1+p2)^2=',s_mat(2,5)
+ write (17,*) ' S(3,5) = (p4+p5)^2=',s_mat(3,5)
+ write (17,*) ' S(1,4) = (p1+p5)^2=',s_mat(1,4)
+ write (17,*) ' S(1,2) = p2^2=',s_mat(1,2)
+ write (17,*) ' S(2,3) = p3^2=',s_mat(2,3)
+ write (17,*) ' S(3,4) = p4^2=',s_mat(3,4)
+ write (17,*) ' S(4,5) = p5^2=',s_mat(4,5)
+ write (17,*) ' S(1,5) = p1^2=',s_mat(1,5)
+ write (17,*) '(mu)^2 =',mu2_scale_par
+ write (17,*) ''
+ !
+ if (choix == 0) then
+ !
+ ! form factor for five-point function, rank 0
+ !
+ res6 = a50(s_null)
+ !
+ else if (choix == 1) then
+ !
+ ! form factor for five-point function, rank 3
+ !
+ res6 = a53(1,2,4,s_null)
+ !
+ else if (choix == 2) then
+ !
+ ! form factor for five-point function, rank 5
+ !
+ res6 = a55(1,2,3,4,5,s_null)
+ !
+ else if (choix == 3) then
+ !
+ ! form factor for pinched diagram, rank 0
+ ! the propagator 3 is pinched
+ !
+ !
+ ! p1 p4
+ ! \ /
+ ! \ (5) /
+ ! |---<---|
+ ! | |
+ ! (1) | | (4)
+ ! | |
+ ! |--->---|
+ ! / (2) \
+ ! / \
+ ! p2 p3+p4
+ !
+ write (17,*) 'Since the propagator 3 is pinched'
+ write (17,*) 'the reduced kinematics is:'
+ write (17,*) ''
+ write (17,*) ' p1 p5'
+ write (17,*) ' \ / '
+ write (17,*) ' \ (5) / '
+ write (17,*) ' |---<---| '
+ write (17,*) ' | | '
+ write (17,*) ' (1)| |(4) '
+ write (17,*) ' | | '
+ write (17,*) ' |--->---| '
+ write (17,*) ' / (2) \ '
+ write (17,*) ' / \ '
+ write (17,*) ' p2 p3+p4'
+ write (17,*) ''
+ !
+ !
+ res6 = a40( (/3/) )
+ !
+ else if (choix == 4) then
+ !
+ ! form factor for pinched diagram, rank 0
+ ! the propagators 1 and 4 are pinched
+ !
+ ! |
+ ! | p1+p2
+ ! |
+ ! /\
+ ! / \
+ ! (2) / \ (5)
+ ! / \
+ ! /--->--\
+ ! / (3) \
+ ! p3 / \ p4+p5
+ !
+ write (17,*) 'Since the propagators 1 and 4 are pinched'
+ write (17,*) 'the reduced kinematics is:'
+ write (17,*) ''
+ write (17,*) ' | '
+ write (17,*) ' | p1+p2 '
+ write (17,*) ' | '
+ write (17,*) ' /\ '
+ write (17,*) ' / \ '
+ write (17,*) ' (2) / \ (5) '
+ write (17,*) ' / \ '
+ write (17,*) ' /--->--\ '
+ write (17,*) ' / (3) \ '
+ write (17,*) ' p3 / \ p4+p5'
+ write (17,*) ''
+ !
+ !
+ res6 = a30( (/1,4/) )
+ !
+ end if
+ !
+ call cpu_time(t2)
+ !!
+ write (17,*) 'normalisation:'
+ 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,'(" 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 (17,*) 'CPU time=',t2-t1
+ !
+ ! 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/table_of_results_4point_option1.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option1.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option1.txt (revision 119)
@@ -0,0 +1,78 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 1 when prompted to test 4-point functions with all external legs light-like and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (-.1626016260E-03 + I* 0.0000000000E+00)
++ 1/epsilon * (0.8219920099E-03 + I* -.2554140369E-03)
++ (-.1671681117E-02 + I* 0.1229099432E-02)
+
+1
+
+1/epsilon^2 * (-.4065040650E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2153787547E-03 + I* -.1277070184E-03)
++ (-.3574945235E-03 + I* 0.5153788138E-03)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.4065040650E-04 + I* 0.0000000000E+00)
++ (-.1026789676E-03 + I* 0.5358723646E-04)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.3098749528E-05 + I* 0.2666564354E-04)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1628349030E-05 + I* -.3353583134E-06)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1534579900E-02 + I* 0.1983418048E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1270487307E-03 + I* 0.1093291385E-02)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3196554085E+00 + I* 0.3038911061E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1393903729E+00 + I* -.1858266113E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.7541315664E-02 + I* -.1858266113E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.7541315664E-02 + I* -.1858266113E+00)
+
+
+
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option2.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option2.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option2.txt (revision 119)
@@ -0,0 +1,74 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 2 when prompted to test 4-point functions with one external leg not light-like and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (-.8130081301E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.4891184683E-03 + I* 0.0000000000E+00)
++ (-.1394024827E-02 + I* 0.2848228153E-03)
+
+1
+
+1/epsilon^2 * (-.4065040650E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2249461250E-03 + I* -.8583586485E-04)
++ (-.4494545292E-03 + I* 0.4117731646E-03)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.3375293195E-04 + I* 0.2814290651E-04)
++ (-.1336669603E-03 + I* -.4036969277E-05)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1104950803E-04 + I* 0.2453425583E-04)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1121338256E-05 + I* -.8095759491E-06)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.5076972253E-02 + I* 0.1641596991E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.2100183958E-03 + I* 0.1054705450E-02)
+
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3419340500E+00 + I* 0.3528442336E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1338207125E+00 + I* -.1735883294E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.1311097604E-01 + I* -.1735883294E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.1311097604E-01 + I* -.1735883294E+00)
Index: 95/branches/golem95_without_olo_cmake/demos/Makefile.in
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/Makefile.in (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/Makefile.in (revision 119)
@@ -0,0 +1,580 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+EXTRA_PROGRAMS = demo_3point$(EXEEXT) demo_4photon$(EXEEXT) \
+ demo_4point$(EXEEXT) demo_5point$(EXEEXT) demo_6point$(EXEEXT) \
+ demo_a55_dets_sing$(EXEEXT) demo_detg$(EXEEXT) \
+ demo_LT$(EXEEXT) demo_cmplx_masses$(EXEEXT) \
+ SusyLandau$(EXEEXT) $(am__EXEEXT_1)
+@COMPILE_TENSREC_TRUE@am__append_1 = demo_tens_rec
+subdir = demos
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@COMPILE_TENSREC_TRUE@am__EXEEXT_1 = demo_tens_rec$(EXEEXT)
+am_SusyLandau_OBJECTS = SusyLandau.$(OBJEXT)
+SusyLandau_OBJECTS = $(am_SusyLandau_OBJECTS)
+am__DEPENDENCIES_1 = ${libdir}/lib@GENERIC_LIBRARY_NAME@.a \
+ $(LIBAVHOLO)
+SusyLandau_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_3point_OBJECTS = demo_3point.$(OBJEXT)
+demo_3point_OBJECTS = $(am_demo_3point_OBJECTS)
+demo_3point_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_4photon_OBJECTS = demo_4photon.$(OBJEXT)
+demo_4photon_OBJECTS = $(am_demo_4photon_OBJECTS)
+demo_4photon_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_4point_OBJECTS = demo_4point.$(OBJEXT)
+demo_4point_OBJECTS = $(am_demo_4point_OBJECTS)
+demo_4point_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_5point_OBJECTS = demo_5point.$(OBJEXT)
+demo_5point_OBJECTS = $(am_demo_5point_OBJECTS)
+demo_5point_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_6point_OBJECTS = demo_6point.$(OBJEXT)
+demo_6point_OBJECTS = $(am_demo_6point_OBJECTS)
+demo_6point_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_LT_OBJECTS = demo_LT.$(OBJEXT)
+demo_LT_OBJECTS = $(am_demo_LT_OBJECTS)
+demo_LT_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_a55_dets_sing_OBJECTS = demo_a55_dets_sing.$(OBJEXT)
+demo_a55_dets_sing_OBJECTS = $(am_demo_a55_dets_sing_OBJECTS)
+demo_a55_dets_sing_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_cmplx_masses_OBJECTS = demo_cmplx_masses.$(OBJEXT)
+demo_cmplx_masses_OBJECTS = $(am_demo_cmplx_masses_OBJECTS)
+demo_cmplx_masses_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_demo_detg_OBJECTS = demo_detg.$(OBJEXT)
+demo_detg_OBJECTS = $(am_demo_detg_OBJECTS)
+demo_detg_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__demo_tens_rec_SOURCES_DIST = demo_tens_rec.f90 demo_tens_mod.f90
+@COMPILE_TENSREC_TRUE@am_demo_tens_rec_OBJECTS = \
+@COMPILE_TENSREC_TRUE@ demo_tens_rec.$(OBJEXT) \
+@COMPILE_TENSREC_TRUE@ demo_tens_mod.$(OBJEXT)
+demo_tens_rec_OBJECTS = $(am_demo_tens_rec_OBJECTS)
+@COMPILE_TENSREC_TRUE@demo_tens_rec_DEPENDENCIES = \
+@COMPILE_TENSREC_TRUE@ $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(SusyLandau_SOURCES) $(demo_3point_SOURCES) \
+ $(demo_4photon_SOURCES) $(demo_4point_SOURCES) \
+ $(demo_5point_SOURCES) $(demo_6point_SOURCES) \
+ $(demo_LT_SOURCES) $(demo_a55_dets_sing_SOURCES) \
+ $(demo_cmplx_masses_SOURCES) $(demo_detg_SOURCES) \
+ $(demo_tens_rec_SOURCES)
+DIST_SOURCES = $(SusyLandau_SOURCES) $(demo_3point_SOURCES) \
+ $(demo_4photon_SOURCES) $(demo_4point_SOURCES) \
+ $(demo_5point_SOURCES) $(demo_6point_SOURCES) \
+ $(demo_LT_SOURCES) $(demo_a55_dets_sing_SOURCES) \
+ $(demo_cmplx_masses_SOURCES) $(demo_detg_SOURCES) \
+ $(am__demo_tens_rec_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+GENERIC_API_VERSION = @GENERIC_API_VERSION@
+GENERIC_LIBRARY_NAME = @GENERIC_LIBRARY_NAME@
+GENERIC_LIBRARY_VERSION = @GENERIC_LIBRARY_VERSION@
+GENERIC_VERSION = @GENERIC_VERSION@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLOOPTOOLS = @LIBLOOPTOOLS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+avh_olo_real_kind = @avh_olo_real_kind@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+case_with_lt = @case_with_lt@
+case_wout_lt = @case_wout_lt@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fortran_real_kind = @fortran_real_kind@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+lt_real_kind = @lt_real_kind@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@COMPILE_TENSREC_TRUE@demo_tens_rec_SOURCES = demo_tens_rec.f90 demo_tens_mod.f90
+@COMPILE_TENSREC_TRUE@demo_tens_rec_LDADD = ${link_to_golem95}
+LIBAVHOLO = ${libdir}/libavh_olo.a
+link_to_golem95 = ${libdir}/lib@GENERIC_LIBRARY_NAME@.a ${LIBAVHOLO}
+AM_FCFLAGS = -I${pkgincludedir}
+demo_3point_SOURCES = demo_3point.f90
+demo_4photon_SOURCES = demo_4photon.f90
+demo_4point_SOURCES = demo_4point.f90
+demo_5point_SOURCES = demo_5point.f90
+demo_6point_SOURCES = demo_6point.f90
+demo_a55_dets_sing_SOURCES = demo_a55_dets_sing.f90
+demo_detg_SOURCES = demo_detg.f90
+demo_LT_SOURCES = demo_LT.f
+demo_cmplx_masses_SOURCES = demo_cmplx_masses.f90
+SusyLandau_SOURCES = SusyLandau.f90
+demo_3point_LDADD = ${link_to_golem95}
+demo_4photon_LDADD = ${link_to_golem95}
+demo_4point_LDADD = ${link_to_golem95}
+demo_5point_LDADD = ${link_to_golem95}
+demo_6point_LDADD = ${link_to_golem95}
+demo_a55_dets_sing_LDADD = ${link_to_golem95}
+demo_detg_LDADD = ${link_to_golem95}
+demo_LT_LDADD = ${link_to_golem95}
+demo_cmplx_masses_LDADD = ${link_to_golem95}
+SusyLandau_LDADD = ${link_to_golem95}
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .f .f90 .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu demos/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu demos/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+SusyLandau$(EXEEXT): $(SusyLandau_OBJECTS) $(SusyLandau_DEPENDENCIES)
+ @rm -f SusyLandau$(EXEEXT)
+ $(FCLINK) $(SusyLandau_OBJECTS) $(SusyLandau_LDADD) $(LIBS)
+demo_3point$(EXEEXT): $(demo_3point_OBJECTS) $(demo_3point_DEPENDENCIES)
+ @rm -f demo_3point$(EXEEXT)
+ $(FCLINK) $(demo_3point_OBJECTS) $(demo_3point_LDADD) $(LIBS)
+demo_4photon$(EXEEXT): $(demo_4photon_OBJECTS) $(demo_4photon_DEPENDENCIES)
+ @rm -f demo_4photon$(EXEEXT)
+ $(FCLINK) $(demo_4photon_OBJECTS) $(demo_4photon_LDADD) $(LIBS)
+demo_4point$(EXEEXT): $(demo_4point_OBJECTS) $(demo_4point_DEPENDENCIES)
+ @rm -f demo_4point$(EXEEXT)
+ $(FCLINK) $(demo_4point_OBJECTS) $(demo_4point_LDADD) $(LIBS)
+demo_5point$(EXEEXT): $(demo_5point_OBJECTS) $(demo_5point_DEPENDENCIES)
+ @rm -f demo_5point$(EXEEXT)
+ $(FCLINK) $(demo_5point_OBJECTS) $(demo_5point_LDADD) $(LIBS)
+demo_6point$(EXEEXT): $(demo_6point_OBJECTS) $(demo_6point_DEPENDENCIES)
+ @rm -f demo_6point$(EXEEXT)
+ $(FCLINK) $(demo_6point_OBJECTS) $(demo_6point_LDADD) $(LIBS)
+demo_LT$(EXEEXT): $(demo_LT_OBJECTS) $(demo_LT_DEPENDENCIES)
+ @rm -f demo_LT$(EXEEXT)
+ $(F77LINK) $(demo_LT_OBJECTS) $(demo_LT_LDADD) $(LIBS)
+demo_a55_dets_sing$(EXEEXT): $(demo_a55_dets_sing_OBJECTS) $(demo_a55_dets_sing_DEPENDENCIES)
+ @rm -f demo_a55_dets_sing$(EXEEXT)
+ $(FCLINK) $(demo_a55_dets_sing_OBJECTS) $(demo_a55_dets_sing_LDADD) $(LIBS)
+demo_cmplx_masses$(EXEEXT): $(demo_cmplx_masses_OBJECTS) $(demo_cmplx_masses_DEPENDENCIES)
+ @rm -f demo_cmplx_masses$(EXEEXT)
+ $(FCLINK) $(demo_cmplx_masses_OBJECTS) $(demo_cmplx_masses_LDADD) $(LIBS)
+demo_detg$(EXEEXT): $(demo_detg_OBJECTS) $(demo_detg_DEPENDENCIES)
+ @rm -f demo_detg$(EXEEXT)
+ $(FCLINK) $(demo_detg_OBJECTS) $(demo_detg_LDADD) $(LIBS)
+demo_tens_rec$(EXEEXT): $(demo_tens_rec_OBJECTS) $(demo_tens_rec_DEPENDENCIES)
+ @rm -f demo_tens_rec$(EXEEXT)
+ $(FCLINK) $(demo_tens_rec_OBJECTS) $(demo_tens_rec_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.f.o:
+ $(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+ $(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+ $(LTF77COMPILE) -c -o $@ $<
+
+.f90.o:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+ $(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+ $(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+ clean-generic clean-libtool ctags distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+all-local: ${EXTRA_PROGRAMS}
+
+demo_tens_rec.o: demo_tens_mod.o
+demo_tens_rec.lo: demo_tens_mod.lo
+demo_tens_rec.obj: demo_tens_mod.obj
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option3.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option3.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option3.txt (revision 119)
@@ -0,0 +1,74 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 3 when prompted to test 4-point functions with two opposite external legs not light-like and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1524734894E-03 + I* 0.2276516416E-03)
++ (-.1070869921E-02 + I* -.5852567442E-03)
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.7549818082E-04 + I* 0.3731994124E-04)
++ (-.3646824199E-03 + I* -.8662666679E-05)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1983784899E-04 + I* 0.2508389493E-04)
++ (-.1002891136E-03 + I* -.3099374061E-04)
+
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1715263940E-04 + I* 0.1242264239E-04)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6014155179E-06 + I* -.1073913337E-05)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.7950024531E-02 + I* 0.1306204688E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.4922073047E-03 + I* 0.6061015013E-03)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3632207246E+00 + I* 0.3927735104E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1670072205E+00 + I* -.1636060102E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.2007553202E-01 + I* -.1636060102E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.2007553202E-01 + I* -.1636060102E+00)
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option4.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option4.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option4.txt (revision 119)
@@ -0,0 +1,74 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 4 when prompted to test 4-point functions with two adjacent external legs not light-like and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (-.4065040650E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2811511589E-03 + I* 0.1277070184E-03)
++ (-.1138728255E-02 + I* -.2814021789E-03)
+
+1
+
+1/epsilon^2 * (-.4065040650E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2355218258E-03 + I* -.4892632195E-04)
++ (-.5181402934E-03 + I* 0.3376668199E-03)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.3375293195E-04 + I* 0.2814290651E-04)
++ (-.1270139788E-03 + I* -.9276841090E-05)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1693566949E-04 + I* 0.2210837695E-04)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.7188878272E-06 + I* -.1006604048E-05)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.7273785314E-02 + I* 0.1380981251E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.4728834968E-03 + I* 0.9808893901E-03)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3622850723E+00 + I* 0.3879935301E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1287329569E+00 + I* -.1648010053E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.1819873160E-01 + I* -.1648010053E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.1819873160E-01 + I* -.1648010053E+00)
+
Index: 95/branches/golem95_without_olo_cmake/demos/demo_detg.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_detg.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_detg.f90 (revision 119)
@@ -0,0 +1,135 @@
+!
+! This program computes the scattering of two massive particles
+! into two light-like particles
+! in a region where the velocity of the ingoing particles
+! is small.
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use parametre
+ use function_4p2m_adj, only: f4p2m_adj
+ use constante, only: pi ! to get the value of pi
+ use spinor, only: scalar
+ !
+ implicit none
+ !
+ real(ki), dimension(4) :: temp,rest
+ real(ki) :: m_sq,pp,ener,theta,s12,s13,s23,s34,s1,s2,x,gr_b
+ real(ki), dimension(4) :: p1,p2,p3,p4
+ real(ki), dimension(4) :: p23,p34,p12
+ integer :: n
+ integer :: choix
+ !
+ choix = 2
+ !
+ open(unit=8,file='demo_detG.txt',status='unknown')
+ !
+ open(unit=9,file='demo_detG.dat',status='unknown')
+ !
+ !
+ !
+ m_sq = 7.0_ki
+ theta = 35.0_ki/180.0_ki*pi
+ !
+ ! tolerance is the relative precision for the Gaussian integration
+ ! it is declared in the file parametre.f90
+ !
+ tolerance = 1.d-6
+ coupure_4p2m_adj = 5.d-3
+ !
+ ! Iteration on the three momentum of the ingoing particles
+ !
+ write (6,*) 'B gets smaller in each iteration'
+ !
+ call initgolem95(4)
+ !
+ do n=0,30
+ !
+ write (6,*) 'iteration:',n
+ ! pp=M*x
+ pp = 0.5d0**n
+ ener = sqrt(m_sq + pp*pp)
+ x=pp/sqrt(m_sq)
+ !
+ p1 = (/ener,0.0_ki,0.0_ki,pp/)
+ p2 = (/ener,0.0_ki,0.0_ki,-pp/)
+ p3 = (/ener,0.0_ki,ener*sin(theta),ener*cos(theta)/)
+ p4 = (/ener,0.0_ki,-ener*sin(theta),-ener*cos(theta)/)
+ !
+ p12 = p1 + p2
+ p23 = p2 - p3
+ p34 = p3 + p4
+ !
+ ! The S matrix elements
+ !
+ s34 = scalar(p34,p34)
+ s23 = scalar(p23,p23)
+ s12 = scalar(p12,p12)
+ s13 = -s12-s23 + 2.0_ki*m_sq
+ s1 = scalar(p1,p1)
+ s2 = scalar(p2,p2)
+ !
+ ! Definition of the S matrix
+ !
+ !
+ s_mat(1,1) = 0.0_ki
+ s_mat(1,2) = s2
+ s_mat(1,3) = scalar(p23,p23)
+ s_mat(1,4) = s1
+ !
+ s_mat(2,1) = s_mat(1,2)
+ s_mat(2,2) = 0.0_ki
+ s_mat(2,3) = 0.0_ki
+ s_mat(2,4) = scalar(p12,p12)
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.0_ki
+ s_mat(3,4) = 0.0_ki
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.0_ki
+ !
+ call preparesmatrix
+ !
+ ! This is minus the coefficient B
+ !
+ gr_b=(2.0_ki*(sin(theta))**2*x**2)/(m_sq*(1.0_ki+2.0_ki*x**2+2.0_ki*x*sqrt(1.0_ki+x**2)*cos(theta))**2)
+ !
+ if (choix == 1) then
+ !
+ temp = f4p2m_adj('n+2',s34,s23,s1,s2,0,0,0,0)
+ !
+ else if (choix == 2) then
+ !
+ temp = f4p2m_adj('n+2',s34,s23,s1,s2,0,1,2,2)
+ !
+ end if
+ !
+ rest = temp
+ !
+ write (8,*) 'n=',n
+ write (8,*) 'x=',x
+ write (6,*) 'x=',x
+ write (8,*) '|B|=',gr_b
+ write (6,*) '|B|=',gr_b
+ write (8,*) 's12=',s12
+ write (8,*) 's23=',s23
+ write (8,*) 'real part:',rest(3)
+ write (8,*) 'imaginary part:',rest(4)
+ write (6,*) 'real part:',rest(3)
+ write (6,*) 'imaginary part:',rest(4)
+ !
+ write (9,'(3(2x,f16.14))') x,rest(3),rest(4)
+ !
+ end do
+ !
+ call exitgolem95()
+ !
+ close(8)
+ !
+end program main
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option5.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option5.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option5.txt (revision 119)
@@ -0,0 +1,74 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 5 when prompted to test 4-point functions with three external legs not light-like and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.7623674472E-04 + I* 0.1138258208E-03)
++ (-.4741475446E-03 + I* -.5060889904E-03)
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.7549818082E-04 + I* 0.3731994124E-04)
++ (-.3058106978E-03 + I* -.3071277578E-04)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1983784899E-04 + I* 0.2508389493E-04)
++ (-.9170431399E-04 + I* -.3034691594E-04)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1699172334E-04 + I* 0.6861723678E-05)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1222350212E-06 + I* -.8732810277E-06)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.8213897730E-02 + I* 0.9289611932E-02)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.5284035869E-03 + I* 0.3904046830E-03)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.4043959309E+00 + I* 0.4302991741E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1567134190E+00 + I* -.1542245943E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.9781730445E-02 + I* -.1542245943E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.9781730445E-02 + I* -.1542245943E+00)
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4photon.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4photon.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4photon.txt (revision 119)
@@ -0,0 +1,34 @@
+
+ 4-photon
+
+After a successful make in the demos directory, run ./demo_4photon for the four-photon result. This should be:
+
+
+ Four photon helicity amplitudes
+ ===============================
+
+ amp(++++)=
++ 1/epsilon^2 * (-.1776356839E-14 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1376676551E-13 + I* -.4440892099E-14)
++ (0.8000000000E+01 + I* 0.3552713679E-13)
+
+ amp(+++-)=
++ 1/epsilon^2 * (0.1304512054E-14 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1816602424E-13 + I* 0.5811323645E-15)
++ (-.8000000000E+01 + I* 0.2375920641E-14)
+
+ amp(++--)=
++ 1/epsilon^2 * (-.5551115123E-14 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1376676551E-13 + I* 0.0000000000E+00)
++ (-.7839488539E+02 + I* 0.3552713679E-13)
+
+ Analytical result:
+ ==================
+
+ amp(++++) = +8
+ amp(+++-) = -8
+ amp(++--) = -8*( + 1
+ + (t-u)/s*log(t/u)
+ + (t**2+u**2)/2/s**2*( pi**2 + log(t/u)**2 ) )
+ =-.7839488539E+02
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option6.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option6.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option6.txt (revision 119)
@@ -0,0 +1,75 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 6 when prompted to test 4-point functions with four external legs not light-like and no internal masses.
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1006501476E-04 + I* -.5624267512E-03)
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1189567230E-03 + I* -.1958805219E-03)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.3497396456E-05 + I* -.5238338816E-04)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.1567778500E-04 + I* 0.1451399355E-05)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.3143870396E-07 + I* -.8044636862E-06)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.8399415441E-02 + I* 0.7728844014E-02)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.5200194123E-03 + I* 0.3447833281E-03)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.4158590076E+00 + I* 0.4418461329E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1581030286E+00 + I* -.1513378546E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1117134003E-01 + I* -.1513378546E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1117134003E-01 + I* -.1513378546E+00)
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option7.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option7.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option7.txt (revision 119)
@@ -0,0 +1,76 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 7 when prompted to test 4-point functions with two external legs not light-like and internal masses (IR divergent).
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (-.3496503497E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2180702730E-03 + I* -.1098458970E-03)
++ (-.4587602906E-03 + I* 0.6405492890E-03)
+
+1
+
+1/epsilon^2 * (-.3496503497E-04 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1303835550E-03 + I* -.1098458970E-03)
++ (-.1485113428E-03 + I* 0.3668309000E-03)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2082963007E-04 + I* 0.0000000000E+00)
++ (-.5579506947E-04 + I* 0.4760114830E-04)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.3378330936E-05 + I* 0.1227380314E-04)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.5137837706E-06 + I* 0.4985434469E-06)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.4281839249E-02 + I* 0.1062855165E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.1620682376E-03 + I* 0.7462779350E-03)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.4006729354E+00 + I* 0.1635519014E+00)
+
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1191359911E+00 + I* -.2209114124E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.2779569739E-01 + I* -.2209114124E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (-.2779569739E-01 + I* -.2209114124E+00)
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option8.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option8.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_4point_option8.txt (revision 119)
@@ -0,0 +1,73 @@
+Boxes
+
+After a successful make in the demos directory, run ./demo_4point for the four-point functions, and give 8 when prompted to test 4-point functions with three external legs not light-like and internal masses (IR divergent).
+
+Then inputting the next argument, you should get:
+
+0
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9252538753E-04 + I* -.3898083914E-19)
++ (-.4693251224E-03 + I* 0.2773423992E-03)
+
+1
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.5236195764E-04 + I* 0.0000000000E+00)
++ (-.2017082566E-03 + I* 0.1235227067E-03)
+
+2
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1464368947E-04 + I* 0.0000000000E+00)
++ (-.5032772619E-04 + I* 0.2727667053E-04)
+
+3
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.1365382234E-21 + I* 0.0000000000E+00)
++ (-.1214997087E-05 + I* 0.1149908889E-04)
+
+4
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6694000543E-06 + I* 0.3713711572E-06)
+
+5
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (0.2817896396E-02 + I* 0.1094499198E-01)
+
+6
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ (-.6751517365E-04 + I* 0.6647786409E-03)
+
+7
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1666666667E+00 + I* 0.0000000000E+00)
++ (-.3807168113E+00 + I* 0.1979946050E+00)
+
+8
+
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.1497225430E+00 + I* -.2104190535E+00)
+
+ The preceding result has been computed with mu^2= 1.00000000000000
+ Now setting by hand mu^2= 34.0000000000000
+ and expanding ( 34.0000000000000 / 1.00000000000000
+ )^epsilon around epsilon=0
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.2790854504E-02 + I* -.2104190535E+00)
+
+ check with direct calculation using the global variable mu2_scale_par=
+ 34.0000000000000
+1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (-.4166666667E-01 + I* 0.0000000000E+00)
++ (0.2790854504E-02 + I* -.2104190535E+00)
Index: 95/branches/golem95_without_olo_cmake/demos/demo_a55_dets_sing.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_a55_dets_sing.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_a55_dets_sing.f90 (revision 119)
@@ -0,0 +1,224 @@
+! program to test five point tensor coefficients with respect to their
+! behaviour when detS and sub-Gram determinant goes to zero.
+!
+! pentagon (1,2,3,4,5) with s5 > 0, else sj=0
+!
+! has detS = 2*s12*s23*s34*( s15*s45 - s5*s23 )
+!
+! box (1,23,4,5) has detG = 2*s14*( s15*s45 - s5*s23 )
+! = 2*(s23-s15-s45+s5)*( s15*s45 - s5*s23 )
+!
+! using momentum parametrisation for 1+4 -> 2+3+5
+!
+! detS = 2*s12*s23*s34*s14*pt5^2
+! detG = 2*s14^2*pt5^2
+!
+! where pt5 is the transverse momentum of particle 5 or the system 34
+! relative to the beam axis (=z-axis)
+
+!
+! a rotation of 2,3,5 around the z-axis is evaluated to check for
+! stability in the limit pt5 -> 0.
+!
+! output files: demo_a55_dets_sing.txt, demo_a55_dets_sing.dat
+! file to plot demo_a55_dets_sing.dat: plot_demo_A55.gp
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use parametre
+ use form_factor_type, only: form_factor
+ use form_factor_5p, only: a55
+ use cache, only: allocate_cache, clear_cache
+ use constante, only: s_null, pi
+ use spinor, only: scalar
+ !
+ implicit none
+ !
+ type(form_factor) :: res6
+ real(ki), dimension(4) :: p1,p2,p3,p4,p5,p2i,p3i,p5i,ptest
+ real(ki), dimension(4,4) :: boost,rotation
+ real(ki) :: s12,s23,s34,s45,s15,s5,rs,e3,e5,s14
+ real(ki) :: t1,t2,theta,sh,ch,phi3,theta3,lambda,s,c,pt,p5z,detg
+ integer :: nstep,n
+ !
+ !
+ !open(unit=19,file='error.txt',status='unknown')
+ !
+ ! Opening of the file containing the results
+ !
+ open(unit=16,file='demo_a55_dets_sing.dat',status='unknown')
+ open(unit=17,file='demo_a55_dets_sing.txt',status='unknown')
+ !
+ ! These are the entries of the S matrix
+ ! They are related to the cuts of the following diagram
+ !
+ ! p1 p5
+ ! \ /
+ ! \ (5) /
+ ! |---<---\ (4)
+ ! | \
+ ! | \____ p4
+ ! (1)| /
+ ! | / (3)
+ ! |--->---/
+ ! / (2) \
+ ! / \
+ ! p2 p3
+ !
+ ! S(1,3) = (p2+p3)^2 = s23
+ ! S(2,4) = (p3+p4)^2 = s34
+ ! S(2,5) = (p1+p2)^2 = s12
+ ! S(3,5) = (p4+p5)^2 = s45
+ ! S(1,4) = (p1+p5)^2 = s15
+ ! S(1,2) = p2^2 = 0
+ ! S(2,3) = p3^2 = 0
+ ! S(3,4) = p4^2 = 0
+ ! S(4,5) = p5^2 = s5
+ ! S(1,5) = p1^2 = 0
+ !
+ !
+ call initgolem95(5)
+ !
+ ! rs = sqrt(s14) ! kinematics normalized such that s14 = 1.0_ki
+ rs = 1.0_ki
+ theta3 = 0.2_ki*pi ! must be in range [0, pi]
+ phi3 = 0.6_ki*2.0_ki*pi ! must be in range [0,2*pi]
+ s14 = rs**2 !
+ s5 = 0.1_ki*s14 ! 0 < s5 < s12
+ s23 = 0.00003_ki*( sqrt(s14) - sqrt(s5) )**2 ! 0 < s23 < sqrt(s14) - sqrt(s5)
+ !
+ !
+ p1(1) = rs/2.0_ki
+ p1(2) = 0.0_ki
+ p1(3) = 0.0_ki
+ p1(4) = rs/2.0_ki
+ !
+ p4(1) = rs/2.0_ki
+ p4(2) = 0.0_ki
+ p4(3) = 0.0_ki
+ p4(4) =-rs/2.0_ki
+ !
+ ! center of mass frame (i) of massless particles 2 and 3
+ !
+ ! p2i+p3i = ( sqrt(s23),0,0,0 )
+ !
+ e3 = sqrt(s23)/2.0_ki
+ p3i(1) =-e3
+ p3i(2) =-e3*sin(phi3)*sin(theta3)
+ p3i(3) =-e3*cos(phi3)*sin(theta3)
+ p3i(4) =-e3*cos(theta3)
+ !
+ p2i(1) = p3i(1)
+ p2i(2) = -p3i(2)
+ p2i(3) = -p3i(3)
+ p2i(4) = -p3i(4)
+ !
+ ! boost from 2+3 rest frame to pt=0 region
+ !
+ lambda = s14**2 + s5**2 + s23**2 - 2.0_ki*( s14*s5 + s14*s23 + s23*s5 )
+ sh = sqrt( lambda/4.0_ki/s14/s23 )
+ ch = sqrt( 1.0_ki + sh**2 )
+ !
+ boost(1,:) = (/ ch, 0.0_ki, 0.0_ki, -sh /)
+ boost(2,:) = (/ 0.0_ki, 1.0_ki, 0.0_ki, 0.0_ki /)
+ boost(3,:) = (/ 0.0_ki, 0.0_ki, 1.0_ki, 0.0_ki /)
+ boost(4,:) = (/ -sh, 0.0_ki, 0.0_ki, ch /)
+ !
+ p2i = matmul( boost,p2i )
+ p3i = matmul( boost,p3i )
+ !
+ p5z = sqrt( lambda/s14 )/2.0_ki
+ e5 = sqrt( s5 + p5z**2 )
+ !
+ p5i(1) =-e5
+ p5i(2) = 0.0_ki
+ p5i(3) = 0.0_ki
+ p5i(4) =-p5z
+ !
+ ! given kinematics leads to scattering singularity,
+ ! now rotate 2,3,5 around x-axis.
+ !
+ write (17,*)' n theta pt detG Re(A55) Im(A55)'
+ !
+ !
+ ! number of evaluated points:
+ !
+ nstep = 100
+ !
+ do n=1,nstep-1
+ ! loop over theta to rotate kinematics around x-axis into a scattering singularity
+ !
+ theta = pi/2.0_ki*( 1.0_ki - real( n,ki )/real(nstep,ki) )
+ s = sin(theta)
+ c = cos(theta)
+ !
+ rotation(1,:) = (/ 1.0_ki, 0.0_ki, 0.0_ki, 0.0_ki /)
+ rotation(2,:) = (/ 0.0_ki, 1.0_ki, 0.0_ki, 0.0_ki /)
+ rotation(3,:) = (/ 0.0_ki, 0.0_ki, c, -s /)
+ rotation(4,:) = (/ 0.0_ki, 0.0_ki, s, c /)
+ !
+ p2 = matmul( rotation,p2i )
+ p3 = matmul( rotation,p3i )
+ p5 = matmul( rotation,p5i )
+ !
+ ! p1+p2+p3+p4+p5=0
+ !
+ ptest = p1+p2+p3+p4+p5
+ !
+ !write(*,*) 'Sum of momenta ='
+ !write(*,*)ptest
+ !
+ ! remaining scalar products
+ !
+ s12 = scalar( p1+p2, p1+p2 )
+ s34 = scalar( p3+p4, p3+p4 )
+ s45 = scalar( p4+p5, p4+p5 )
+ s15 = scalar( p1+p5, p1+p5 )
+ !
+ ! gram determinant of box( 1,2,34,5 )
+ !
+ ! note that: detg = 2.0_ki*s14**2*pt**2
+ !
+ pt = p5(3)
+ detg = 2.0_ki*s14*( s15*s45 - s23*s5 )
+ ! write(*,*) detg/2.0_ki/s14**2/pt**2 ! should be equal to 1.0_ki
+ !
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,:) = (/ 0.0_ki, 0.0_ki,s23,s15,0.0_ki /)
+ s_mat(2,:) = (/ 0.0_ki, 0.0_ki,0.0_ki,s34,s12 /)
+ s_mat(3,:) = (/ s23,0.0_ki,0.0_ki,0.0_ki, s45 /)
+ s_mat(4,:) = (/ s15,s34,0.0_ki,0.0_ki,s5 /)
+ s_mat(5,:) = (/ 0.0_ki,s12,s45,s5,0.0_ki /)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ call preparesmatrix()
+ !
+ !
+ call cpu_time(t1)
+ !
+ !
+ res6 = a55(1,1,1,1,1,s_null)
+ !
+ call cpu_time(t2)
+ !
+ write (17,'(i4,6(1x, d15.8))') n,theta,pt,detg,real(res6%c,ki),aimag(res6%c)
+ write (16,'(4(1x,f25.5))') pt,detg,real(res6%c,ki),aimag(res6%c)
+ !
+ !
+ end do
+ !
+ call exitgolem95()
+ !
+ close(16)
+ close(17)
+ !close(19)
+ !
+ write(6,*) 'The result has been written to demo_a55_dets_sing.txt, demo_a55_dets_sing.dat'
+ !
+end program main
+!
Index: 95/branches/golem95_without_olo_cmake/demos/demo_4photon.f90
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_4photon.f90 (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_4photon.f90 (revision 119)
@@ -0,0 +1,1078 @@
+!
+!
+!
+program main
+ !
+ use precision_golem
+ use matrice_s
+ use form_factor_type, only: form_factor, operator(-), operator(+), operator(*), assignment(=)
+ use form_factor_2p ! export all
+ use form_factor_3p ! export all
+ use form_factor_4p ! export all
+ use cache, only: allocate_cache, reset_cache, clear_cache
+ use constante, only: s_null, pi
+ use spinor, only: scalar ! to get the function scalar
+ use parametre
+ !
+ implicit none
+ !
+ type(form_factor) :: g1PPPP,g1PPPM,g1PPMM,g2PPPP,g2PPPM,g2PPMM,g3PPPP,g3PPPM,g3PPMM
+ type(form_factor) :: ampPPPP,ampPPPM,ampPPMM
+ type(form_factor), dimension(106) :: tc
+ real(ki), dimension(4) :: k1,k2,k3,k4
+ real(ki) :: ener,theta,t1,t2,S,T,U,resPPMM
+ !
+ !
+ write (*,*) 'Evaluating the 4 photon amplitude....'
+ !
+ ! Opening of the error files
+ !
+ open(unit=19,file='error_4photon.txt',status='unknown')
+ !
+ ! Opening of the files containing the results
+ !
+ open(unit=17,file='result_4photon.txt',status='unknown')
+ !
+ ! rat_or_tot_par can have the value 'tot' or 'rat'
+ ! overwrite the default value "tot" defined in the module parametre
+ ! change 'tot' in 'rat'
+ !
+ !rat_or_tot_par = tot
+ !
+ ener = 1.0_ki/2.0_ki
+ theta = 15.0_ki/180.0_ki*pi
+ !
+ k1 = (/ener,0.0_ki,0.0_ki,ener/)
+ k2 = (/ener,0.0_ki,0.0_ki,-ener/)
+ k3 =-(/ener,0.0_ki,ener*sin(theta),ener*cos(theta)/)
+ k4 =-(/ener,0.0_ki,-ener*sin(theta),-ener*cos(theta)/)
+ !
+ ! Mandelstam variables:
+ !
+ S = 2.0_ki*scalar(k1,k2)
+ T = 2.0_ki*scalar(k2,k3)
+ U = 2.0_ki*scalar(k1,k3)
+ !
+ write (17,*) '>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<'
+ write (17,*) '>>>>>>>>>>>>> GOLEM OUTPUT <<<<<<<<<<<<<<'
+ write (17,*) '>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<'
+ write (17,*) ''
+ write (17,*) ' Four photon helicity amplitudes'
+ write (17,*) ' ==============================='
+ write (17,*) ''
+ write (17,*) ' In all numbers alpha^2 times a phase is omitted !'
+ write (17,*) ''
+ write (17,*) ' phase(++++) = [21]*[43]/<12>/<34>'
+ write (17,*) ' phase(+++-) = [21]*<14>*[31]/<12>/[41]/<13>'
+ write (17,*) ' phase(++--) = [21]*<34>/<12>/[43]'
+ write (17,*) ''
+ write(17,'(" S = ",e16.10)') S
+ write(17,'(" T = ",e16.10)') T
+ write(17,'(" U = ",e16.10)') U
+ !
+ call initgolem95(4)
+ !
+ !
+ !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ ! GRAPH 1:
+ !
+ ! k4-> <-k3
+ ! yyyyx----<----xyyyyy
+ ! | |
+ ! | |
+ ! | |
+ ! | |
+ ! yyyyx---->----xyyyyy
+ ! k2-> <-k1
+ !
+ ! graph with reversed charge flow amounts to factor 2
+ !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ !
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.0_ki
+ s_mat(1,2) = 0.0_ki
+ s_mat(1,3) = S
+ s_mat(1,4) = 0.0_ki
+ !
+ s_mat(2,1) = 0.0_ki
+ s_mat(2,2) = 0.0_ki
+ s_mat(2,3) = 0.0_ki
+ s_mat(2,4) = U
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.0_ki
+ s_mat(3,4) = 0.0_ki
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.0_ki
+ !
+ call cpu_time(t1)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix()
+ !
+ tc(1)=a40(s_null)
+ tc(2)=a41(1,s_null)
+ tc(3)=a41(2,s_null)
+ tc(4)=a41(3,s_null)
+ tc(5)=b42(s_null)
+ tc(6)=a42(1,1,s_null)
+ tc(7)=a42(1,2,s_null)
+ tc(8)=a42(1,3,s_null)
+ tc(9)=a42(2,2,s_null)
+ tc(10)=a42(2,3,s_null)
+ tc(11)=a42(3,3,s_null)
+ tc(12)=b43(1,s_null)
+ tc(13)=b43(2,s_null)
+ tc(14)=b43(3,s_null)
+ tc(15)=a43(1,1,1,s_null)
+ tc(16)=a43(1,1,2,s_null)
+ tc(17)=a43(1,1,3,s_null)
+ tc(18)=a43(1,2,2,s_null)
+ tc(19)=a43(1,2,3,s_null)
+ tc(20)=a43(1,3,3,s_null)
+ tc(21)=a43(2,2,2,s_null)
+ tc(22)=a43(2,2,3,s_null)
+ tc(23)=a43(2,3,3,s_null)
+ tc(24)=a43(3,3,3,s_null)
+ tc(25)=c44(s_null)
+ tc(26)=b44(1,1,s_null)
+ tc(27)=b44(1,2,s_null)
+ tc(28)=b44(1,3,s_null)
+ tc(29)=b44(2,2,s_null)
+ tc(30)=b44(2,3,s_null)
+ tc(31)=b44(3,3,s_null)
+ tc(32)=a44(1,1,1,1,s_null)
+ tc(33)=a44(1,1,1,2,s_null)
+ tc(34)=a44(1,1,1,3,s_null)
+ tc(35)=a44(1,1,2,2,s_null)
+ tc(36)=a44(1,1,2,3,s_null)
+ tc(37)=a44(1,1,3,3,s_null)
+ tc(38)=a44(1,2,2,2,s_null)
+ tc(39)=a44(1,2,2,3,s_null)
+ tc(40)=a44(1,2,3,3,s_null)
+ tc(41)=a44(1,3,3,3,s_null)
+ tc(42)=a44(2,2,2,2,s_null)
+ tc(43)=a44(2,2,2,3,s_null)
+ tc(44)=a44(2,2,3,3,s_null)
+ tc(45)=a44(2,3,3,3,s_null)
+ tc(46)=a44(3,3,3,3,s_null)
+ !
+ tc(47)=a30((/ 1 /))
+ tc(48)=a31(2,(/ 1 /))
+ tc(49)=a31(3,(/ 1 /))
+ tc(50)=b32((/ 1 /))
+ tc(51)=a32(2,2,(/ 1 /))
+ tc(52)=a32(2,3,(/ 1 /))
+ tc(53)=a32(3,3,(/ 1 /))
+ tc(54)=b33(2,(/ 1 /))
+ tc(55)=b33(3,(/ 1 /))
+ tc(56)=a33(2,2,2,(/ 1 /))
+ tc(57)=a33(2,2,3,(/ 1 /))
+ tc(58)=a33(2,3,3,(/ 1 /))
+ tc(59)=a33(3,3,3,(/ 1 /))
+ !
+ tc(60)=a30((/ 2 /))
+ tc(61)=a31(1,(/ 2 /))
+ tc(62)=a31(3,(/ 2 /))
+ tc(63)=b32((/ 2 /))
+ tc(64)=a32(1,1,(/ 2 /))
+ tc(65)=a32(1,3,(/ 2 /))
+ tc(66)=a32(3,3,(/ 2 /))
+ tc(67)=b33(1,(/ 2 /))
+ tc(68)=b33(3,(/ 2 /))
+ tc(69)=a33(1,1,1,(/ 2 /))
+ tc(70)=a33(1,1,3,(/ 2 /))
+ tc(71)=a33(1,3,3,(/ 2 /))
+ tc(72)=a33(3,3,3,(/ 2 /))
+ !
+ tc(73)=a30((/ 3 /))
+ tc(74)=a31(1,(/ 3 /))
+ tc(75)=a31(2,(/ 3 /))
+ tc(76)=b32((/ 3 /))
+ tc(77)=a32(1,1,(/ 3 /))
+ tc(78)=a32(1,2,(/ 3 /))
+ tc(79)=a32(2,2,(/ 3 /))
+ tc(80)=b33(1,(/ 3 /))
+ tc(81)=b33(2,(/ 3 /))
+ tc(82)=a33(1,1,1,(/ 3 /))
+ tc(83)=a33(1,1,2,(/ 3 /))
+ tc(84)=a33(1,2,2,(/ 3 /))
+ tc(85)=a33(2,2,2,(/ 3 /))
+ !
+ tc(86)=a30((/ 4 /))
+ tc(87)=a31(1,(/ 4 /))
+ tc(88)=a31(2,(/ 4 /))
+ tc(89)=b32((/ 4 /))
+ tc(90)=a32(1,1,(/ 4 /))
+ tc(91)=a32(1,2,(/ 4 /))
+ tc(92)=a32(2,2,(/ 4 /))
+ tc(93)=b33(1,(/ 4 /))
+ tc(94)=b33(2,(/ 4 /))
+ tc(95)=a33(1,1,1,(/ 4 /))
+ tc(96)=a33(1,1,2,(/ 4 /))
+ tc(97)=a33(1,2,2,(/ 4 /))
+ tc(98)=a33(2,2,2,(/ 4 /))
+ !
+ tc(99)=a20((/ 1,3 /))
+ tc(100)=a21(2,(/ 1,3 /))
+ tc(101)=b22((/ 1,3 /))
+ tc(102)=a22(2,2,(/ 1,3 /))
+ !
+ tc(103)=a20((/ 2,4 /))
+ tc(104)=a21(1,(/ 2,4 /))
+ tc(105)=b22((/ 2,4 /))
+ tc(106)=a22(1,1,(/ 2,4 /))
+ !
+ g1PPPP =&
+ &2.0_ki*tc(1)*S**(-1)*U**3 - 2.0_ki*tc(1)*S**(-1)*T**2*U + 2.0_ki*tc(1)&
+ &*S*U - 4.0_ki*tc(2)*S**(-1)*T*U**2 - 4.0_ki*tc(2)*S**(-1)*T**2*U - 4.&
+ &0_ki*tc(2)*T*U - 8.0_ki*tc(3)*S**(-2)*T*U**3 - 8.0_ki*tc(3)*S**(-2)*&
+ &T**2*U**2 - 8.0_ki*tc(3)*S**(-1)*T**2*U - 8.0_ki*tc(3)*T*U - 4.0_ki*&
+ &tc(4)*S**(-1)*T*U**2 - 4.0_ki*tc(4)*S**(-1)*T**2*U - 4.0_ki*tc(4)*T*&
+ &U + 16.0_ki*tc(5)*S**(-2)*U**3 + 16.0_ki*tc(5)*S**(-2)*T*U**2 + 32.0_ki&
+ &*tc(5)*S**(-1)*T*U - 16.0_ki*tc(5)*S**(-1)*T**2 + 16.0_ki*tc(5)*S - &
+ &4.0_ki*tc(6)*T*U - 8.0_ki*tc(7)*S**(-2)*T*U**3 - 8.0_ki*tc(7)*S**(-2)*&
+ &T**2*U**2 - 8.0_ki*tc(7)*S**(-1)*T**2*U - 8.0_ki*tc(7)*T*U - 8.0_ki*&
+ &tc(8)*T*U - 8.0_ki*tc(9)*S**(-2)*T*U**3 - 24.0_ki*tc(9)*S**(-2)*T**2&
+ &*U**2 - 8.0_ki*tc(9)*S**(-1)*T**2*U - 8.0_ki*tc(9)*T*U - 8.0_ki*tc(10)&
+ &*S**(-2)*T*U**3 - 8.0_ki*tc(10)*S**(-2)*T**2*U**2 - 8.0_ki*tc(10)*&
+ &S**(-1)*T**2*U - 8.0_ki*tc(10)*T*U - 4.0_ki*tc(11)*T*U + 64.0_ki*tc(12&
+ &)*S**(-1)*T*U + 64.0_ki*tc(13)*S**(-2)*T*U**2 - 64.0_ki*tc(13)*&
+ &S**(-2)*T**2*U
+ g1PPPP = g1PPPP + 64.0_ki*tc(13)*S**(-1)*T*U + 64.0_ki*tc(14)*S**(-1)&
+ &*T*U - 32.0_ki*tc(18)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*S**(-2)*&
+ &T**2*U**2 - 32.0_ki*tc(22)*S**(-2)*T**2*U**2 - 64.0_ki*tc(25) - 64.0_ki&
+ &*tc(25)*S**(-2)*U**2 - 64.0_ki*tc(25)*S**(-2)*T**2 + 32.0_ki*tc(26)*&
+ &S**(-1)*T*U + 64.0_ki*tc(27)*S**(-2)*T*U**2 - 64.0_ki*tc(27)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(27)*S**(-1)*T*U + 64.0_ki*tc(28)*S**(-1)*T*U + &
+ &64.0_ki*tc(29)*S**(-2)*T*U**2 - 64.0_ki*tc(29)*S**(-2)*T**2*U + 64.0_ki&
+ &*tc(29)*S**(-1)*T*U + 64.0_ki*tc(30)*S**(-2)*T*U**2 - 64.0_ki*tc(30)&
+ &*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki*tc(31)*&
+ &S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(39)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42&
+ &)*S**(-2)*T**2*U**2 - 32.0_ki*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(&
+ &44)*S**(-2)*T**2*U**2 - 4.0_ki*tc(47)*S**(-2)*U**3 - 8.0_ki*tc(47)*&
+ &S**(-2)*T*U**2 - 4.0_ki*tc(47)*S**(-2)*T**2*U - 8.0_ki*tc(47)*&
+ &S**(-1)*T*U - 4.0_ki*tc(47)*U - 16.0_ki*tc(48)*S**(-2)*T*U**2 - 8.0_ki&
+ &*tc(49)*S**(-1)*T*U
+ g1PPPP = g1PPPP + 32.0_ki*tc(50)*S**(-2)*U**2 - 16.0_ki*tc(51)*&
+ &S**(-2)*T*U**2 - 16.0_ki*tc(52)*S**(-2)*T*U**2 - 2.0_ki*tc(60)*&
+ &S**(-1)*U**2 + 2.0_ki*tc(60)*S**(-1)*T**2 - 2.0_ki*tc(60)*S + 16.0_ki*&
+ &tc(63) - 2.0_ki*tc(86)*S**(-1)*U**2 + 2.0_ki*tc(86)*S**(-1)*T**2 - 2.&
+ &0_ki*tc(86)*S + 16.0_ki*tc(89) - 4.0_ki*tc(99) - 4.0_ki*tc(99)*S**(-2)*&
+ &U**2 + 4.0_ki*tc(99)*S**(-2)*T**2 - 4.0_ki*tc(103) - 4.0_ki*tc(103)*&
+ &S**(-2)*U**2 + 4.0_ki*tc(103)*S**(-2)*T**2
+ !
+ g1PPPM =&
+ & - 4.0_ki*tc(2)*T*U + 4.0_ki*tc(3)*S**(-1)*T*U**2 - 4.0_ki*tc(3)*&
+ &S**(-1)*T**2*U - 4.0_ki*tc(3)*T*U - 4.0_ki*tc(4)*T*U + 48.0_ki*tc(5)*&
+ &S**(-1)*T*U - 4.0_ki*tc(6)*T*U + 4.0_ki*tc(7)*S**(-1)*T*U**2 - 4.0_ki*&
+ &tc(7)*S**(-1)*T**2*U - 8.0_ki*tc(7)*T*U - 8.0_ki*tc(8)*T*U - 16.0_ki*&
+ &tc(9)*S**(-2)*T**2*U**2 + 4.0_ki*tc(9)*S**(-1)*T*U**2 - 4.0_ki*tc(9)&
+ &*S**(-1)*T**2*U - 4.0_ki*tc(9)*T*U + 4.0_ki*tc(10)*S**(-1)*T*U**2 - &
+ &4.0_ki*tc(10)*S**(-1)*T**2*U - 8.0_ki*tc(10)*T*U - 4.0_ki*tc(11)*T*U&
+ & + 64.0_ki*tc(12)*S**(-1)*T*U + 64.0_ki*tc(13)*S**(-2)*T*U**2 - 64.0_ki&
+ &*tc(13)*S**(-2)*T**2*U + 64.0_ki*tc(13)*S**(-1)*T*U + 64.0_ki*tc(14)&
+ &*S**(-1)*T*U - 32.0_ki*tc(18)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(22)*S**(-2)*T**2*U**2 + 128.0_ki*tc(&
+ &25)*S**(-2)*T*U + 32.0_ki*tc(26)*S**(-1)*T*U + 64.0_ki*tc(27)*&
+ &S**(-2)*T*U**2 - 64.0_ki*tc(27)*S**(-2)*T**2*U + 64.0_ki*tc(27)*&
+ &S**(-1)*T*U + 64.0_ki*tc(28)*S**(-1)*T*U + 64.0_ki*tc(29)*S**(-2)*T*&
+ &U**2
+ g1PPPM = g1PPPM - 64.0_ki*tc(29)*S**(-2)*T**2*U + 32.0_ki*tc(29)*&
+ &S**(-1)*T*U + 64.0_ki*tc(30)*S**(-2)*T*U**2 - 64.0_ki*tc(30)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki*tc(31)*S**(-1)*T*U - &
+ &16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*S**(-2)*T**2*U**2&
+ & - 32.0_ki*tc(39)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42)*S**(-2)*T**2*&
+ &U**2 - 32.0_ki*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(44)*S**(-2)*&
+ &T**2*U**2 - 8.0_ki*tc(47)*S**(-1)*T*U - 8.0_ki*tc(48)*S**(-2)*T*U**2&
+ & + 8.0_ki*tc(48)*S**(-2)*T**2*U - 8.0_ki*tc(48)*S**(-1)*T*U - 8.0_ki*&
+ &tc(49)*S**(-1)*T*U - 32.0_ki*tc(50)*S**(-2)*T*U - 8.0_ki*tc(51)*&
+ &S**(-2)*T*U**2 + 8.0_ki*tc(51)*S**(-2)*T**2*U - 8.0_ki*tc(52)*&
+ &S**(-2)*T*U**2 + 8.0_ki*tc(52)*S**(-2)*T**2*U
+ !
+ g1PPMM =&
+ & - 2.0_ki*tc(1)*S**(-1)*U**3 + 2.0_ki*tc(1)*S**(-1)*T**2*U + 2.0_ki*&
+ &tc(1)*S*U + 4.0_ki*tc(2)*S**(-1)*T*U**2 + 4.0_ki*tc(2)*S**(-1)*T**2*&
+ &U - 4.0_ki*tc(2)*T*U + 8.0_ki*tc(3)*S**(-2)*T*U**3 + 8.0_ki*tc(3)*&
+ &S**(-2)*T**2*U**2 + 8.0_ki*tc(3)*S**(-1)*T*U**2 - 8.0_ki*tc(3)*T*U&
+ & + 4.0_ki*tc(4)*S**(-1)*T*U**2 + 4.0_ki*tc(4)*S**(-1)*T**2*U - 4.0_ki*&
+ &tc(4)*T*U - 16.0_ki*tc(5)*S**(-2)*U**3 - 16.0_ki*tc(5)*S**(-2)*T*&
+ &U**2 - 16.0_ki*tc(5)*S**(-1)*U**2 + 32.0_ki*tc(5)*S**(-1)*T*U + 16.0_ki&
+ &*tc(5)*S - 4.0_ki*tc(6)*T*U + 8.0_ki*tc(7)*S**(-2)*T*U**3 + 8.0_ki*tc(&
+ &7)*S**(-2)*T**2*U**2 + 8.0_ki*tc(7)*S**(-1)*T*U**2 - 8.0_ki*tc(7)*T*&
+ &U - 8.0_ki*tc(8)*T*U + 8.0_ki*tc(9)*S**(-2)*T*U**3 - 8.0_ki*tc(9)*&
+ &S**(-2)*T**2*U**2 + 8.0_ki*tc(9)*S**(-1)*T*U**2 - 8.0_ki*tc(9)*T*U&
+ & + 8.0_ki*tc(10)*S**(-2)*T*U**3 + 8.0_ki*tc(10)*S**(-2)*T**2*U**2 + &
+ &8.0_ki*tc(10)*S**(-1)*T*U**2 - 8.0_ki*tc(10)*T*U - 4.0_ki*tc(11)*T*U&
+ & + 64.0_ki*tc(12)*S**(-1)*T*U + 64.0_ki*tc(13)*S**(-2)*T*U**2 - 64.0_ki&
+ &*tc(13)*S**(-2)*T**2*U
+ g1PPMM = g1PPMM + 64.0_ki*tc(13)*S**(-1)*T*U + 64.0_ki*tc(14)*S**(-1)&
+ &*T*U - 32.0_ki*tc(18)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*S**(-2)*&
+ &T**2*U**2 - 32.0_ki*tc(22)*S**(-2)*T**2*U**2 - 64.0_ki*tc(25) - 64.0_ki&
+ &*tc(25)*S**(-2)*U**2 - 64.0_ki*tc(25)*S**(-2)*T**2 + 32.0_ki*tc(26)*&
+ &S**(-1)*T*U + 64.0_ki*tc(27)*S**(-2)*T*U**2 - 64.0_ki*tc(27)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(27)*S**(-1)*T*U + 64.0_ki*tc(28)*S**(-1)*T*U + &
+ &64.0_ki*tc(29)*S**(-2)*T*U**2 - 64.0_ki*tc(29)*S**(-2)*T**2*U + 64.0_ki&
+ &*tc(29)*S**(-1)*T*U + 64.0_ki*tc(30)*S**(-2)*T*U**2 - 64.0_ki*tc(30)&
+ &*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki*tc(31)*&
+ &S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(39)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42&
+ &)*S**(-2)*T**2*U**2 - 32.0_ki*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(&
+ &44)*S**(-2)*T**2*U**2 + 4.0_ki*tc(47)*S**(-2)*U**3 + 8.0_ki*tc(47)*&
+ &S**(-2)*T*U**2 + 4.0_ki*tc(47)*S**(-2)*T**2*U - 8.0_ki*tc(47)*&
+ &S**(-1)*T*U - 4.0_ki*tc(47)*U + 16.0_ki*tc(48)*S**(-2)*T**2*U - 8.0_ki&
+ &*tc(49)*S**(-1)*T*U
+ g1PPMM = g1PPMM + 32.0_ki*tc(50)*S**(-2)*T**2 + 16.0_ki*tc(51)*&
+ &S**(-2)*T**2*U + 16.0_ki*tc(52)*S**(-2)*T**2*U + 2.0_ki*tc(60)*&
+ &S**(-1)*U**2 - 2.0_ki*tc(60)*S**(-1)*T**2 - 2.0_ki*tc(60)*S + 16.0_ki*&
+ &tc(63) + 2.0_ki*tc(86)*S**(-1)*U**2 - 2.0_ki*tc(86)*S**(-1)*T**2 - 2.&
+ &0_ki*tc(86)*S + 16.0_ki*tc(89) - 4.0_ki*tc(99) + 4.0_ki*tc(99)*S**(-2)*&
+ &U**2 - 4.0_ki*tc(99)*S**(-2)*T**2 - 4.0_ki*tc(103) + 4.0_ki*tc(103)*&
+ &S**(-2)*U**2 - 4.0_ki*tc(103)*S**(-2)*T**2
+ !
+ call cpu_time(t2)
+ !
+ ! The results are written in the file with unit 17
+ !
+ write (17,*) ''
+ write (17,*) 'Result of graph 1:'
+ write (17,*) '=================='
+ write (17,*) ''
+ write (17,*) 'g1PPPP ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPPP%a,ki),aimag(g1PPPP%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPPP%b,ki),aimag(g1PPPP%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPPP%c,ki),aimag(g1PPPP%c)
+ write (17,*) ''
+ write (17,*) 'g1PPPM ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPPM%a,ki),aimag(g1PPPM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPPM%b,ki),aimag(g1PPPM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPPM%c,ki),aimag(g1PPPM%c)
+ write (17,*) ''
+ write (17,*) 'g1PPMM ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPMM%a,ki),aimag(g1PPMM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPMM%b,ki),aimag(g1PPMM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g1PPMM%c,ki),aimag(g1PPMM%c)
+ write (17,*) ''
+ write (17,*) ''
+ write (17,*) 'CPU time for graph 1 (all shown helicities) = ',t2-t1
+ write (17,*) ''
+ !
+ !
+ ! routine to free the allocated memory
+ !
+ call exitgolem95()
+ !
+ !
+ !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ ! GRAPH 2:
+ !
+ ! k3-> <-k4
+ ! yyyyx----<----xyyyyy
+ ! | |
+ ! | |
+ ! | |
+ ! | |
+ ! yyyyx---->----xyyyyy
+ ! k2-> <-k1
+ !
+ ! graph with reversed charge flow amounts to factor 2
+ !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+ call initgolem95(4)
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.0_ki
+ s_mat(1,2) = 0.0_ki
+ s_mat(1,3) = S
+ s_mat(1,4) = 0.0_ki
+ !
+ s_mat(2,1) = 0.0_ki
+ s_mat(2,2) = 0.0_ki
+ s_mat(2,3) = 0.0_ki
+ s_mat(2,4) = T
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.0_ki
+ s_mat(3,4) = 0.0_ki
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.0_ki
+ !
+ !
+ !
+ call cpu_time(t1)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix()
+ !
+ tc(1)=a40(s_null)
+ tc(2)=a41(1,s_null)
+ tc(3)=a41(2,s_null)
+ tc(4)=a41(3,s_null)
+ tc(5)=b42(s_null)
+ tc(6)=a42(1,1,s_null)
+ tc(7)=a42(1,2,s_null)
+ tc(8)=a42(1,3,s_null)
+ tc(9)=a42(2,2,s_null)
+ tc(10)=a42(2,3,s_null)
+ tc(11)=a42(3,3,s_null)
+ tc(12)=b43(1,s_null)
+ tc(13)=b43(2,s_null)
+ tc(14)=b43(3,s_null)
+ tc(15)=a43(1,1,1,s_null)
+ tc(16)=a43(1,1,2,s_null)
+ tc(17)=a43(1,1,3,s_null)
+ tc(18)=a43(1,2,2,s_null)
+ tc(19)=a43(1,2,3,s_null)
+ tc(20)=a43(1,3,3,s_null)
+ tc(21)=a43(2,2,2,s_null)
+ tc(22)=a43(2,2,3,s_null)
+ tc(23)=a43(2,3,3,s_null)
+ tc(24)=a43(3,3,3,s_null)
+ tc(25)=c44(s_null)
+ tc(26)=b44(1,1,s_null)
+ tc(27)=b44(1,2,s_null)
+ tc(28)=b44(1,3,s_null)
+ tc(29)=b44(2,2,s_null)
+ tc(30)=b44(2,3,s_null)
+ tc(31)=b44(3,3,s_null)
+ tc(32)=a44(1,1,1,1,s_null)
+ tc(33)=a44(1,1,1,2,s_null)
+ tc(34)=a44(1,1,1,3,s_null)
+ tc(35)=a44(1,1,2,2,s_null)
+ tc(36)=a44(1,1,2,3,s_null)
+ tc(37)=a44(1,1,3,3,s_null)
+ tc(38)=a44(1,2,2,2,s_null)
+ tc(39)=a44(1,2,2,3,s_null)
+ tc(40)=a44(1,2,3,3,s_null)
+ tc(41)=a44(1,3,3,3,s_null)
+ tc(42)=a44(2,2,2,2,s_null)
+ tc(43)=a44(2,2,2,3,s_null)
+ tc(44)=a44(2,2,3,3,s_null)
+ tc(45)=a44(2,3,3,3,s_null)
+ tc(46)=a44(3,3,3,3,s_null)
+ !
+ tc(47)=a30((/ 1 /))
+ tc(48)=a31(2,(/ 1 /))
+ tc(49)=a31(3,(/ 1 /))
+ tc(50)=b32((/ 1 /))
+ tc(51)=a32(2,2,(/ 1 /))
+ tc(52)=a32(2,3,(/ 1 /))
+ tc(53)=a32(3,3,(/ 1 /))
+ tc(54)=b33(2,(/ 1 /))
+ tc(55)=b33(3,(/ 1 /))
+ tc(56)=a33(2,2,2,(/ 1 /))
+ tc(57)=a33(2,2,3,(/ 1 /))
+ tc(58)=a33(2,3,3,(/ 1 /))
+ tc(59)=a33(3,3,3,(/ 1 /))
+ !
+ tc(60)=a30((/ 2 /))
+ tc(61)=a31(1,(/ 2 /))
+ tc(62)=a31(3,(/ 2 /))
+ tc(63)=b32((/ 2 /))
+ tc(64)=a32(1,1,(/ 2 /))
+ tc(65)=a32(1,3,(/ 2 /))
+ tc(66)=a32(3,3,(/ 2 /))
+ tc(67)=b33(1,(/ 2 /))
+ tc(68)=b33(3,(/ 2 /))
+ tc(69)=a33(1,1,1,(/ 2 /))
+ tc(70)=a33(1,1,3,(/ 2 /))
+ tc(71)=a33(1,3,3,(/ 2 /))
+ tc(72)=a33(3,3,3,(/ 2 /))
+ !
+ tc(73)=a30((/ 3 /))
+ tc(74)=a31(1,(/ 3 /))
+ tc(75)=a31(2,(/ 3 /))
+ tc(76)=b32((/ 3 /))
+ tc(77)=a32(1,1,(/ 3 /))
+ tc(78)=a32(1,2,(/ 3 /))
+ tc(79)=a32(2,2,(/ 3 /))
+ tc(80)=b33(1,(/ 3 /))
+ tc(81)=b33(2,(/ 3 /))
+ tc(82)=a33(1,1,1,(/ 3 /))
+ tc(83)=a33(1,1,2,(/ 3 /))
+ tc(84)=a33(1,2,2,(/ 3 /))
+ tc(85)=a33(2,2,2,(/ 3 /))
+ !
+ tc(86)=a30((/ 4 /))
+ tc(87)=a31(1,(/ 4 /))
+ tc(88)=a31(2,(/ 4 /))
+ tc(89)=b32((/ 4 /))
+ tc(90)=a32(1,1,(/ 4 /))
+ tc(91)=a32(1,2,(/ 4 /))
+ tc(92)=a32(2,2,(/ 4 /))
+ tc(93)=b33(1,(/ 4 /))
+ tc(94)=b33(2,(/ 4 /))
+ tc(95)=a33(1,1,1,(/ 4 /))
+ tc(96)=a33(1,1,2,(/ 4 /))
+ tc(97)=a33(1,2,2,(/ 4 /))
+ tc(98)=a33(2,2,2,(/ 4 /))
+ !
+ !
+ tc(99)=a20((/ 1,3 /))
+ tc(100)=a21(2,(/ 1,3 /))
+ tc(101)=b22((/ 1,3 /))
+ tc(102)=a22(2,2,(/ 1,3 /))
+ !
+ !
+ tc(103)=a20((/ 2,4 /))
+ tc(104)=a21(1,(/ 2,4 /))
+ tc(105)=b22((/ 2,4 /))
+ tc(106)=a22(1,1,(/ 2,4 /))
+ !
+ g2PPPP =&
+ & - 2.0_ki*tc(1)*S**(-1)*T*U**2 + 2.0_ki*tc(1)*S**(-1)*T**3 + 2.0_ki*&
+ &tc(1)*S*T - 4.0_ki*tc(2)*S**(-1)*T*U**2 - 4.0_ki*tc(2)*S**(-1)*T**2*&
+ &U - 4.0_ki*tc(2)*T*U - 8.0_ki*tc(3)*S**(-2)*T**2*U**2 - 8.0_ki*tc(3)*&
+ &S**(-2)*T**3*U - 8.0_ki*tc(3)*S**(-1)*T*U**2 - 8.0_ki*tc(3)*T*U - 4.0_ki&
+ &*tc(4)*S**(-1)*T*U**2 - 4.0_ki*tc(4)*S**(-1)*T**2*U - 4.0_ki*tc(4)*&
+ &T*U + 16.0_ki*tc(5)*S**(-2)*T**2*U + 16.0_ki*tc(5)*S**(-2)*T**3 - 16.&
+ &0_ki*tc(5)*S**(-1)*U**2 + 32.0_ki*tc(5)*S**(-1)*T*U + 16.0_ki*tc(5)*S&
+ & - 4.0_ki*tc(6)*T*U - 8.0_ki*tc(7)*S**(-2)*T**2*U**2 - 8.0_ki*tc(7)*&
+ &S**(-2)*T**3*U - 8.0_ki*tc(7)*S**(-1)*T*U**2 - 8.0_ki*tc(7)*T*U - 8.0_ki&
+ &*tc(8)*T*U - 24.0_ki*tc(9)*S**(-2)*T**2*U**2 - 8.0_ki*tc(9)*S**(-2)&
+ &*T**3*U - 8.0_ki*tc(9)*S**(-1)*T*U**2 - 8.0_ki*tc(9)*T*U - 8.0_ki*tc(&
+ &10)*S**(-2)*T**2*U**2 - 8.0_ki*tc(10)*S**(-2)*T**3*U - 8.0_ki*tc(10)&
+ &*S**(-1)*T*U**2 - 8.0_ki*tc(10)*T*U - 4.0_ki*tc(11)*T*U + 64.0_ki*tc(&
+ &12)*S**(-1)*T*U - 64.0_ki*tc(13)*S**(-2)*T*U**2 + 64.0_ki*tc(13)*&
+ &S**(-2)*T**2*U
+ g2PPPP = g2PPPP + 64.0_ki*tc(13)*S**(-1)*T*U + 64.0_ki*tc(14)*S**(-1)&
+ &*T*U - 32.0_ki*tc(18)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*S**(-2)*&
+ &T**2*U**2 - 32.0_ki*tc(22)*S**(-2)*T**2*U**2 - 64.0_ki*tc(25) - 64.0_ki&
+ &*tc(25)*S**(-2)*U**2 - 64.0_ki*tc(25)*S**(-2)*T**2 + 32.0_ki*tc(26)*&
+ &S**(-1)*T*U - 64.0_ki*tc(27)*S**(-2)*T*U**2 + 64.0_ki*tc(27)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(27)*S**(-1)*T*U + 64.0_ki*tc(28)*S**(-1)*T*U - &
+ &64.0_ki*tc(29)*S**(-2)*T*U**2 + 64.0_ki*tc(29)*S**(-2)*T**2*U + 64.0_ki&
+ &*tc(29)*S**(-1)*T*U - 64.0_ki*tc(30)*S**(-2)*T*U**2 + 64.0_ki*tc(30)&
+ &*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki*tc(31)*&
+ &S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(39)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42&
+ &)*S**(-2)*T**2*U**2 - 32.0_ki*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(&
+ &44)*S**(-2)*T**2*U**2 - 4.0_ki*tc(47)*S**(-2)*T*U**2 - 8.0_ki*tc(47)&
+ &*S**(-2)*T**2*U - 4.0_ki*tc(47)*S**(-2)*T**3 - 8.0_ki*tc(47)*S**(-1)&
+ &*T*U - 4.0_ki*tc(47)*T - 16.0_ki*tc(48)*S**(-2)*T**2*U - 8.0_ki*tc(49)&
+ &*S**(-1)*T*U
+ g2PPPP = g2PPPP + 32.0_ki*tc(50)*S**(-2)*T**2 - 16.0_ki*tc(51)*&
+ &S**(-2)*T**2*U - 16.0_ki*tc(52)*S**(-2)*T**2*U + 2.0_ki*tc(60)*&
+ &S**(-1)*U**2 - 2.0_ki*tc(60)*S**(-1)*T**2 - 2.0_ki*tc(60)*S + 16.0_ki*&
+ &tc(63) + 2.0_ki*tc(86)*S**(-1)*U**2 - 2.0_ki*tc(86)*S**(-1)*T**2 - 2.&
+ &0_ki*tc(86)*S + 16.0_ki*tc(89) - 4.0_ki*tc(99) + 4.0_ki*tc(99)*S**(-2)*&
+ &U**2 - 4.0_ki*tc(99)*S**(-2)*T**2 - 4.0_ki*tc(103) + 4.0_ki*tc(103)*&
+ &S**(-2)*U**2 - 4.0_ki*tc(103)*S**(-2)*T**2
+ !
+ g2PPPM =&
+ & - 4.0_ki*tc(2)*T*U - 4.0_ki*tc(3)*S**(-1)*T*U**2 + 4.0_ki*tc(3)*&
+ &S**(-1)*T**2*U - 4.0_ki*tc(3)*T*U - 4.0_ki*tc(4)*T*U + 48.0_ki*tc(5)*&
+ &S**(-1)*T*U - 4.0_ki*tc(6)*T*U - 4.0_ki*tc(7)*S**(-1)*T*U**2 + 4.0_ki*&
+ &tc(7)*S**(-1)*T**2*U - 8.0_ki*tc(7)*T*U - 8.0_ki*tc(8)*T*U - 16.0_ki*&
+ &tc(9)*S**(-2)*T**2*U**2 - 4.0_ki*tc(9)*S**(-1)*T*U**2 + 4.0_ki*tc(9)&
+ &*S**(-1)*T**2*U - 4.0_ki*tc(9)*T*U - 4.0_ki*tc(10)*S**(-1)*T*U**2 + &
+ &4.0_ki*tc(10)*S**(-1)*T**2*U - 8.0_ki*tc(10)*T*U - 4.0_ki*tc(11)*T*U&
+ & + 64.0_ki*tc(12)*S**(-1)*T*U - 64.0_ki*tc(13)*S**(-2)*T*U**2 + 64.0_ki&
+ &*tc(13)*S**(-2)*T**2*U + 64.0_ki*tc(13)*S**(-1)*T*U + 64.0_ki*tc(14)&
+ &*S**(-1)*T*U - 32.0_ki*tc(18)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(22)*S**(-2)*T**2*U**2 + 128.0_ki*tc(&
+ &25)*S**(-2)*T*U + 32.0_ki*tc(26)*S**(-1)*T*U - 64.0_ki*tc(27)*&
+ &S**(-2)*T*U**2 + 64.0_ki*tc(27)*S**(-2)*T**2*U + 64.0_ki*tc(27)*&
+ &S**(-1)*T*U + 64.0_ki*tc(28)*S**(-1)*T*U - 64.0_ki*tc(29)*S**(-2)*T*&
+ &U**2
+ g2PPPM = g2PPPM + 64.0_ki*tc(29)*S**(-2)*T**2*U + 32.0_ki*tc(29)*&
+ &S**(-1)*T*U - 64.0_ki*tc(30)*S**(-2)*T*U**2 + 64.0_ki*tc(30)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki*tc(31)*S**(-1)*T*U - &
+ &16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*S**(-2)*T**2*U**2&
+ & - 32.0_ki*tc(39)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42)*S**(-2)*T**2*&
+ &U**2 - 32.0_ki*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(44)*S**(-2)*&
+ &T**2*U**2 - 8.0_ki*tc(47)*S**(-1)*T*U + 8.0_ki*tc(48)*S**(-2)*T*U**2&
+ & - 8.0_ki*tc(48)*S**(-2)*T**2*U - 8.0_ki*tc(48)*S**(-1)*T*U - 8.0_ki*&
+ &tc(49)*S**(-1)*T*U - 32.0_ki*tc(50)*S**(-2)*T*U + 8.0_ki*tc(51)*&
+ &S**(-2)*T*U**2 - 8.0_ki*tc(51)*S**(-2)*T**2*U + 8.0_ki*tc(52)*&
+ &S**(-2)*T*U**2 - 8.0_ki*tc(52)*S**(-2)*T**2*U
+ !
+ g2PPMM =&
+ &2.0_ki*tc(1)*S**(-1)*T*U**2 - 2.0_ki*tc(1)*S**(-1)*T**3 + 2.0_ki*tc(1)&
+ &*S*T + 4.0_ki*tc(2)*S**(-1)*T*U**2 + 4.0_ki*tc(2)*S**(-1)*T**2*U - 4.&
+ &0_ki*tc(2)*T*U + 8.0_ki*tc(3)*S**(-2)*T**2*U**2 + 8.0_ki*tc(3)*S**(-2)&
+ &*T**3*U + 8.0_ki*tc(3)*S**(-1)*T**2*U - 8.0_ki*tc(3)*T*U + 4.0_ki*tc(4&
+ &)*S**(-1)*T*U**2 + 4.0_ki*tc(4)*S**(-1)*T**2*U - 4.0_ki*tc(4)*T*U - &
+ &16.0_ki*tc(5)*S**(-2)*T**2*U - 16.0_ki*tc(5)*S**(-2)*T**3 + 32.0_ki*&
+ &tc(5)*S**(-1)*T*U - 16.0_ki*tc(5)*S**(-1)*T**2 + 16.0_ki*tc(5)*S - 4.&
+ &0_ki*tc(6)*T*U + 8.0_ki*tc(7)*S**(-2)*T**2*U**2 + 8.0_ki*tc(7)*S**(-2)&
+ &*T**3*U + 8.0_ki*tc(7)*S**(-1)*T**2*U - 8.0_ki*tc(7)*T*U - 8.0_ki*tc(8&
+ &)*T*U - 8.0_ki*tc(9)*S**(-2)*T**2*U**2 + 8.0_ki*tc(9)*S**(-2)*T**3*U&
+ & + 8.0_ki*tc(9)*S**(-1)*T**2*U - 8.0_ki*tc(9)*T*U + 8.0_ki*tc(10)*&
+ &S**(-2)*T**2*U**2 + 8.0_ki*tc(10)*S**(-2)*T**3*U + 8.0_ki*tc(10)*&
+ &S**(-1)*T**2*U - 8.0_ki*tc(10)*T*U - 4.0_ki*tc(11)*T*U + 64.0_ki*tc(12&
+ &)*S**(-1)*T*U - 64.0_ki*tc(13)*S**(-2)*T*U**2 + 64.0_ki*tc(13)*&
+ &S**(-2)*T**2*U
+ g2PPMM = g2PPMM + 64.0_ki*tc(13)*S**(-1)*T*U + 64.0_ki*tc(14)*S**(-1)&
+ &*T*U - 32.0_ki*tc(18)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*S**(-2)*&
+ &T**2*U**2 - 32.0_ki*tc(22)*S**(-2)*T**2*U**2 - 64.0_ki*tc(25) - 64.0_ki&
+ &*tc(25)*S**(-2)*U**2 - 64.0_ki*tc(25)*S**(-2)*T**2 + 32.0_ki*tc(26)*&
+ &S**(-1)*T*U - 64.0_ki*tc(27)*S**(-2)*T*U**2 + 64.0_ki*tc(27)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(27)*S**(-1)*T*U + 64.0_ki*tc(28)*S**(-1)*T*U - &
+ &64.0_ki*tc(29)*S**(-2)*T*U**2 + 64.0_ki*tc(29)*S**(-2)*T**2*U + 64.0_ki&
+ &*tc(29)*S**(-1)*T*U - 64.0_ki*tc(30)*S**(-2)*T*U**2 + 64.0_ki*tc(30)&
+ &*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki*tc(31)*&
+ &S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(39)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42&
+ &)*S**(-2)*T**2*U**2 - 32.0_ki*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(&
+ &44)*S**(-2)*T**2*U**2 + 4.0_ki*tc(47)*S**(-2)*T*U**2 + 8.0_ki*tc(47)&
+ &*S**(-2)*T**2*U + 4.0_ki*tc(47)*S**(-2)*T**3 - 8.0_ki*tc(47)*S**(-1)&
+ &*T*U - 4.0_ki*tc(47)*T + 16.0_ki*tc(48)*S**(-2)*T*U**2 - 8.0_ki*tc(49)&
+ &*S**(-1)*T*U
+ g2PPMM = g2PPMM + 32.0_ki*tc(50)*S**(-2)*U**2 + 16.0_ki*tc(51)*&
+ &S**(-2)*T*U**2 + 16.0_ki*tc(52)*S**(-2)*T*U**2 - 2.0_ki*tc(60)*&
+ &S**(-1)*U**2 + 2.0_ki*tc(60)*S**(-1)*T**2 - 2.0_ki*tc(60)*S + 16.0_ki*&
+ &tc(63) - 2.0_ki*tc(86)*S**(-1)*U**2 + 2.0_ki*tc(86)*S**(-1)*T**2 - 2.&
+ &0_ki*tc(86)*S + 16.0_ki*tc(89) - 4.0_ki*tc(99) - 4.0_ki*tc(99)*S**(-2)*&
+ &U**2 + 4.0_ki*tc(99)*S**(-2)*T**2 - 4.0_ki*tc(103) - 4.0_ki*tc(103)*&
+ &S**(-2)*U**2 + 4.0_ki*tc(103)*S**(-2)*T**2
+ !
+ call cpu_time(t2)
+ !
+ ! The results are written in the file with unit 17
+ !
+ write (17,*) ''
+ write (17,*) 'Result of graph 2:'
+ write (17,*) '=================='
+ write (17,*) ''
+ write (17,*) 'g2PPPP ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPPP%a,ki),aimag(g2PPPP%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPPP%b,ki),aimag(g2PPPP%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPPP%c,ki),aimag(g2PPPP%c)
+ write (17,*) ''
+ write (17,*) 'g2PPPM ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPPM%a,ki),aimag(g2PPPM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPPM%b,ki),aimag(g2PPPM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPPM%c,ki),aimag(g2PPPM%c)
+ write (17,*) ''
+ write (17,*) 'g2PPMM ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPMM%a,ki),aimag(g2PPMM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPMM%b,ki),aimag(g2PPMM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g2PPMM%c,ki),aimag(g2PPMM%c)
+ write (17,*) ''
+ write (17,*) ''
+ write (17,*) 'CPU time for graph 2 = ',t2-t1
+ write (17,*) ''
+ !
+ ! routine to free the allocated memory
+ !
+ call exitgolem95()
+ !
+ !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ ! GRAPH 3:
+ !
+ ! k2-> <-k4
+ ! yyyyx----<----xyyyyy
+ ! | |
+ ! | |
+ ! | |
+ ! | |
+ ! yyyyx---->----xyyyyy
+ ! k3-> <-k1
+ !
+ ! graph with reversed charge flow amounts to factor 2
+ !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ !
+ call initgolem95(4)
+ !
+ ! Definition of the S matrix
+ !
+ s_mat(1,1) = 0.0_ki
+ s_mat(1,2) = 0.0_ki
+ s_mat(1,3) = U
+ s_mat(1,4) = 0.0_ki
+ !
+ s_mat(2,1) = 0.0_ki
+ s_mat(2,2) = 0.0_ki
+ s_mat(2,3) = 0.0_ki
+ s_mat(2,4) = T
+ !
+ s_mat(3,1) = s_mat(1,3)
+ s_mat(3,2) = s_mat(2,3)
+ s_mat(3,3) = 0.0_ki
+ s_mat(3,4) = 0.0_ki
+ !
+ s_mat(4,1) = s_mat(1,4)
+ s_mat(4,2) = s_mat(2,4)
+ s_mat(4,3) = s_mat(3,4)
+ s_mat(4,4) = 0.0_ki
+ !
+ call cpu_time(t1)
+ !
+ ! The inverse of the S matrix is computed numerically, and also all
+ ! the related quantities: b coefficients, ......
+ !
+ call preparesmatrix()
+ !
+ tc(1)=a40(s_null)
+ tc(2)=a41(1,s_null)
+ tc(3)=a41(2,s_null)
+ tc(4)=a41(3,s_null)
+ tc(5)=b42(s_null)
+ tc(6)=a42(1,1,s_null)
+ tc(7)=a42(1,2,s_null)
+ tc(8)=a42(1,3,s_null)
+ tc(9)=a42(2,2,s_null)
+ tc(10)=a42(2,3,s_null)
+ tc(11)=a42(3,3,s_null)
+ tc(12)=b43(1,s_null)
+ tc(13)=b43(2,s_null)
+ tc(14)=b43(3,s_null)
+ tc(15)=a43(1,1,1,s_null)
+ tc(16)=a43(1,1,2,s_null)
+ tc(17)=a43(1,1,3,s_null)
+ tc(18)=a43(1,2,2,s_null)
+ tc(19)=a43(1,2,3,s_null)
+ tc(20)=a43(1,3,3,s_null)
+ tc(21)=a43(2,2,2,s_null)
+ tc(22)=a43(2,2,3,s_null)
+ tc(23)=a43(2,3,3,s_null)
+ tc(24)=a43(3,3,3,s_null)
+ tc(25)=c44(s_null)
+ tc(26)=b44(1,1,s_null)
+ tc(27)=b44(1,2,s_null)
+ tc(28)=b44(1,3,s_null)
+ tc(29)=b44(2,2,s_null)
+ tc(30)=b44(2,3,s_null)
+ tc(31)=b44(3,3,s_null)
+ tc(32)=a44(1,1,1,1,s_null)
+ tc(33)=a44(1,1,1,2,s_null)
+ tc(34)=a44(1,1,1,3,s_null)
+ tc(35)=a44(1,1,2,2,s_null)
+ tc(36)=a44(1,1,2,3,s_null)
+ tc(37)=a44(1,1,3,3,s_null)
+ tc(38)=a44(1,2,2,2,s_null)
+ tc(39)=a44(1,2,2,3,s_null)
+ tc(40)=a44(1,2,3,3,s_null)
+ tc(41)=a44(1,3,3,3,s_null)
+ tc(42)=a44(2,2,2,2,s_null)
+ tc(43)=a44(2,2,2,3,s_null)
+ tc(44)=a44(2,2,3,3,s_null)
+ tc(45)=a44(2,3,3,3,s_null)
+ tc(46)=a44(3,3,3,3,s_null)
+ !
+ tc(47)=a30((/ 1 /))
+ tc(48)=a31(2,(/ 1 /))
+ tc(49)=a31(3,(/ 1 /))
+ tc(50)=b32((/ 1 /))
+ tc(51)=a32(2,2,(/ 1 /))
+ tc(52)=a32(2,3,(/ 1 /))
+ tc(53)=a32(3,3,(/ 1 /))
+ tc(54)=b33(2,(/ 1 /))
+ tc(55)=b33(3,(/ 1 /))
+ tc(56)=a33(2,2,2,(/ 1 /))
+ tc(57)=a33(2,2,3,(/ 1 /))
+ tc(58)=a33(2,3,3,(/ 1 /))
+ tc(59)=a33(3,3,3,(/ 1 /))
+ !
+ tc(60)=a30((/ 2 /))
+ tc(61)=a31(1,(/ 2 /))
+ tc(62)=a31(3,(/ 2 /))
+ tc(63)=b32((/ 2 /))
+ tc(64)=a32(1,1,(/ 2 /))
+ tc(65)=a32(1,3,(/ 2 /))
+ tc(66)=a32(3,3,(/ 2 /))
+ tc(67)=b33(1,(/ 2 /))
+ tc(68)=b33(3,(/ 2 /))
+ tc(69)=a33(1,1,1,(/ 2 /))
+ tc(70)=a33(1,1,3,(/ 2 /))
+ tc(71)=a33(1,3,3,(/ 2 /))
+ tc(72)=a33(3,3,3,(/ 2 /))
+ !
+ tc(73)=a30((/ 3 /))
+ tc(74)=a31(1,(/ 3 /))
+ tc(75)=a31(2,(/ 3 /))
+ tc(76)=b32((/ 3 /))
+ tc(77)=a32(1,1,(/ 3 /))
+ tc(78)=a32(1,2,(/ 3 /))
+ tc(79)=a32(2,2,(/ 3 /))
+ tc(80)=b33(1,(/ 3 /))
+ tc(81)=b33(2,(/ 3 /))
+ tc(82)=a33(1,1,1,(/ 3 /))
+ tc(83)=a33(1,1,2,(/ 3 /))
+ tc(84)=a33(1,2,2,(/ 3 /))
+ tc(85)=a33(2,2,2,(/ 3 /))
+ !
+ tc(86)=a30((/ 4 /))
+ tc(87)=a31(1,(/ 4 /))
+ tc(88)=a31(2,(/ 4 /))
+ tc(89)=b32((/ 4 /))
+ tc(90)=a32(1,1,(/ 4 /))
+ tc(91)=a32(1,2,(/ 4 /))
+ tc(92)=a32(2,2,(/ 4 /))
+ tc(93)=b33(1,(/ 4 /))
+ tc(94)=b33(2,(/ 4 /))
+ tc(95)=a33(1,1,1,(/ 4 /))
+ tc(96)=a33(1,1,2,(/ 4 /))
+ tc(97)=a33(1,2,2,(/ 4 /))
+ tc(98)=a33(2,2,2,(/ 4 /))
+ !
+ tc(99)=a20((/ 1,3 /))
+ tc(100)=a21(2,(/ 1,3 /))
+ tc(101)=b22((/ 1,3 /))
+ tc(102)=a22(2,2,(/ 1,3 /))
+ !
+ tc(103)=a20((/ 2,4 /))
+ tc(104)=a21(1,(/ 2,4 /))
+ tc(105)=b22((/ 2,4 /))
+ tc(106)=a22(1,1,(/ 2,4 /))
+ !
+ !
+ g3PPPP =&
+ &2.0_ki*tc(1)*S**(-2)*T*U**3 - 2.0_ki*tc(1)*S**(-2)*T**3*U - 2.0_ki*tc(&
+ &1)*T*U + 4.0_ki*tc(2)*S**(-2)*T*U**3 - 4.0_ki*tc(2)*S**(-2)*T**3*U&
+ & + 4.0_ki*tc(2)*S**(-1)*T*U**2 + 4.0_ki*tc(2)*S**(-1)*T**2*U + 8.0_ki*&
+ &tc(3)*S**(-2)*T*U**3 - 8.0_ki*tc(3)*S**(-2)*T**3*U + 8.0_ki*tc(3)*&
+ &S**(-1)*T*U**2 + 8.0_ki*tc(3)*S**(-1)*T**2*U + 4.0_ki*tc(4)*S**(-2)*&
+ &T*U**3 - 4.0_ki*tc(4)*S**(-2)*T**3*U + 4.0_ki*tc(4)*S**(-1)*T*U**2&
+ & + 4.0_ki*tc(4)*S**(-1)*T**2*U + 16.0_ki*tc(5)*S**(-2)*U**3 - 16.0_ki*&
+ &tc(5)*S**(-2)*T*U**2 + 16.0_ki*tc(5)*S**(-2)*T**2*U + 16.0_ki*tc(5)*&
+ &S**(-2)*T**3 - 16.0_ki*tc(5)*U - 16.0_ki*tc(5)*T + 4.0_ki*tc(6)*&
+ &S**(-1)*T*U**2 + 4.0_ki*tc(6)*S**(-1)*T**2*U + 8.0_ki*tc(7)*S**(-2)*&
+ &T*U**3 - 16.0_ki*tc(7)*S**(-2)*T**2*U**2 - 8.0_ki*tc(7)*S**(-2)*T**3&
+ &*U + 8.0_ki*tc(7)*S**(-1)*T*U**2 + 8.0_ki*tc(7)*S**(-1)*T**2*U + 8.0_ki&
+ &*tc(8)*S**(-2)*T*U**3 - 16.0_ki*tc(8)*S**(-2)*T**2*U**2 - 8.0_ki*tc(&
+ &8)*S**(-2)*T**3*U + 8.0_ki*tc(9)*S**(-2)*T*U**3 - 16.0_ki*tc(9)*&
+ &S**(-2)*T**2*U**2
+ g3PPPP = g3PPPP - 8.0_ki*tc(9)*S**(-2)*T**3*U + 8.0_ki*tc(9)*S**(-1)*&
+ &T*U**2 + 8.0_ki*tc(9)*S**(-1)*T**2*U + 8.0_ki*tc(10)*S**(-2)*T*U**3&
+ & - 16.0_ki*tc(10)*S**(-2)*T**2*U**2 - 8.0_ki*tc(10)*S**(-2)*T**3*U&
+ & + 8.0_ki*tc(10)*S**(-1)*T*U**2 + 8.0_ki*tc(10)*S**(-1)*T**2*U + 4.0_ki&
+ &*tc(11)*S**(-1)*T*U**2 + 4.0_ki*tc(11)*S**(-1)*T**2*U - 32.0_ki*tc(&
+ &12)*S**(-2)*T*U**2 + 32.0_ki*tc(12)*S**(-2)*T**2*U + 32.0_ki*tc(12)*&
+ &S**(-1)*T*U - 64.0_ki*tc(13)*S**(-2)*T*U**2 + 64.0_ki*tc(13)*S**(-2)&
+ &*T**2*U + 64.0_ki*tc(13)*S**(-1)*T*U - 32.0_ki*tc(14)*S**(-2)*T*U**2&
+ & + 32.0_ki*tc(14)*S**(-2)*T**2*U + 32.0_ki*tc(14)*S**(-1)*T*U - 16.0_ki&
+ &*tc(16)*S**(-2)*T**2*U**2 - 16.0_ki*tc(17)*S**(-2)*T**2*U**2 - 48.0_ki&
+ &*tc(18)*S**(-2)*T**2*U**2 - 64.0_ki*tc(19)*S**(-2)*T**2*U**2 - 16.&
+ &0_ki*tc(20)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*S**(-2)*T**2*U**2 - &
+ &48.0_ki*tc(22)*S**(-2)*T**2*U**2 - 16.0_ki*tc(23)*S**(-2)*T**2*U**2&
+ & - 64.0_ki*tc(25) - 64.0_ki*tc(25)*S**(-2)*U**2 - 64.0_ki*tc(25)*&
+ &S**(-2)*T**2 + 32.0_ki*tc(26)*S**(-1)*T*U - 64.0_ki*tc(27)*S**(-2)*T&
+ &*U**2
+ g3PPPP = g3PPPP + 64.0_ki*tc(27)*S**(-2)*T**2*U + 64.0_ki*tc(27)*&
+ &S**(-1)*T*U - 64.0_ki*tc(28)*S**(-2)*T*U**2 + 64.0_ki*tc(28)*S**(-2)&
+ &*T**2*U - 64.0_ki*tc(29)*S**(-2)*T*U**2 + 64.0_ki*tc(29)*S**(-2)*&
+ &T**2*U + 64.0_ki*tc(29)*S**(-1)*T*U - 64.0_ki*tc(30)*S**(-2)*T*U**2&
+ & + 64.0_ki*tc(30)*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U + 32.0_ki&
+ &*tc(31)*S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - 32.0_ki*tc(&
+ &36)*S**(-2)*T**2*U**2 - 16.0_ki*tc(37)*S**(-2)*T**2*U**2 - 32.0_ki*&
+ &tc(38)*S**(-2)*T**2*U**2 - 64.0_ki*tc(39)*S**(-2)*T**2*U**2 - 32.0_ki&
+ &*tc(40)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42)*S**(-2)*T**2*U**2 - 32.0_ki&
+ &*tc(43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(44)*S**(-2)*T**2*U**2 + 4.0_ki&
+ &*tc(47)*S**(-2)*T*U**2 - 4.0_ki*tc(47)*S**(-2)*T**3 + 8.0_ki*tc(47)&
+ &*S**(-1)*T*U + 4.0_ki*tc(47)*T - 16.0_ki*tc(48)*S**(-2)*T**2*U + 8.0_ki&
+ &*tc(49)*S**(-1)*T*U + 32.0_ki*tc(50)*S**(-2)*T**2 - 16.0_ki*tc(51)*&
+ &S**(-2)*T**2*U - 16.0_ki*tc(52)*S**(-2)*T**2*U - 2.0_ki*tc(60)*&
+ &S**(-2)*U**3 + 2.0_ki*tc(60)*S**(-2)*T**2*U + 2.0_ki*tc(60)*U - 4.0_ki&
+ &*tc(61)*S**(-1)*T*U
+ g3PPPP = g3PPPP - 4.0_ki*tc(62)*S**(-1)*T*U + 16.0_ki*tc(63)*S**(-2)*&
+ &U**2 + 8.0_ki*tc(65)*S**(-2)*T*U**2 - 2.0_ki*tc(86)*S**(-2)*U**3 + 2.&
+ &0_ki*tc(86)*S**(-2)*T**2*U + 4.0_ki*tc(86)*S**(-1)*T*U + 2.0_ki*tc(86)&
+ &*U - 8.0_ki*tc(87)*S**(-2)*T*U**2 + 4.0_ki*tc(88)*S**(-1)*T*U + 16.0_ki&
+ &*tc(89)*S**(-2)*U**2 - 8.0_ki*tc(90)*S**(-2)*T*U**2 - 8.0_ki*tc(91)*&
+ &S**(-2)*T*U**2 + 4.0_ki*tc(99) - 4.0_ki*tc(99)*S**(-2)*U**2 - 4.0_ki*&
+ &tc(99)*S**(-2)*T**2 + 4.0_ki*tc(103) - 4.0_ki*tc(103)*S**(-2)*U**2&
+ & - 4.0_ki*tc(103)*S**(-2)*T**2
+ !
+ g3PPPM =&
+ & - 4.0_ki*tc(1)*S**(-2)*T**2*U**2 - 4.0_ki*tc(1)*S**(-2)*T**3*U + 4.0_ki&
+ &*tc(2)*S**(-2)*T*U**3 - 4.0_ki*tc(2)*S**(-2)*T**3*U + 4.0_ki*tc(3)*&
+ &S**(-2)*T*U**3 - 4.0_ki*tc(3)*S**(-2)*T**2*U**2 - 8.0_ki*tc(3)*&
+ &S**(-2)*T**3*U + 4.0_ki*tc(3)*S**(-1)*T*U**2 + 4.0_ki*tc(3)*S**(-1)*&
+ &T**2*U - 4.0_ki*tc(4)*S**(-2)*T**2*U**2 - 4.0_ki*tc(4)*S**(-2)*T**3*&
+ &U + 4.0_ki*tc(4)*S**(-1)*T*U**2 + 4.0_ki*tc(4)*S**(-1)*T**2*U - 48.0_ki&
+ &*tc(5)*S**(-2)*T*U**2 - 16.0_ki*tc(5)*S**(-2)*T**2*U + 4.0_ki*tc(7)*&
+ &S**(-2)*T*U**3 - 16.0_ki*tc(7)*S**(-2)*T**2*U**2 - 4.0_ki*tc(7)*&
+ &S**(-2)*T**3*U + 4.0_ki*tc(8)*S**(-2)*T*U**3 - 16.0_ki*tc(8)*S**(-2)&
+ &*T**2*U**2 - 4.0_ki*tc(8)*S**(-2)*T**3*U + 4.0_ki*tc(9)*S**(-2)*T*&
+ &U**3 - 16.0_ki*tc(9)*S**(-2)*T**2*U**2 - 4.0_ki*tc(9)*S**(-2)*T**3*U&
+ & + 4.0_ki*tc(9)*S**(-1)*T*U**2 + 4.0_ki*tc(9)*S**(-1)*T**2*U + 4.0_ki*&
+ &tc(10)*S**(-2)*T*U**3 - 16.0_ki*tc(10)*S**(-2)*T**2*U**2 - 4.0_ki*&
+ &tc(10)*S**(-2)*T**3*U + 8.0_ki*tc(10)*S**(-1)*T*U**2 + 8.0_ki*tc(10)&
+ &*S**(-1)*T**2*U
+ g3PPPM = g3PPPM + 4.0_ki*tc(11)*S**(-1)*T*U**2 + 4.0_ki*tc(11)*&
+ &S**(-1)*T**2*U - 32.0_ki*tc(12)*S**(-2)*T*U**2 + 32.0_ki*tc(12)*&
+ &S**(-2)*T**2*U - 96.0_ki*tc(13)*S**(-2)*T*U**2 + 32.0_ki*tc(13)*&
+ &S**(-2)*T**2*U + 32.0_ki*tc(13)*S**(-1)*T*U - 64.0_ki*tc(14)*S**(-2)&
+ &*T*U**2 + 32.0_ki*tc(14)*S**(-1)*T*U - 16.0_ki*tc(16)*S**(-2)*T**2*&
+ &U**2 - 16.0_ki*tc(17)*S**(-2)*T**2*U**2 - 48.0_ki*tc(18)*S**(-2)*&
+ &T**2*U**2 - 64.0_ki*tc(19)*S**(-2)*T**2*U**2 - 16.0_ki*tc(20)*&
+ &S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*S**(-2)*T**2*U**2 - 48.0_ki*tc(22&
+ &)*S**(-2)*T**2*U**2 - 16.0_ki*tc(23)*S**(-2)*T**2*U**2 + 128.0_ki*&
+ &tc(25)*S**(-2)*T*U - 64.0_ki*tc(27)*S**(-2)*T*U**2 + 64.0_ki*tc(27)*&
+ &S**(-2)*T**2*U - 64.0_ki*tc(28)*S**(-2)*T*U**2 + 64.0_ki*tc(28)*&
+ &S**(-2)*T**2*U - 64.0_ki*tc(29)*S**(-2)*T*U**2 + 64.0_ki*tc(29)*&
+ &S**(-2)*T**2*U + 32.0_ki*tc(29)*S**(-1)*T*U - 64.0_ki*tc(30)*S**(-2)&
+ &*T*U**2 + 64.0_ki*tc(30)*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U&
+ & + 32.0_ki*tc(31)*S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - &
+ &32.0_ki*tc(36)*S**(-2)*T**2*U**2
+ g3PPPM = g3PPPM - 16.0_ki*tc(37)*S**(-2)*T**2*U**2 - 32.0_ki*tc(38)*&
+ &S**(-2)*T**2*U**2 - 64.0_ki*tc(39)*S**(-2)*T**2*U**2 - 32.0_ki*tc(40&
+ &)*S**(-2)*T**2*U**2 - 16.0_ki*tc(42)*S**(-2)*T**2*U**2 - 32.0_ki*tc(&
+ &43)*S**(-2)*T**2*U**2 - 16.0_ki*tc(44)*S**(-2)*T**2*U**2 + 4.0_ki*&
+ &tc(47)*S**(-2)*T*U**2 + 4.0_ki*tc(47)*S**(-2)*T**2*U + 4.0_ki*tc(47)&
+ &*S**(-1)*T*U + 8.0_ki*tc(48)*S**(-2)*T*U**2 - 8.0_ki*tc(48)*S**(-2)*&
+ &T**2*U + 4.0_ki*tc(49)*S**(-1)*T*U - 32.0_ki*tc(50)*S**(-2)*T*U + 8.0_ki&
+ &*tc(51)*S**(-2)*T*U**2 - 8.0_ki*tc(51)*S**(-2)*T**2*U + 8.0_ki*tc(&
+ &52)*S**(-2)*T*U**2 - 8.0_ki*tc(52)*S**(-2)*T**2*U + 4.0_ki*tc(60)*&
+ &S**(-2)*T*U**2 + 4.0_ki*tc(60)*S**(-2)*T**2*U - 4.0_ki*tc(62)*&
+ &S**(-1)*T*U - 16.0_ki*tc(63)*S**(-2)*T*U - 8.0_ki*tc(65)*S**(-2)*&
+ &T**2*U + 4.0_ki*tc(86)*S**(-1)*T*U - 8.0_ki*tc(87)*S**(-2)*T*U**2 + &
+ &4.0_ki*tc(87)*S**(-1)*T*U + 4.0_ki*tc(88)*S**(-1)*T*U - 16.0_ki*tc(89)&
+ &*S**(-2)*T*U - 8.0_ki*tc(90)*S**(-2)*T*U**2 - 8.0_ki*tc(91)*S**(-2)*&
+ &T*U**2 + 8.0_ki*tc(99)*S**(-2)*T*U + 8.0_ki*tc(103)*S**(-2)*T*U
+ !
+ g3PPMM =&
+ &2.0_ki*tc(1)*S**(-2)*T*U**3 + 4.0_ki*tc(1)*S**(-2)*T**2*U**2 + 2.0_ki*&
+ &tc(1)*S**(-2)*T**3*U - 2.0_ki*tc(1)*T*U + 4.0_ki*tc(2)*S**(-1)*T*&
+ &U**2 + 4.0_ki*tc(2)*S**(-1)*T**2*U + 8.0_ki*tc(3)*S**(-1)*T*U**2 + 8.&
+ &0_ki*tc(3)*S**(-1)*T**2*U + 4.0_ki*tc(4)*S**(-1)*T*U**2 + 4.0_ki*tc(4)&
+ &*S**(-1)*T**2*U + 32.0_ki*tc(5)*S**(-2)*T**2*U - 16.0_ki*tc(5)*U - &
+ &16.0_ki*tc(5)*T + 4.0_ki*tc(6)*S**(-1)*T*U**2 + 4.0_ki*tc(6)*S**(-1)*&
+ &T**2*U - 16.0_ki*tc(7)*S**(-2)*T**2*U**2 + 8.0_ki*tc(7)*S**(-1)*T*&
+ &U**2 + 8.0_ki*tc(7)*S**(-1)*T**2*U - 16.0_ki*tc(8)*S**(-2)*T**2*U**2&
+ & - 16.0_ki*tc(9)*S**(-2)*T**2*U**2 + 8.0_ki*tc(9)*S**(-1)*T*U**2 + 8.&
+ &0_ki*tc(9)*S**(-1)*T**2*U - 16.0_ki*tc(10)*S**(-2)*T**2*U**2 + 8.0_ki*&
+ &tc(10)*S**(-1)*T*U**2 + 8.0_ki*tc(10)*S**(-1)*T**2*U + 4.0_ki*tc(11)&
+ &*S**(-1)*T*U**2 + 4.0_ki*tc(11)*S**(-1)*T**2*U - 32.0_ki*tc(12)*&
+ &S**(-2)*T*U**2 + 32.0_ki*tc(12)*S**(-2)*T**2*U + 32.0_ki*tc(12)*&
+ &S**(-1)*T*U - 64.0_ki*tc(13)*S**(-2)*T*U**2 + 64.0_ki*tc(13)*S**(-2)&
+ &*T**2*U
+ g3PPMM = g3PPMM + 64.0_ki*tc(13)*S**(-1)*T*U - 32.0_ki*tc(14)*S**(-2)&
+ &*T*U**2 + 32.0_ki*tc(14)*S**(-2)*T**2*U + 32.0_ki*tc(14)*S**(-1)*T*U&
+ & - 16.0_ki*tc(16)*S**(-2)*T**2*U**2 - 16.0_ki*tc(17)*S**(-2)*T**2*&
+ &U**2 - 48.0_ki*tc(18)*S**(-2)*T**2*U**2 - 64.0_ki*tc(19)*S**(-2)*&
+ &T**2*U**2 - 16.0_ki*tc(20)*S**(-2)*T**2*U**2 - 32.0_ki*tc(21)*&
+ &S**(-2)*T**2*U**2 - 48.0_ki*tc(22)*S**(-2)*T**2*U**2 - 16.0_ki*tc(23&
+ &)*S**(-2)*T**2*U**2 - 64.0_ki*tc(25) - 64.0_ki*tc(25)*S**(-2)*U**2&
+ & - 64.0_ki*tc(25)*S**(-2)*T**2 + 32.0_ki*tc(26)*S**(-1)*T*U - 64.0_ki*&
+ &tc(27)*S**(-2)*T*U**2 + 64.0_ki*tc(27)*S**(-2)*T**2*U + 64.0_ki*tc(&
+ &27)*S**(-1)*T*U - 64.0_ki*tc(28)*S**(-2)*T*U**2 + 64.0_ki*tc(28)*&
+ &S**(-2)*T**2*U - 64.0_ki*tc(29)*S**(-2)*T*U**2 + 64.0_ki*tc(29)*&
+ &S**(-2)*T**2*U + 64.0_ki*tc(29)*S**(-1)*T*U - 64.0_ki*tc(30)*S**(-2)&
+ &*T*U**2 + 64.0_ki*tc(30)*S**(-2)*T**2*U + 64.0_ki*tc(30)*S**(-1)*T*U&
+ & + 32.0_ki*tc(31)*S**(-1)*T*U - 16.0_ki*tc(35)*S**(-2)*T**2*U**2 - &
+ &32.0_ki*tc(36)*S**(-2)*T**2*U**2 - 16.0_ki*tc(37)*S**(-2)*T**2*U**2&
+ & - 32.0_ki*tc(38)*S**(-2)*T**2*U**2
+ g3PPMM = g3PPMM - 64.0_ki*tc(39)*S**(-2)*T**2*U**2 - 32.0_ki*tc(40)*&
+ &S**(-2)*T**2*U**2 - 16.0_ki*tc(42)*S**(-2)*T**2*U**2 - 32.0_ki*tc(43&
+ &)*S**(-2)*T**2*U**2 - 16.0_ki*tc(44)*S**(-2)*T**2*U**2 - 4.0_ki*tc(&
+ &47)*S**(-2)*T*U**2 - 8.0_ki*tc(47)*S**(-2)*T**2*U - 4.0_ki*tc(47)*&
+ &S**(-2)*T**3 + 8.0_ki*tc(47)*S**(-1)*T*U + 4.0_ki*tc(47)*T + 16.0_ki*&
+ &tc(48)*S**(-2)*T*U**2 + 8.0_ki*tc(49)*S**(-1)*T*U + 32.0_ki*tc(50)*&
+ &S**(-2)*U**2 + 16.0_ki*tc(51)*S**(-2)*T*U**2 + 16.0_ki*tc(52)*&
+ &S**(-2)*T*U**2 - 2.0_ki*tc(60)*S**(-2)*U**3 - 4.0_ki*tc(60)*S**(-2)*&
+ &T*U**2 - 2.0_ki*tc(60)*S**(-2)*T**2*U + 2.0_ki*tc(60)*U - 4.0_ki*tc(61&
+ &)*S**(-1)*T*U - 4.0_ki*tc(62)*S**(-1)*T*U + 16.0_ki*tc(63)*S**(-2)*&
+ &T**2 - 8.0_ki*tc(65)*S**(-2)*T**2*U - 2.0_ki*tc(86)*S**(-2)*U**3 - 4.&
+ &0_ki*tc(86)*S**(-2)*T*U**2 - 2.0_ki*tc(86)*S**(-2)*T**2*U + 4.0_ki*tc(&
+ &86)*S**(-1)*T*U + 2.0_ki*tc(86)*U + 8.0_ki*tc(87)*S**(-2)*T**2*U + 4.&
+ &0_ki*tc(88)*S**(-1)*T*U + 16.0_ki*tc(89)*S**(-2)*T**2 + 8.0_ki*tc(90)*&
+ &S**(-2)*T**2*U + 8.0_ki*tc(91)*S**(-2)*T**2*U + 4.0_ki*tc(99) - 4.0_ki&
+ &*tc(99)*S**(-2)*U**2
+ g3PPMM = g3PPMM - 4.0_ki*tc(99)*S**(-2)*T**2 + 4.0_ki*tc(103) - 4.0_ki*&
+ &tc(103)*S**(-2)*U**2 - 4.0_ki*tc(103)*S**(-2)*T**2
+ !
+ !
+ call cpu_time(t2)
+ !
+ ! The results are written in the file with unit 17
+ !
+ write (17,*) ''
+ write (17,*) 'Result of graph 3:'
+ write (17,*) '=================='
+ write (17,*) ''
+ write (17,*) 'g3PPPP ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPPP%a,ki),aimag(g3PPPP%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPPP%b,ki),aimag(g3PPPP%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPPP%c,ki),aimag(g3PPPP%c)
+ write (17,*) ''
+ write (17,*) 'g3PPPM ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPPM%a,ki),aimag(g3PPPM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPPM%b,ki),aimag(g3PPPM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPPM%c,ki),aimag(g3PPPM%c)
+ write (17,*) ''
+ write (17,*) 'g3PPMM ='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPMM%a,ki),aimag(g3PPMM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPMM%b,ki),aimag(g3PPMM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(g3PPMM%c,ki),aimag(g3PPMM%c)
+ write (17,*) ''
+ write (17,*) ''
+ write (17,*) 'CPU time for graph 3 = ',t2-t1
+ write (17,*) ''
+ !
+ ampPPPP = g1PPPP+g2PPPP+g3PPPP
+ ampPPPM = g1PPPM+g2PPPM+g3PPPM
+ ampPPMM = g1PPMM+g2PPMM+g3PPMM
+ !
+ ! analytical result for ++--
+ !
+ resPPMM = -8.0_ki*(1.0_ki+(T-U)/S*log(T/U)+(T**2+U**2)/2/S**2*(pi**2+log(T/U)**2))
+ !
+ ! The results are written in the file with unit 17
+ !
+ write (17,*) ''
+ write (17,*) 'Four photon helicity amplitudes'
+ write (17,*) '==============================='
+ write (17,*) ''
+ write (17,*) 'amp(++++)='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPPP%a,ki),aimag(ampPPPP%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPPP%b,ki),aimag(ampPPPP%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPPP%c,ki),aimag(ampPPPP%c)
+ write (17,*) ''
+ write (17,*) 'amp(+++-)='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPPM%a,ki),aimag(ampPPPM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPPM%b,ki),aimag(ampPPPM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPPM%c,ki),aimag(ampPPPM%c)
+ write (17,*) ''
+ write (17,*) 'amp(++--)='
+ write (17,'("+ 1/epsilon^2 * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPMM%a,ki),aimag(ampPPMM%a)
+ write (17,'("+ 1/epsilon * (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPMM%b,ki),aimag(ampPPMM%b)
+ write (17,'("+ (",e16.10,1x,"+ I*",1x,e16.10,")")') real(ampPPMM%c,ki),aimag(ampPPMM%c)
+ write (17,*) ''
+ write (17,*) 'Analytical result:'
+ write (17,*) '=================='
+ write (17,*) ''
+ write (17,*) 'amp(++++) = +8'
+ write (17,*) 'amp(+++-) = -8'
+ !
+ if (rat_or_tot_par == 'rat') then
+ !
+ write (17,*) 'amp(++--) = -8'
+ !
+ else
+ !
+ write (17,*) 'amp(++--) = -8*( + 1 '
+ write (17,*) ' + (t-u)/s*log(t/u) '
+ write (17,*) ' + (t**2+u**2)/2/s**2*( pi**2 + log(t/u)**2 ) )'
+ write (17,'(" =",e16.10)') resPPMM
+ !
+ end if
+ !
+ call exitgolem95
+ !
+ write (17,*) ''
+ write (6,*) 'The result has been written to result_4photon.txt'
+ close(17)
+ close(19)
+ !
+end program main
+!
+!
Index: 95/branches/golem95_without_olo_cmake/demos/README
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/README (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/README (revision 119)
@@ -0,0 +1,65 @@
+An overview of the demo options is given in the file DemoContents
+
+
+To run the demos:
+
+1) make sure the golem95 library has been installed correctly using
+ ./configure [options]
+ make
+ make install
+ from the main directory.
+
+ If you want to run demos/demo_LT, which is a Fortran 77 program,
+ make sure you have specified the correct options in running
+ configure. Either specify the Fortran compiler as both the
+ Fortran 90 and the Fortran 77 compiler.
+
+ ./configure [other-options] FC=gfortran F77=gfortran
+
+ It is also possible to choose the compilers differently
+ but linking becomes more involved and goes beyond the
+ scope of this README file.
+
+2) chdir to demos and type 'make' if you want to compile all demos
+ or add the name of the demo file if you want to run only one
+ demo file, e.g. 'make demo_4point'.
+
+ You can choose N-point functions for N=3,4,5 or 6,
+ or calculate 4-photon helicity amplitudes,
+ or do some tests in a region where a kinematic determinant becomes small.
+ A list of all demo options is given in the file DemoContents.
+
+3) if you chose to calculate an N-point form factor,
+ you will be asked to give the rank of the integral resp.
+ form factor you would like to calculate
+
+ NOTE:
+ For the demo programs,
+ the numerical points have been fixed to some arbitrarily
+ chosen value.
+ If the rank is nonzero, the program will pick a certain
+ Feynman parameter configuration for the numerator.
+ If you would like to choose a different configuration,
+ you should either change the corresponding file
+ demo_Npoint.f90
+ or
+ go to the directory "test",
+ where you can choose the Feynman parameters in the numerator
+ and define the numerical point via an input file.
+
+ We should mention that if the momentum squared p_i^2 of an external leg
+ of an integral is of the order of machine precision, we set p^2 to zero.
+ Thus, when using quadruple precision, this cutoff is different from
+ the one in double precision.
+ Therefore, if using demo_6point.f90 in quadruple precision,
+ p_i^2 of the order of 10^-16 will be treated as off-shell legs
+ and thus the result will be different if the input momenta are
+ unchanged, i.e. light-like in double precision only.
+
+4) The results of the demo files are listed in the files called
+ "table_of_results*.txt" and "demo*.txt".
+ They allow the user to verify that his installation is running correctly.
+
+
+
+
Index: 95/branches/golem95_without_olo_cmake/demos/plot_demo_A55.gp
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/plot_demo_A55.gp (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/plot_demo_A55.gp (revision 119)
@@ -0,0 +1,15 @@
+#figure 'demo_a55_dets_sing.ps'
+set style data linespoints
+set xlabel "pt5"
+#set ylabel " "
+set logscale x
+#set title 'scattering singularity'
+#set yr [-.001:.001]
+plot \
+"demo_a55_dets_sing.dat" using 1:3 title "Re[A55(1,1,1,1,1)] " ,\
+"demo_a55_dets_sing.dat" using 1:4 title "Im[A55(1,1,1,1,1)] "
+set terminal postscript color
+set output 'demo_a55_dets_sing.ps'
+replot
+set output
+set terminal x11
Index: 95/branches/golem95_without_olo_cmake/demos/DemoContents
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/DemoContents (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/DemoContents (revision 119)
@@ -0,0 +1,143 @@
+The demo programs calculate the following examples:
+
+1) three-point functions
+2) four-point functions
+3) five-point functions
+4) six-point functions
+5) calculation of 4-photon helicity amplitudes
+6) numerical stability demo: detG -> 0
+7) numerical stability demo: detS -> 0
+8) example how to call Golem form factors using the same
+ syntax as for LoopTools calls (useful for comparisons)
+9) examples of Golem form factor calls with complex masses
+10) demo_tens_rec.f90: demonstrates the use of the function
+ "evaluate" which combines the coefficients obtained by
+ tensorial reconstruction of the integrand with the
+ corresponding tensor integrals
+
+ the items above contains the following options:
+
+1) three-point functions:
+
+ first, one has to choose the type of triangle,
+ corresponding to the number of off-shell external legs:
+
+ 1) one off-shell leg
+ 2) two off-shell legs
+ 3) three off-shell legs
+
+ for each of the three options above, one can choose to calculate:
+
+ 0) scalar three-point function in n dimensions
+ 1) three-point function in n dimensions with one Feynman parameter (z1) in the numerator
+ 2) three-point function in n dimensions with two Feynman parameters (z1*z2)
+ 3) three-point function in n dimensions with three Feynman parameters (z1^2*z3)
+ 4) scalar three-point function in n+2 dimensions
+ 5) three-point function in n+2 dimensions with one Feynman parameter (z2)
+
+
+2) four-point functions:
+
+ first, one has to choose the type of box,
+ corresponding to the number of off-shell external legs:
+
+ 1) no off-shell leg
+ 2) one off-shell leg
+ 3) two opposite off-shell legs
+ 4) two adjacent off-shell legs
+ 5) three off-shell legs
+ 6) four off-shell legs
+
+ for each of the five options above, one can choose to calculate:
+
+ 0) scalar four-point function in n dimensions
+ 1) four-point function in n dimensions with one Feynman parameter (z1)
+ 2) four-point function in n dimensions with two Feynman parameters (z1*z4)
+ 3) four-point function in n dimensions with three Feynman parameters (z1^2*z3)
+ 4) four-point function in n dimensions with four Feynman parameters (z1*z2*z3*z4)
+ 5) scalar four-point function in n+2 dimensions
+ 6) four-point function in n+2 dimensions with two Feynman parameters (z1*z2)
+ 7) scalar four-point function in n+4 dimensions
+
+
+3) five-point functions:
+
+ 0) form factor for five-point function, rank 0
+ 1) form factor for five-point function, rank 3 (z1*z2*z4 in numerator)
+ 2) form factor for five-point function, rank 5 (z1*z2*z3*z4*z5 in numerator)
+ 3) form factor for a pinched 5-point diagram (propagator 3 missing), rank 0
+ 4) form factor for a doubly pinched 5-point diagram (propagators 1 and 4 missing), rank 0
+
+
+4) six-point functions:
+
+ 0) form factor for six-point function, rank 0
+ 1) form factor for six-point function, rank 4 (z1^2*z2*z3 in numerator)
+ 2) form factor A5 for pinched diagram, propagator 3 missing, rank 0
+ 3) form factor for double pinched diagram, propagators 2,5 missing, rank 0
+ 4) form factor for triple pinched diagram, propagators 2,4,6 missing, rank 0
+
+
+5) calculation of 4-photon helicity amplitudes
+
+ The purpose of this example is to demonstrate how to use golem90 for the
+ calculation of full amplitudes.
+ It calculates all three different helicity configurations of the
+ on-shell 4-photon amplitude for a certain kinematic point.
+
+
+6) numerical stability demo: detG -> 0
+
+ Calculates a rank three 4-point function (in 6 dimensions)
+ in a region where |B|=detG/detS becomes small,
+ i.e. where a representation based on the reduction to scalar integrals would fail.
+ The Feynman parameters in the numerator are z1*z2^2.
+ The example follows closely the one described in section 7.2 of
+ hep-ph/0504267 and is also described in the golem95 manuscript:
+ The program makes 30 iterations where B=-detG/detS becomes smaller in
+ each iteration.
+ The results for real and imaginary parts of I_4^6(z1*z2^2)
+ are written to the file demo_detG.dat as a function of x,
+ where |B|~x^2 for small x.
+
+ The files plotDetG_Re.gp and plotDetG_Im.gp can be used to
+ plot the result with gnuplot by "load 'plotDetG_Re/Im.gp' ".
+ One can see from the plots that
+ The file demo_detG.txt contains the details of the kinematics
+ for each iteration.
+
+
+7) numerical stability demo: detS -> 0
+
+ tests the rank 5 five-point tensor coefficient A55(1,1,1,1,1)
+ with respect to its behaviour
+ when a sub-determinant det S ~ (detG)^2 -> 0.
+ The results for real and imaginary parts of the eps^0 part of A55
+ are written to the file demo_a55_dets_sing.dat as a function
+ of the transverse momentum of particle 5
+ and can be plotted with gnuplot by "load 'plot_demo_A55.gp' ".
+
+
+8) call of Golem form factors using LoopTools conventions:
+
+ produces Golem output for N-point functions which can be called
+ using the same syntax as for LoopTools calls.
+ In Golem the functions E0i,D0i,C0i etc are denoted by
+ gE0i,gD0i,gC0i in order to avoid a name clash
+ in case the user would like to call Golem and LoopTools
+ functions within the same program.
+ Example: to calculate a certain 4-point integral
+ (scalar integrals or tensor coefficients), choose nlegs=4
+ in demo_LT.f (iep=0 to obtain the finite part) and
+ insert the numerical values for the kinematic point you would like
+ to calculate (in terms of invariants).
+ Then the program will calculate
+ D0i('dd0',p1sq,p2sq,p3sq,p4sq,s12,s23,m1,m2,m3,m4,mu2,iep)
+
+
+NOTE: The numerical points for these demo programs have been fixed
+ to arbitrarily chosen values.
+ If the user would like to change these values, he/she has to
+ edit the files demo_npoint.f90 OR use the files contained
+ in the subdirectory test/ where the numerical point can be
+ given as an input
Index: 95/branches/golem95_without_olo_cmake/demos/demo_detG.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/demo_detG.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/demo_detG.txt (revision 119)
@@ -0,0 +1,217 @@
+ n= 0
+ x= 0.37796447300922720
+ |B|= 3.53978797282413242E-003
+ s12= 32.000000000000007
+ s23= -13.633823722716553
+ real part: -1.99233586413332699E-003
+ imaginary part: 1.91540347765334156E-003
+ n= 1
+ x= 0.18898223650461360
+ |B|= 1.74624330060833485E-003
+ s12= 28.999999999999996
+ s23= -9.7056343802986795
+ real part: -2.52032707150785795E-003
+ imaginary part: 1.82983574507324174E-003
+ n= 2
+ x= 9.44911182523067994E-002
+ |B|= 6.09593017016339797E-004
+ s12= 28.250000000000004
+ s23= -8.2134632091989559
+ real part: -2.73474790280067281E-003
+ imaginary part: 1.71207864542790677E-003
+ n= 3
+ x= 4.72455591261533997E-002
+ |B|= 1.79233662443277692E-004
+ s12= 28.062500000000000
+ s23= -7.5736725194676175
+ real part: -2.82109581554198250E-003
+ imaginary part: 1.63863417851578151E-003
+ n= 4
+ x= 2.36227795630766998E-002
+ |B|= 4.85124714383898783E-005
+ s12= 28.015625000000000
+ s23= -7.2787971523194486
+ real part: -2.85812924645548238E-003
+ imaginary part: 1.59918928242200049E-003
+ n= 5
+ x= 1.18113897815383499E-002
+ |B|= 1.26133511489009530E-005
+ s12= 28.003906249999996
+ s23= -7.1374171104253374
+ real part: -2.87512950986082254E-003
+ imaginary part: 1.57891681472897426E-003
+ n= 6
+ x= 5.90569489076917496E-003
+ |B|= 3.21538465639308257E-006
+ s12= 28.000976562500000
+ s23= -7.0682167309076247
+ real part: -2.88323292511332438E-003
+ imaginary part: 1.56866012950075597E-003
+ n= 7
+ x= 2.95284744538458748E-003
+ |B|= 8.11689033061597636E-007
+ s12= 28.000244140625000
+ s23= -7.0339858522449505
+ real part: -2.88718485461080150E-003
+ imaginary part: 1.56350382082238136E-003
+ n= 8
+ x= 1.47642372269229374E-003
+ |B|= 2.03908051555770823E-007
+ s12= 28.000061035156254
+ s23= -7.0169623531818530
+ real part: -2.88913580846919538E-003
+ imaginary part: 1.56091894437591829E-003
+ n= 9
+ x= 7.38211861346146870E-004
+ |B|= 5.11005765696649008E-008
+ s12= 28.000015258789063
+ s23= -7.0084735402760678
+ real part: -2.89010502491409945E-003
+ imaginary part: 1.55962485935452863E-003
+ n= 10
+ x= 3.69105930673073435E-004
+ |B|= 1.27906108172469525E-008
+ s12= 28.000003814697269
+ s23= -7.0042348619243615
+ real part: -2.89058806707858437E-003
+ imaginary part: 1.55897740936323387E-003
+ n= 11
+ x= 1.84552965336536718E-004
+ |B|= 3.19958736441392419E-009
+ s12= 28.000000953674320
+ s23= -7.0021169540168930
+ real part: -2.89082919653130830E-003
+ imaginary part: 1.55865358302496849E-003
+ n= 12
+ x= 9.22764826682683588E-005
+ |B|= 8.00138756469969562E-010
+ s12= 28.000000238418579
+ s23= -7.0010583577856398
+ real part: -2.89094966333604351E-003
+ imaginary part: 1.55849164458613226E-003
+ n= 13
+ x= 4.61382413341341794E-005
+ |B|= 2.00064933716484669E-010
+ s12= 28.000000059604641
+ s23= -7.0005291490888073
+ real part: -2.89100987225623073E-003
+ imaginary part: 1.55841066905753299E-003
+ n= 14
+ x= 2.30691206670670897E-005
+ |B|= 5.00200143276260205E-011
+ s12= 28.000000014901165
+ s23= -7.0002645670936126
+ real part: -2.89103997059555725E-003
+ imaginary part: 1.55837017971696972E-003
+ n= 15
+ x= 1.15345603335335448E-005
+ |B|= 1.25054762144463539E-011
+ s12= 28.000000003725287
+ s23= -7.0001322816841345
+ real part: -2.89105501823500206E-003
+ imaginary part: 1.55834993465275005E-003
+ n= 16
+ x= 5.76728016676677242E-006
+ |B|= 3.12642813394323744E-012
+ s12= 28.000000000931323
+ s23= -7.0000661403764033
+ real part: -2.89106254167216569E-003
+ imaginary part: 1.55833981202217189E-003
+ n= 17
+ x= 2.88364008338338621E-006
+ |B|= 7.81614418606275516E-013
+ s12= 28.000000000232831
+ s23= -7.0000330700717868
+ real part: -2.89106630329510807E-003
+ imaginary part: 1.55833475068226741E-003
+ n= 18
+ x= 1.44182004169169311E-006
+ |B|= 1.95404527796565291E-013
+ s12= 28.000000000058204
+ s23= -7.0000165350067878
+ real part: -2.89106818408267022E-003
+ imaginary part: 1.55833222000616232E-003
+ n= 19
+ x= 7.20910020845846553E-007
+ |B|= 4.88512473425745147E-014
+ s12= 28.000000000014552
+ s23= -7.0000082674961179
+ real part: -2.89106912447047214E-003
+ imaginary part: 1.55833095466657054E-003
+ n= 20
+ x= 3.60455010422923277E-007
+ |B|= 1.22128262598420637E-014
+ s12= 28.000000000003642
+ s23= -7.0000041337462413
+ real part: -2.89106959466287885E-003
+ imaginary part: 1.55833032199639084E-003
+ n= 21
+ x= 1.80227505211461638E-007
+ |B|= 3.05320836798652529E-015
+ s12= 28.000000000000906
+ s23= -7.0000020668726641
+ real part: -2.89106982975870881E-003
+ imaginary part: 1.55833000566120536E-003
+ n= 22
+ x= 9.01137526057308191E-008
+ |B|= 7.63302317374958422E-016
+ s12= 28.000000000000227
+ s23= -7.0000010334362193
+ real part: -2.89106994730653055E-003
+ imaginary part: 1.55832984749358703E-003
+ n= 23
+ x= 4.50568763028654096E-008
+ |B|= 1.90825607516035115E-016
+ s12= 28.000000000000060
+ s23= -7.0000005167180817
+ real part: -2.89107000608041821E-003
+ imaginary part: 1.55832976840977267E-003
+ n= 24
+ x= 2.25284381514327048E-008
+ |B|= 4.77064054005460071E-017
+ s12= 28.000000000000011
+ s23= -7.0000002583590328
+ real part: -2.89107003546735684E-003
+ imaginary part: 1.55832972886786494E-003
+ n= 25
+ x= 1.12642190757163524E-008
+ |B|= 1.19266017903286769E-017
+ s12= 28.000000000000004
+ s23= -7.0000001291795151
+ real part: -2.89107005016082377E-003
+ imaginary part: 1.55832970909690945E-003
+ n= 26
+ x= 5.63210953785817620E-009
+ |B|= 2.98165050260619150E-018
+ s12= 28.000000000000004
+ s23= -7.0000000645897575
+ real part: -2.89107005750755680E-003
+ imaginary part: 1.55832969921143138E-003
+ n= 27
+ x= 2.81605476892908810E-009
+ |B|= 7.45412632529550996E-019
+ s12= 28.000000000000004
+ s23= -7.0000000322948779
+ real part: -2.89107006118092353E-003
+ imaginary part: 1.55832969426869267E-003
+ n= 28
+ x= 1.40802738446454405E-009
+ |B|= 1.86353158992138091E-019
+ s12= 28.000000000000004
+ s23= -7.0000000161474389
+ real part: -2.89107006301760668E-003
+ imaginary part: 1.55832969179732256E-003
+ n= 29
+ x= 7.04013692232272024E-010
+ |B|= 4.65882898555033215E-020
+ s12= 28.000000000000004
+ s23= -7.0000000080737195
+ real part: -2.89107006393594934E-003
+ imaginary part: 1.55832969056163913E-003
+ n= 30
+ x= 3.52006846116136012E-010
+ |B|= 1.16470724773094295E-020
+ s12= 28.000000000000004
+ s23= -7.0000000040368597
+ real part: -2.89107006439511850E-003
+ imaginary part: 1.55832968994379655E-003
Index: 95/branches/golem95_without_olo_cmake/demos/table_of_results_6point.txt
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos/table_of_results_6point.txt (revision 0)
+++ 95/branches/golem95_without_olo_cmake/demos/table_of_results_6point.txt (revision 119)
@@ -0,0 +1,37 @@
+Hexagons
+
+After a successful make in the demos directory, run ./demo_6point for the six-point functions. Then the results for each argument (written in test6point.txt) should be:
+
+0
+
+ 1/epsilon^2 * (-.2465488434E+04 + I* 0.0000000000E+00)
++ 1/epsilon * (-.7468231604E+04 + I* 0.9797644652E+03)
++ 1 * (0.1656127181E+04 + I* 0.2469183142E+05)
+
+
+1
+
+ 1/epsilon^2 * (0.1376194264E-13 + I* 0.0000000000E+00)
++ 1/epsilon * (0.9559022209E-13 + I* -.4221155869E-13)
++ 1 * (0.2604879561E+03 + I* 0.7607862773E+03)
+
+
+2
+
+ 1/epsilon^2 * (-.1144416767E+03 + I* 0.0000000000E+00)
++ 1/epsilon * (0.1387809116E+03 + I* -.1618079566E+04)
++ 1 * (0.2590764196E+04 + I* -.5085807830E+04)
+
+
+3
+
+ 1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.2862404180E+02 + I* 0.0000000000E+00)
++ 1 * (-.4535560545E+02 + I* -.4411776210E+02)
+
+
+4
+
+ 1/epsilon^2 * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1/epsilon * (0.0000000000E+00 + I* 0.0000000000E+00)
++ 1 * (-.9469264051E+01 + I* -.2349625924E+02)
Index: 95/branches/golem95_without_olo_cmake/demos
===================================================================
--- 95/branches/golem95_without_olo_cmake/demos (revision 118)
+++ 95/branches/golem95_without_olo_cmake/demos (revision 119)
Property changes on: 95/branches/golem95_without_olo_cmake/demos
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/COPYING
===================================================================
--- 95/branches/golem95_without_olo_cmake/COPYING (revision 0)
+++ 95/branches/golem95_without_olo_cmake/COPYING (revision 119)
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Property changes on: 95/branches/golem95_without_olo_cmake/COPYING
___________________________________________________________________
Added: svn:mergeinfo
Index: 95/branches/golem95_without_olo_cmake/Makefile.am
===================================================================
--- 95/branches/golem95_without_olo_cmake/Makefile.am (revision 0)
+++ 95/branches/golem95_without_olo_cmake/Makefile.am (revision 119)
@@ -0,0 +1,93 @@
+# vim: ts=3:sw=3
+DIST_SUBDIRS = demos src avh_olo-2.2.1
+SUBDIRS = avh_olo-2.2.1 src
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = golem95.pc
+
+lib_LTLIBRARIES = libgolem.la libavh_olo.la
+libgolem_la_SOURCES =
+libavh_olo_la_SOURCES =
+libavh_olo_la_LIBADD = \
+ $(builddir)/avh_olo-2.2.1/libavh_olo.la
+libgolem_la_LIBADD = \
+ $(builddir)/src/form_factor/libgolem95_formfactor.la \
+ $(builddir)/src/integrals/four_point/libgolem95_integrals_four_point.la \
+ $(builddir)/src/integrals/three_point/libgolem95_integrals_three_point.la \
+ $(builddir)/src/integrals/two_point/libgolem95_integrals_two_point.la \
+ $(builddir)/src/integrals/one_point/libgolem95_integrals_one_point.la \
+ $(builddir)/src/numerical/libgolem95_numerical.la \
+ $(builddir)/src/kinematic/libgolem95_kinematics.la \
+ $(builddir)/src/module/libgolem95_module.la \
+ $(builddir)/src/interface/libgolem95_interface.la \
+ $(builddir)/avh_olo-2.2.1/libavh_olo.la
+
+EXTRA_DIST = \
+ $(srcdir)/demos/DemoContents \
+ $(srcdir)/demos/plot_demo_A55.gp \
+ $(srcdir)/demos/plotdetG_Im.gp \
+ $(srcdir)/demos/plotdetG_Re.gp \
+ $(srcdir)/demos/README \
+ $(srcdir)/demos/table_of_results_3point_option1.txt \
+ $(srcdir)/demos/table_of_results_3point_option2.txt \
+ $(srcdir)/demos/table_of_results_3point_option3.txt \
+ $(srcdir)/demos/table_of_results_3point_option4.txt \
+ $(srcdir)/demos/table_of_results_3point_option5.txt \
+ $(srcdir)/demos/table_of_results_3point_option6.txt \
+ $(srcdir)/demos/table_of_results_3point_option7.txt \
+ $(srcdir)/demos/table_of_results_4point_option1.txt \
+ $(srcdir)/demos/table_of_results_4point_option2.txt \
+ $(srcdir)/demos/table_of_results_4point_option3.txt \
+ $(srcdir)/demos/table_of_results_4point_option4.txt \
+ $(srcdir)/demos/table_of_results_4point_option5.txt \
+ $(srcdir)/demos/table_of_results_4point_option6.txt \
+ $(srcdir)/demos/table_of_results_4point_option7.txt \
+ $(srcdir)/demos/table_of_results_4point_option8.txt \
+ $(srcdir)/demos/table_of_results_5point.txt \
+ $(srcdir)/demos/table_of_results_6point.txt \
+ $(srcdir)/demos/table_of_results_LT.txt \
+ $(srcdir)/demos/table_of_results_4photon.txt \
+ $(srcdir)/demos/demo_a55_dets_sing.txt \
+ $(srcdir)/demos/demo_detG.txt \
+ $(srcdir)/test/cleanup.pl \
+ $(srcdir)/test/Makefile_proto.in \
+ $(srcdir)/test/makenumerator.pl \
+ $(srcdir)/test/maketest.pl \
+ $(srcdir)/test/mask_3point \
+ $(srcdir)/test/mask_4point \
+ $(srcdir)/test/mask_5point \
+ $(srcdir)/test/mask_6point \
+ $(srcdir)/test/momenta.dat \
+ $(srcdir)/test/mom_rambo.f \
+ $(srcdir)/test/param.input \
+ $(srcdir)/test/Readme \
+ $(srcdir)/doc/robodoc.rc \
+ $(srcdir)/doc/html/numerical/*.html \
+ $(srcdir)/doc/html/integrals/one_point/*.html \
+ $(srcdir)/doc/html/integrals/two_point/*.html \
+ $(srcdir)/doc/html/integrals/three_point/*.html \
+ $(srcdir)/doc/html/integrals/four_point/*.html \
+ $(srcdir)/doc/html/form_factor/*.html \
+ $(srcdir)/doc/html/kinematic/*.html \
+ $(srcdir)/doc/html/module/*.html \
+ $(srcdir)/doc/html/interface/*.html \
+ $(srcdir)/doc/html/*.html \
+ $(srcdir)/doc/html/robodoc.css \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_a0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_a0_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b0_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b11_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_b11_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_c0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_c0_b.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_d0_a.h90 \
+ $(srcdir)/avh_olo-2.2.1/avh_olo_d0_b.h90 \
+ makedepend.perl \
+ autogen.sh
+
+ACLOCAL_AMFLAGS = -I m4
+EXTRA_DIST+=m4
+
+dist-hook:
+ find $(distdir) -name '*.mod' -exec rm \{} \;

File Metadata

Mime Type
application/octet-stream
Expires
Sat, Oct 12, 11:19 AM (1 d, 23 h)
Storage Engine
chunks
Storage Format
Chunks
Storage Handle
RhFg42TIIfku
Default Alt Text
(6 MB)

Event Timeline